[cfe-commits] r143491 - in /cfe/trunk: lib/AST/ExprConstant.cpp test/SemaCXX/constant-expression-cxx11.cpp

Richard Smith richard-llvm at metafoo.co.uk
Tue Nov 1 13:38:59 PDT 2011


Author: rsmith
Date: Tue Nov  1 15:38:59 2011
New Revision: 143491

URL: http://llvm.org/viewvc/llvm-project?rev=143491&view=rev
Log:
Temporarily disable lvalue-to-rvalue conversions on const pointers while an
apparent miscompile triggered by this is investigated. This is essentially a
revert of r143298.

Modified:
    cfe/trunk/lib/AST/ExprConstant.cpp
    cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp

Modified: cfe/trunk/lib/AST/ExprConstant.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprConstant.cpp?rev=143491&r1=143490&r2=143491&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Tue Nov  1 15:38:59 2011
@@ -461,7 +461,8 @@
     // them are not permitted.
     const VarDecl *VD = dyn_cast<VarDecl>(D);
     if (!VD || !(IsConstNonVolatile(VD->getType()) || isa<ParmVarDecl>(VD)) ||
-        !Type->isLiteralType() || !EvaluateVarDeclInit(Info, VD, Frame, RVal))
+        !(Type->isIntegralOrEnumerationType() || Type->isRealFloatingType()) ||
+        !EvaluateVarDeclInit(Info, VD, Frame, RVal))
       return false;
 
     if (isa<ParmVarDecl>(VD) || !VD->getAnyInitializer()->isLValue())

Modified: cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp?rev=143491&r1=143490&r2=143491&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp (original)
+++ cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp Tue Nov  1 15:38:59 2011
@@ -128,6 +128,7 @@
 
 }
 
+#if 0
 namespace Pointers {
 
   constexpr int f(int n, const int *a, const int *b, const int *c) {
@@ -162,9 +163,10 @@
   using check_value = int[1 + Apply(Select(4), 5) + Apply(Select(3), 7)];
   using check_value = int[42];
 
-  constexpr int Invalid = Apply(Select(0), 0); // expected-error {{must be initialized by a constant expression}}
+  constexpr int Invalid = Apply(Select(0), 0); // xpected-error {{must be initialized by a constant expression}}
 
 }
+#endif
 
 namespace PointerComparison {
 
@@ -205,8 +207,10 @@
 constexpr bool s5 = &x < &x;
 constexpr bool s6 = &x > &x;
 
+#if 0
 constexpr S* sptr = &s;
 constexpr bool dyncast = sptr == dynamic_cast<S*>(sptr);
+#endif
 
 extern char externalvar[];
 constexpr bool constaddress = (void *)externalvar == (void *)0x4000UL;  // expected-error {{must be initialized by a constant expression}}





More information about the cfe-commits mailing list