From 513499d0ad4ff3aad80d7dda9819a0c51cfe6496 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 19 Mar 2013 15:03:47 +0000 Subject: [PATCH] Don't try to set attributes in alias, they have none. llvm-svn: 177402 --- clang/lib/CodeGen/CodeGenModule.cpp | 4 +++- clang/test/CodeGenCXX/constructor-alias.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 clang/test/CodeGenCXX/constructor-alias.cpp diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index 402b309..1737744 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -656,7 +656,9 @@ void CodeGenModule::SetCommonAttributes(const Decl *D, if (const SectionAttr *SA = D->getAttr()) GV->setSection(SA->getName()); - getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this); + // Alias cannot have attributes. Filter them here. + if (!isa(GV)) + getTargetCodeGenInfo().SetTargetAttributes(D, GV, *this); } void CodeGenModule::SetInternalFunctionAttributes(const Decl *D, diff --git a/clang/test/CodeGenCXX/constructor-alias.cpp b/clang/test/CodeGenCXX/constructor-alias.cpp new file mode 100644 index 0000000..18a4777 --- /dev/null +++ b/clang/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 -- 2.7.4