[cfe-commits] r133157 - in /cfe/trunk: lib/CodeGen/CodeGenModule.cpp test/CodeGen/private-extern-redef.c

Eli Friedman eli.friedman at gmail.com
Thu Jun 16 09:36:01 PDT 2011


On Thu, Jun 16, 2011 at 7:49 AM, Fariborz Jahanian <fjahanian at apple.com> wrote:
> Author: fjahanian
> Date: Thu Jun 16 09:49:42 2011
> New Revision: 133157
>
> URL: http://llvm.org/viewvc/llvm-project?rev=133157&view=rev
> Log:
> Set the visibility to 'hidden' when previous
> declaration of global var is __private_extern__.
> // rdar://9609649
>
> Added:
>    cfe/trunk/test/CodeGen/private-extern-redef.c
> Modified:
>    cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=133157&r1=133156&r2=133157&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Thu Jun 16 09:49:42 2011
> @@ -206,8 +206,17 @@
>
>   // Set visibility for definitions.
>   NamedDecl::LinkageInfo LV = D->getLinkageAndVisibility();
> -  if (LV.visibilityExplicit() || !GV->hasAvailableExternallyLinkage())
> -    GV->setVisibility(GetLLVMVisibility(LV.visibility()));
> +  if (LV.visibilityExplicit() || !GV->hasAvailableExternallyLinkage()) {

If getLinkageAndVisibility is returning the wrong visibility, it
should be fixed in the AST/Sema, not hacked around in CodeGen.

-Eli

> +    Visibility Vis = LV.visibility();
> +    if (Vis == DefaultVisibility)
> +      if (const VarDecl *VD = dyn_cast<VarDecl>(D))
> +        if (const VarDecl *Old = VD->getPreviousDeclaration()) {
> +          Visibility OldVis = Old->getLinkageAndVisibility().visibility();
> +          if (OldVis == HiddenVisibility)
> +            Vis = HiddenVisibility;
> +        }
> +    GV->setVisibility(GetLLVMVisibility(Vis));
> +  }
>  }
>
>  /// Set the symbol visibility of type information (vtable and RTTI)
>
> Added: cfe/trunk/test/CodeGen/private-extern-redef.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/private-extern-redef.c?rev=133157&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/private-extern-redef.c (added)
> +++ cfe/trunk/test/CodeGen/private-extern-redef.c Thu Jun 16 09:49:42 2011
> @@ -0,0 +1,39 @@
> +// RUN: %clang_cc1 -triple x86_64-darwin-apple -emit-llvm -o - %s | FileCheck %s
> +// rdar://9609649
> +
> +__private_extern__ const int I;
> +__private_extern__ const int J = 927;
> +
> +__private_extern__ const int K;
> +const int K = 37;
> +
> +const int L = 10;
> +__private_extern__ const int L;
> +
> +__private_extern__ int M;
> +int M = 20;
> +
> +__private_extern__ int N;
> +int N;
> +
> +__private_extern__ int O;
> +int O=1;
> +
> +__private_extern__ int P;
> +extern int P;
> +
> +void bar(int);
> +
> +void foo() {
> +  bar(I);
> +}
> +
> +// CHECK: @J = hidden constant
> +// CHECK: @K = hidden constant
> +// CHECK: @L = constant
> +// CHECK: @M = hidden global
> +// CHECK: @O = hidden global
> +// CHECK: @I = external hidden
> +// CHECK: @N = common hidden global
> +// CHECK-NOT: @P
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>




More information about the cfe-commits mailing list