]> granicus.if.org Git - clang/commitdiff
Change Evaluate* in the constant evaluator to enforce being given an argument of
authorJohn McCall <rjmccall@apple.com>
Fri, 7 May 2010 05:46:35 +0000 (05:46 +0000)
committerJohn McCall <rjmccall@apple.com>
Fri, 7 May 2010 05:46:35 +0000 (05:46 +0000)
the right type.  It turns out that the code was already doing this.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103238 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ExprConstant.cpp

index f6e0c29d8dcd0fb22e734319b1acd16e6f81b4fc..30ef6f3aec8d79fca20ed7e8a293520ca7c2f1e4 100644 (file)
@@ -395,8 +395,7 @@ public:
 } // end anonymous namespace
 
 static bool EvaluatePointer(const Expr* E, APValue& Result, EvalInfo &Info) {
-  if (!E->getType()->hasPointerRepresentation())
-    return false;
+  assert(E->getType()->hasPointerRepresentation());
   Result = PointerExprEvaluator(Info).Visit(const_cast<Expr*>(E));
   return Result.isLValue();
 }
@@ -872,13 +871,13 @@ private:
 } // end anonymous namespace
 
 static bool EvaluateIntegerOrLValue(const Expr* E, APValue &Result, EvalInfo &Info) {
-  if (!E->getType()->isIntegralType())
-    return false;
-
+  assert(E->getType()->isIntegralType());
   return IntExprEvaluator(Info, Result).Visit(const_cast<Expr*>(E));
 }
 
 static bool EvaluateInteger(const Expr* E, APSInt &Result, EvalInfo &Info) {
+  assert(E->getType()->isIntegralType());
+
   APValue Val;
   if (!EvaluateIntegerOrLValue(E, Val, Info) || !Val.isInt())
     return false;
@@ -1656,6 +1655,7 @@ public:
 } // end anonymous namespace
 
 static bool EvaluateFloat(const Expr* E, APFloat& Result, EvalInfo &Info) {
+  assert(E->getType()->isRealFloatingType());
   return FloatExprEvaluator(Info, Result).Visit(const_cast<Expr*>(E));
 }
 
@@ -1977,6 +1977,7 @@ public:
 } // end anonymous namespace
 
 static bool EvaluateComplex(const Expr *E, APValue &Result, EvalInfo &Info) {
+  assert(E->getType()->isAnyComplexType());
   Result = ComplexExprEvaluator(Info).Visit(const_cast<Expr*>(E));
   assert((!Result.isComplexFloat() ||
           (&Result.getComplexFloatReal().getSemantics() ==