diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-19 15:03:47 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-19 15:03:47 +0000 |
commit | 9a2f5d70dfb0eb739076d5bad1a779de9b201930 (patch) | |
tree | 42f34cf36eef05ecca77beb2c076b321028dd62f | |
parent | d8e6d6da90fd5a715c9e5cb676abbb8c3878c85a (diff) |
Don't try to set attributes in alias, they have none.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177402 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CodeGenModule.cpp | 4 | ||||
-rw-r--r-- | test/CodeGenCXX/constructor-alias.cpp | 12 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 402b309f8e..173774452e 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -656,7 +656,9 @@ void CodeGenModule::SetCommonAttributes(const Decl *D, if (const SectionAttr *SA = D->getAttr<SectionAttr>()) GV->setSection(SA->getName()); - getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this); + // Alias cannot have attributes. Filter them here. + if (!isa<llvm::GlobalAlias>(GV)) + getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this); } void CodeGenModule::SetInternalFunctionAttributes(const Decl *D, diff --git a/test/CodeGenCXX/constructor-alias.cpp b/test/CodeGenCXX/constructor-alias.cpp new file mode 100644 index 0000000000..18a4777501 --- /dev/null +++ b/test/CodeGenCXX/constructor-alias.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -emit-llvm -triple mipsel--linux-gnu -mconstructor-aliases -o - %s | FileCheck %s + +// The target attribute code used to get confused with aliases. Make sure +// we don't crash when an alias is used. + +struct B { + B(); +}; +B::B() { +} + +// CHECK: @_ZN1BC1Ev = alias void (%struct.B*)* @_ZN1BC2Ev |