diff options
Diffstat (limited to 'Sema/SemaStmt.cpp')
-rw-r--r-- | Sema/SemaStmt.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/Sema/SemaStmt.cpp b/Sema/SemaStmt.cpp index f4c5414777..5b4be815c0 100644 --- a/Sema/SemaStmt.cpp +++ b/Sema/SemaStmt.cpp @@ -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); } |