r209663 - Revert small change to EmitDeclRefLValue

Hal Finkel hfinkel at anl.gov
Tue May 27 10:00:41 PDT 2014


----- Original Message -----
> From: "Renato Golin" <renato.golin at linaro.org>
> To: cfe-commits at cs.uiuc.edu
> Sent: Tuesday, May 27, 2014 11:46:27 AM
> Subject: r209663 - Revert small change to EmitDeclRefLValue
> 
> Author: rengolin
> Date: Tue May 27 11:46:27 2014
> New Revision: 209663
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=209663&view=rev
> Log:
> Revert small change to EmitDeclRefLValue
> 
> That small change, although it looked harmless,

What commit made the small change?

 -Hal

> it made emitting the
> LValue
> on the PHI node without the proper cast. Reverting it fixes PR19841.
> 
> Added:
>     cfe/trunk/test/CodeGen/pr19841.cpp
> Modified:
>     cfe/trunk/lib/CodeGen/CGExpr.cpp
> 
> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=209663&r1=209662&r2=209663&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue May 27 11:46:27 2014
> @@ -1798,16 +1798,15 @@ LValue CodeGenFunction::EmitDeclRefLValu
>    const NamedDecl *ND = E->getDecl();
>    CharUnits Alignment = getContext().getDeclAlign(ND);
>    QualType T = E->getType();
> -  const auto *VD = dyn_cast<VarDecl>(ND);
>  
> -  // Global Named registers access via intrinsics only
> -  if (VD && VD->getStorageClass() == SC_Register &&
> -       VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())
> -    return EmitGlobalNamedRegister(VD, CGM, Alignment);
> +  if (const auto *VD = dyn_cast<VarDecl>(ND)) {
> +    // Global Named registers access via intrinsics only
> +    if (VD->getStorageClass() == SC_Register &&
> +        VD->hasAttr<AsmLabelAttr>() && !VD->isLocalVarDecl())
> +      return EmitGlobalNamedRegister(VD, CGM, Alignment);
>  
> -  // A DeclRefExpr for a reference initialized by a constant
> expression can
> -  // appear without being odr-used. Directly emit the constant
> initializer.
> -  if (VD) {
> +    // A DeclRefExpr for a reference initialized by a constant
> expression can
> +    // appear without being odr-used. Directly emit the constant
> initializer.
>      const Expr *Init = VD->getAnyInitializer(VD);
>      if (Init && !isa<ParmVarDecl>(VD) &&
>      VD->getType()->isReferenceType() &&
>          VD->isUsableInConstantExpressions(getContext()) &&
> @@ -1833,7 +1832,7 @@ LValue CodeGenFunction::EmitDeclRefLValu
>      return MakeAddrLValue(Aliasee, T, Alignment);
>    }
>  
> -  if (VD) {
> +  if (const auto *VD = dyn_cast<VarDecl>(ND)) {
>      // Check if this is a global variable.
>      if (VD->hasLinkage() || VD->isStaticDataMember())
>        return EmitGlobalVarDeclLValue(*this, E, VD);
> 
> Added: cfe/trunk/test/CodeGen/pr19841.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/pr19841.cpp?rev=209663&view=auto
> ==============================================================================
> --- cfe/trunk/test/CodeGen/pr19841.cpp (added)
> +++ cfe/trunk/test/CodeGen/pr19841.cpp Tue May 27 11:46:27 2014
> @@ -0,0 +1,28 @@
> +// RUN: %clang_cc1 -emit-llvm %s -o -  | FileCheck %s
> +
> +namespace Common {
> +enum RenderMode {
> +  kRenderEGA,
> +  kRenderCGA
> +};
> +class C;
> +class A {
> +  A();
> +  C *_vm;
> +  unsigned char _highlightColorTableVGA[];
> +  static const unsigned char b[];
> +};
> +class B {
> +public:
> +  Common::RenderMode _configRenderMode;
> +};
> +class C : public B {};
> +A::A() {
> +  0 == Common::kRenderCGA || _vm->_configRenderMode ==
> Common::kRenderEGA
> +      ? b
> +      : _highlightColorTableVGA;
> +// Make sure the PHI value is casted correctly to the PHI type
> +// CHECK: %cond-lvalue = phi [0 x i8]* [ bitcast ([1 x i8]*
> @_ZN6Common1A1bE to [0 x i8]*), %cond.true ], [
> %_highlightColorTableVGA, %cond.false ]
> +}
> +const unsigned char A::b[] = { 0 };
> +}
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory



More information about the cfe-commits mailing list