]> granicus.if.org Git - clang/commitdiff
Extend lvalue evaluation in ExprConstant.cpp to handle CK_LValueBitCast (which is...
authorEli Friedman <eli.friedman@gmail.com>
Tue, 11 Oct 2011 00:13:24 +0000 (00:13 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 11 Oct 2011 00:13:24 +0000 (00:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141604 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ExprConstant.cpp
test/SemaCXX/i-c-e-cxx.cpp

index 3da744955a622a03e46874cf21e7ee7dbcbb2b60..c0f913d7ed667eb7da33bfa6ecc6be219cd737eb 100644 (file)
@@ -481,7 +481,10 @@ public:
       return false;
 
     case CK_NoOp:
+    case CK_LValueBitCast:
       return Visit(E->getSubExpr());
+
+    // FIXME: Support CK_DerivedToBase and friends.
     }
   }
 
index 4ebdada49225c2cf0c9933ef3b497135e07f6c2f..4d02ca8f174e9ef7a518e655f64e56eb839b19cf 100644 (file)
@@ -57,3 +57,7 @@ int foo() { return A::B; }
 // PR11040
 const int x = 10;
 int* y = reinterpret_cast<const char&>(x); // expected-error {{cannot initialize}}
+
+// This isn't an integral constant expression, but make sure it folds anyway.
+struct PR8836 { char _; long long a; };
+int PR8836test[(__typeof(sizeof(int)))&reinterpret_cast<const volatile char&>((((PR8836*)0)->a))];