Compilation error with LLVM 2.9

Hi all,

     I wrote code that compiled with llvm 2.8, but now I'm using llvm 2.9 and it doesn't compile anymore:

My code looks like this:

User *U;
...
if (PHINode * phi = dyn_cast<PHINode>(U)) {
             ...
             BasicBlock * Pred = phi->getIncomingBlock(I);
             ...
}

And when I compile it with clang:

Live.cc:130:27: error: member access into incomplete type 'llvm::PHINode'
                         BasicBlock * Pred = phi->getIncomingBlock(I);
                                                ^
In file included from Live.cc:3:
In file included from ./Live.h:9:
/usr/include/llvm/Analysis/LoopInfo.h:58:7: note: forward declaration of
       'llvm::PHINode'
class PHINode;
       ^
In file included from Live.cc:3:
In file included from ./Live.h:5:
In file included from /usr/include/llvm/Support/CFG.h:19:
In file included from /usr/include/llvm/Function.h:21:
In file included from /usr/include/llvm/GlobalValue.h:21:
In file included from /usr/include/llvm/Constant.h:17:
In file included from /usr/include/llvm/User.h:22:
In file included from /usr/include/llvm/Value.h:20:
/usr/include/llvm/Support/Casting.h:55:12: error: incomplete type 'llvm::PHINode'
       named in nested name specifier
     return To::classof(&Val);
            ^~~~
/usr/include/llvm/Support/Casting.h:73:33: note: in instantiation of member function
       'llvm::isa_impl<llvm::PHINode, llvm::User>::doit' requested here
     return isa_impl<To,FromTy>::doit(Val);
                                 ^
/usr/include/llvm/Support/Casting.h:85:71: note: in instantiation of member function
       'llvm::isa_impl_wrap<llvm::PHINode, const llvm::User, const llvm::User>::doit'
       requested here
                    typename simplify_type<const

::SimpleType>::doit(Val);

                                                                       ^
/usr/include/llvm/Support/Casting.h:103:12: note: in instantiation of function
       template specialization 'llvm::isa_impl_cl<llvm::User>::isa<llvm::PHINode>'
       requested here
     return isa_impl_cl<FromCl>::template isa<ToCl>(*Val);
            ^
/usr/include/llvm/Support/Casting.h:118:10: note: in instantiation of function
       template specialization 'llvm::isa_impl_cl<llvm::User *>::isa<llvm::PHINode>'
       requested here
   return isa_impl_cl<Y>::template isa<X>(Val);
          ^
/usr/include/llvm/Support/Casting.h:228:10: note: in instantiation of function
       template specialization 'llvm::isa<llvm::PHINode, llvm::User *>' requested here
   return isa<X>(Val) ? cast<X, Y>(Val) : 0;
          ^
Live.cc:122:23: note: in instantiation of function template specialization
       'llvm::dyn_cast<llvm::PHINode, llvm::User *>' requested here
                 if (PHINode * phi = dyn_cast<PHINode>(U)) {
                                     ^
In file included from Live.cc:3:
In file included from ./Live.h:9:
/usr/include/llvm/Analysis/LoopInfo.h:58:7: note: forward declaration of
       'llvm::PHINode'
class PHINode;
       ^
2 errors generated.
make: *** [../bin/Live.o] Error 1

Do you know what's wrong ?

Thanks.

Julien

Looks like something you were including that had the phi node class included
isn't doing so anymore. You should include more files :slight_smile:

-eric

Looks like something you were including that had the phi node class included
isn't doing so anymore. You should include more files :slight_smile:

Ok thanks, It was just "Instructions.h" that needed to be include.