diff options
| author | John McCall <rjmccall@apple.com> | 2010-10-08 02:01:28 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-10-08 02:01:28 +0000 |
| commit | acf0ee57b64490ae82f46b055fb6cbe428e376f8 (patch) | |
| tree | 83d7aefb3c81fc04c29dfa9a184f5597c82cdbf1 /clang/lib/Sema/SemaStmt.cpp | |
| parent | 6b1b95376f11dc31fc1e8a2e2936f24cf50fc696 (diff) | |
| download | bcm5719-llvm-acf0ee57b64490ae82f46b055fb6cbe428e376f8.tar.gz bcm5719-llvm-acf0ee57b64490ae82f46b055fb6cbe428e376f8.zip | |
Track the location of the context requiring an implicit conversion and use it
to white-list conversions required by system headers. rdar://problem/8232669
llvm-svn: 116029
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); } |

