Author: rsmith
Date: Fri Nov 11 02:28:03 2011
New Revision: 144382

URL: http://llvm.org/viewvc/llvm-project?rev=144382&view=rev
Log:
Constant expression evalation: const_cast support.

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=144382&r1=144381&r2=144382&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ExprConstant.cpp (original)
+++ cfe/trunk/lib/AST/ExprConstant.cpp Fri Nov 11 02:28:03 2011
@@ -830,11 +830,8 @@
                              const SubobjectDesignator &Sub, QualType SubType) 
{
   if (Sub.Invalid || Sub.OnePastTheEnd)
     return false;
-  if (Sub.Entries.empty()) {
-    assert(Info.Ctx.hasSameUnqualifiedType(ObjType, SubType) &&
-           "Unexpected subobject type");
+  if (Sub.Entries.empty())
     return true;
-  }
 
   assert(!Obj.isLValue() && "extracting subobject of lvalue");
   const APValue *O = &Obj;
@@ -877,8 +874,6 @@
       return false;
   }
 
-  assert(Info.Ctx.hasSameUnqualifiedType(ObjType, SubType) &&
-         "Unexpected subobject type");
   Obj = CCValue(*O, CCValue::GlobalValue());
   return true;
 }

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=144382&r1=144381&r2=144382&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp (original)
+++ cfe/trunk/test/SemaCXX/constant-expression-cxx11.cpp Fri Nov 11 02:28:03 
2011
@@ -77,6 +77,19 @@
 
 }
 
+namespace ConstCast {
+
+constexpr int n1 = 0;
+constexpr int n2 = const_cast<int&>(n1);
+constexpr int *n3 = const_cast<int*>(&n1);
+constexpr int n4 = *const_cast<int*>(&n1);
+constexpr const int * const *n5 = const_cast<const int* const*>(&n3);
+constexpr int **n6 = const_cast<int**>(&n3);
+constexpr int n7 = **n5;
+constexpr int n8 = **n6;
+
+}
+
 namespace TemplateArgumentConversion {
   template<int n> struct IntParam {};
 


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to