diff options
-rw-r--r-- | lib/IR/Globals.cpp | 3 | ||||
-rw-r--r-- | lib/IR/Verifier.cpp | 4 | ||||
-rw-r--r-- | test/Assembler/addrspacecast-alias.ll | 6 |
3 files changed, 11 insertions, 2 deletions
diff --git a/lib/IR/Globals.cpp b/lib/IR/Globals.cpp index da3b02a0fa..cc42351f10 100644 --- a/lib/IR/Globals.cpp +++ b/lib/IR/Globals.cpp @@ -237,7 +237,8 @@ GlobalValue *GlobalAlias::getAliasedGlobal() { return GV; ConstantExpr *CE = cast<ConstantExpr>(C); - assert((CE->getOpcode() == Instruction::BitCast || + assert((CE->getOpcode() == Instruction::BitCast || + CE->getOpcode() == Instruction::AddrSpaceCast || CE->getOpcode() == Instruction::GetElementPtr) && "Unsupported aliasee"); diff --git a/lib/IR/Verifier.cpp b/lib/IR/Verifier.cpp index 35b786ecf2..44c66c9062 100644 --- a/lib/IR/Verifier.cpp +++ b/lib/IR/Verifier.cpp @@ -550,9 +550,11 @@ void Verifier::visitGlobalAlias(GlobalAlias &GA) { ConstantExpr *CE = dyn_cast<ConstantExpr>(Aliasee); Assert1(CE && (CE->getOpcode() == Instruction::BitCast || + CE->getOpcode() == Instruction::AddrSpaceCast || CE->getOpcode() == Instruction::GetElementPtr) && isa<GlobalValue>(CE->getOperand(0)), - "Aliasee should be either GlobalValue or bitcast of GlobalValue", + "Aliasee should be either GlobalValue, bitcast or " + "addrspacecast of GlobalValue", &GA); if (CE->getOpcode() == Instruction::BitCast) { diff --git a/test/Assembler/addrspacecast-alias.ll b/test/Assembler/addrspacecast-alias.ll new file mode 100644 index 0000000000..6623a25d18 --- /dev/null +++ b/test/Assembler/addrspacecast-alias.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as -disable-output %s + +; Test that global aliases are allowed to be constant addrspacecast + +@i = internal addrspace(1) global i8 42 +@ia = alias internal i8 addrspace(2)* addrspacecast (i8 addrspace(1)* @i to i8 addrspace(2)*) |