diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-04-29 18:02:48 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-04-29 18:02:48 +0000 |
commit | c6c98af9e5814e8066c82f20ca11cf646a5fc289 (patch) | |
tree | 386170515eb43b2c98aa6240bed797d17406313c /lib/VMCore/Globals.cpp | |
parent | ee181bc899d06c642f27e6a5157e61a5079d0acd (diff) | |
download | llvm-c6c98af9e5814e8066c82f20ca11cf646a5fc289.tar.gz llvm-c6c98af9e5814e8066c82f20ca11cf646a5fc289.tar.bz2 llvm-c6c98af9e5814e8066c82f20ca11cf646a5fc289.tar.xz |
Implement review feedback
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36564 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Globals.cpp')
-rw-r--r-- | lib/VMCore/Globals.cpp | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/lib/VMCore/Globals.cpp b/lib/VMCore/Globals.cpp index 88a8c0b2a7..aeb34f4371 100644 --- a/lib/VMCore/Globals.cpp +++ b/lib/VMCore/Globals.cpp @@ -12,6 +12,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/Constants.h" #include "llvm/GlobalVariable.h" #include "llvm/GlobalAlias.h" #include "llvm/DerivedTypes.h" @@ -193,16 +194,36 @@ void GlobalAlias::eraseFromParent() { } bool GlobalAlias::isDeclaration() const { - const GlobalValue* AV = dyn_cast_or_null<const GlobalValue>(getAliasee()); - return (AV && AV->isDeclaration()); + const GlobalValue* AV = getAliasedGlobal(); + if (AV) + return AV->isDeclaration(); + else + return false; } void GlobalAlias::setAliasee(Constant *Aliasee) { - if (Aliasee) { - assert(Aliasee->getType() == getType() && + if (Aliasee) + assert(Aliasee->getType() == getType() && "Alias and aliasee types should match!"); - setOperand(0, Aliasee); - } + + setOperand(0, Aliasee); +} + +const GlobalValue *GlobalAlias::getAliasedGlobal() const { + const Constant *C = getAliasee(); + if (C) { + if (const GlobalValue *GV = dyn_cast<GlobalValue>(C)) + return GV; + else { + const ConstantExpr *CE = 0; + if ((CE = dyn_cast<ConstantExpr>(Aliasee)) && + (CE->getOpcode() == Instruction::BitCast)) + return cast<GlobalValue>(CE->getOperand(0)); + else + assert(0 && "Unsupported aliasee"); + } + } else + return 0; } |