[cfe-commits] r133450 - in /cfe/trunk: lib/CodeGen/CodeGenModule.cpp lib/Sema/SemaDecl.cpp test/CodeGen/attr-weak-import.c

Eli Friedman eli.friedman at gmail.com
Tue Jun 21 15:22:30 PDT 2011


On Mon, Jun 20, 2011 at 10:50 AM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Mon Jun 20 12:50:03 2011
> New Revision: 133450
>
> URL: http://llvm.org/viewvc/llvm-project?rev=133450&view=rev
> Log:
> llvm-gcc treats a tentative definition with a previous
> (or follow up) extern declaration with weak_import as
> an actual definition. make clang follows this behavior.
> // rdar://9538608
> llvm-gcc treats an extern declaration with weak_import
>
> Added:
>    cfe/trunk/test/CodeGen/attr-weak-import.c
> Modified:
>    cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>    cfe/trunk/lib/Sema/SemaDecl.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=133450&r1=133449&r2=133450&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Mon Jun 20 12:50:03 2011
> @@ -1351,7 +1351,8 @@
>            ((!CodeGenOpts.NoCommon && !D->getAttr<NoCommonAttr>()) ||
>              D->getAttr<CommonAttr>()) &&
>            !D->hasExternalStorage() && !D->getInit() &&
> -           !D->getAttr<SectionAttr>() && !D->isThreadSpecified()) {
> +           !D->getAttr<SectionAttr>() && !D->isThreadSpecified() &&
> +           !D->getAttr<WeakImportAttr>()) {
>     // Thread local vars aren't considered common linkage.
>     return llvm::GlobalVariable::CommonLinkage;
>   }
>
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=133450&r1=133449&r2=133450&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Jun 20 12:50:03 2011
> @@ -2039,6 +2039,12 @@
>   }
>
>   mergeDeclAttributes(New, Old, Context);
> +  // weak_import on current declaration is applied to previous
> +  // tentative definiton.
> +  if (New->getAttr<WeakImportAttr>() &&
> +      Old->getStorageClass() == SC_None &&
> +      !Old->getAttr<WeakImportAttr>())
> +    Old->addAttr(::new (Context) WeakImportAttr(SourceLocation(), Context));

Applying attributes backwards is generally not how we do things... we
can't in general apply attributes backwards (even if it might happen
to work here to some extent).  Is this really necessary?

-Eli




More information about the cfe-commits mailing list