From: Daniel Dunbar Date: Fri, 5 Jun 2009 22:58:34 +0000 (+0000) Subject: weak_import should not make definitions have weak linkage. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2968b7741da535810250b919c95d12105882d19f;p=clang weak_import should not make definitions have weak linkage. - clang treats weak_import like weak git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@72967 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 6e8440a177..5c12c81b36 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -298,7 +298,7 @@ void CodeGenModule::SetFunctionDefinitionAttributes(const FunctionDecl *D, GV->setLinkage(llvm::Function::InternalLinkage); } else if (D->hasAttr()) { GV->setLinkage(llvm::Function::DLLExportLinkage); - } else if (D->hasAttr() || D->hasAttr()) { + } else if (D->hasAttr()) { GV->setLinkage(llvm::Function::WeakAnyLinkage); } else if (Linkage == GVA_C99Inline) { // In C99 mode, 'inline' functions are guaranteed to have a strong @@ -853,7 +853,7 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D) { GV->setLinkage(llvm::Function::DLLImportLinkage); else if (D->hasAttr()) GV->setLinkage(llvm::Function::DLLExportLinkage); - else if (D->hasAttr() || D->hasAttr()) + else if (D->hasAttr()) GV->setLinkage(llvm::GlobalVariable::WeakAnyLinkage); else if (!CompileOpts.NoCommon && (!D->hasExternalStorage() && !D->getInit())) diff --git a/test/CodeGen/attributes.c b/test/CodeGen/attributes.c index d45d5124b0..a5de4f4b42 100644 --- a/test/CodeGen/attributes.c +++ b/test/CodeGen/attributes.c @@ -14,7 +14,7 @@ // RUN: grep '@t13 =.*section "SECT"' %t && // RUN: grep '@t14.x =.*section "SECT"' %t // RUN: grep 'declare extern_weak i32 @t15()' %t && -// RUN: grep '@t16 = extern_weak global i32' %t +// RUN: grep '@t16 = extern_weak global i32' %t && void t1() __attribute__((noreturn)); void t1() {} @@ -56,4 +56,14 @@ int t17() { return t15() + t16; } +// RUN: grep '@t18 = global i[0-9]* 1, align .*' %t && +extern int t18 __attribute__((weak_import)); +int t18 = 1; +// RUN: grep 'define i[0-9]* @t19() nounwind {' %t && +extern int t19(void) __attribute__((weak_import)); +int t19(void) { + return 10; +} + +// RUN: true