diff options
Diffstat (limited to 'clang/lib/Sema/SemaStmt.cpp')
-rw-r--r-- | clang/lib/Sema/SemaStmt.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 1e7912cbdca..fd196af198c 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -446,6 +446,7 @@ Sema::ActOnStartOfSwitchStmt(SourceLocation SwitchLoc, Expr *Cond, Cond = CondResult.take(); if (!CondVar) { + CheckImplicitConversions(Cond, SwitchLoc); CondResult = MaybeCreateCXXExprWithTemporaries(Cond); if (CondResult.isInvalid()) return StmtError(); @@ -889,6 +890,7 @@ Sema::ActOnDoStmt(SourceLocation DoLoc, Stmt *Body, if (CheckBooleanCondition(Cond, DoLoc)) return StmtError(); + CheckImplicitConversions(Cond, DoLoc); ExprResult CondResult = MaybeCreateCXXExprWithTemporaries(Cond); if (CondResult.isInvalid()) return StmtError(); @@ -1173,8 +1175,10 @@ Sema::ActOnBlockReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) { return StmtError(); } - if (RetValExp) + if (RetValExp) { + CheckImplicitConversions(RetValExp, ReturnLoc); RetValExp = MaybeCreateCXXExprWithTemporaries(RetValExp); + } RetValExp = Res.takeAs<Expr>(); if (RetValExp) @@ -1227,6 +1231,7 @@ Sema::ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) { << RetValExp->getSourceRange(); } + CheckImplicitConversions(RetValExp, ReturnLoc); RetValExp = MaybeCreateCXXExprWithTemporaries(RetValExp); } @@ -1269,8 +1274,10 @@ Sema::ActOnReturnStmt(SourceLocation ReturnLoc, Expr *RetValExp) { CheckReturnStackAddr(RetValExp, FnRetType, ReturnLoc); } - if (RetValExp) + if (RetValExp) { + CheckImplicitConversions(RetValExp, ReturnLoc); RetValExp = MaybeCreateCXXExprWithTemporaries(RetValExp); + } Result = new (Context) ReturnStmt(ReturnLoc, RetValExp, NRVOCandidate); } |