]> granicus.if.org Git - clang/commitdiff
Don't try to set attributes in alias, they have none.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 19 Mar 2013 15:03:47 +0000 (15:03 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 19 Mar 2013 15:03:47 +0000 (15:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177402 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenModule.cpp
test/CodeGenCXX/constructor-alias.cpp [new file with mode: 0644]

index 402b309f8eca7e4ab2ac54b74cf25e92ef6a5ca1..173774452e9504ee47419e069f8703fa7c2ae78a 100644 (file)
@@ -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 (file)
index 0000000..18a4777
--- /dev/null
@@ -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