diff --git a/clang/Sema/SemaStmt.cpp b/clang/Sema/SemaStmt.cpp index f4c541477787..5b4be815c0e4 100644 --- a/clang/Sema/SemaStmt.cpp +++ b/clang/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(first); + Expr *Second = static_cast(second); + Expr *Third = static_cast(third); + Stmt *Body = static_cast(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); }