]> granicus.if.org Git - clang/commitdiff
If the condition of a for statement is promoted, make sure the
authorChris Lattner <sabre@nondot.org>
Tue, 28 Aug 2007 04:55:47 +0000 (04:55 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 28 Aug 2007 04:55:47 +0000 (04:55 +0000)
implicit cast gets linked back into the AST.

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

Sema/SemaStmt.cpp

index f4c54147778761b9d1f19eb1dc67b1cc0192ee47..5b4be815c0e4d6c3a1fa9ed6e1e5edbbbee244fa 100644 (file)
@@ -446,23 +446,27 @@ Sema::ParseDoStmt(SourceLocation DoLoc, StmtTy *Body,
 
 Action::StmtResult 
 Sema::ParseForStmt(SourceLocation ForLoc, SourceLocation LParenLoc, 
-                   StmtTy *First, ExprTy *Second, ExprTy *Third,
-                   SourceLocation RParenLoc, StmtTy *Body) {
+                   StmtTy *first, ExprTy *second, ExprTy *third,
+                   SourceLocation RParenLoc, StmtTy *body) {
+  Stmt *First  = static_cast<Stmt*>(first);
+  Expr *Second = static_cast<Expr*>(second);
+  Expr *Third  = static_cast<Expr*>(third);
+  Stmt *Body  = static_cast<Stmt*>(body);
+  
   if (First) {
     // C99 6.8.5p3: FIXME. Need to hack Parser::ParseForStatement() and
     // declaration support to create a DeclStmt node. Once this is done, 
     // we can test for DeclStmt vs. Expr (already a sub-class of Stmt).
   }
   if (Second) {
-    Expr *testExpr = (Expr *)Second;
-    DefaultFunctionArrayConversion(testExpr);
-    QualType testType = testExpr->getType();
+    DefaultFunctionArrayConversion(Second);
+    QualType SecondType = Second->getType();
     
-    if (!testType->isScalarType()) // C99 6.8.5p2
+    if (!SecondType->isScalarType()) // C99 6.8.5p2
       return Diag(ForLoc, diag::err_typecheck_statement_requires_scalar,
-               testType.getAsString(), testExpr->getSourceRange());
+               SecondType.getAsString(), Second->getSourceRange());
   }
-  return new ForStmt((Stmt*)First, (Expr*)Second, (Expr*)Third, (Stmt*)Body);
+  return new ForStmt(First, Second, Third, Body);
 }