From: Rafael Espindola Date: Mon, 23 Feb 2015 21:51:06 +0000 (+0000) Subject: Fix invalid cast. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=38ce6c7c1cb5bde2b187dfd0522dd15505b4d30d;p=oota-llvm.git Fix invalid cast. Fixes PR22525. Patch by Ben Longbons with testcase by me. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230271 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/IR/Core.cpp b/lib/IR/Core.cpp index 6303e4548bf..f007616a1c3 100644 --- a/lib/IR/Core.cpp +++ b/lib/IR/Core.cpp @@ -1630,7 +1630,7 @@ LLVMValueRef LLVMAddAlias(LLVMModuleRef M, LLVMTypeRef Ty, LLVMValueRef Aliasee, auto *PTy = cast(unwrap(Ty)); return wrap(GlobalAlias::create(PTy->getElementType(), PTy->getAddressSpace(), GlobalValue::ExternalLinkage, Name, - unwrap(Aliasee), unwrap(M))); + unwrap(Aliasee), unwrap(M))); } /*--.. Operations on functions .............................................--*/ diff --git a/unittests/IR/ConstantsTest.cpp b/unittests/IR/ConstantsTest.cpp index 5414b25ca3a..5d271e220ef 100644 --- a/unittests/IR/ConstantsTest.cpp +++ b/unittests/IR/ConstantsTest.cpp @@ -7,12 +7,14 @@ // //===----------------------------------------------------------------------===// +#include "llvm/AsmParser/Parser.h" #include "llvm/IR/Constants.h" #include "llvm/IR/DerivedTypes.h" #include "llvm/IR/InstrTypes.h" #include "llvm/IR/Instruction.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" +#include "llvm/Support/SourceMgr.h" #include "gtest/gtest.h" namespace llvm { @@ -347,5 +349,19 @@ TEST(ConstantsTest, GEPReplaceWithConstant) { ASSERT_EQ(GEP->getOperand(0), Alias); } +TEST(ConstantsTest, AliasCAPI) { + LLVMContext Context; + SMDiagnostic Error; + std::unique_ptr M = + parseAssemblyString("@g = global i32 42", Error, Context); + GlobalVariable *G = M->getGlobalVariable("g"); + Type *I16Ty = Type::getInt16Ty(Context); + Type *I16PTy = PointerType::get(I16Ty, 0); + Constant *Aliasee = ConstantExpr::getBitCast(G, I16PTy); + LLVMValueRef AliasRef = + LLVMAddAlias(wrap(M.get()), wrap(I16PTy), wrap(Aliasee), "a"); + ASSERT_EQ(unwrap(AliasRef)->getAliasee(), Aliasee); +} + } // end anonymous namespace } // end namespace llvm