summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaStmt.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-10-08 02:01:28 +0000
committerJohn McCall <rjmccall@apple.com>2010-10-08 02:01:28 +0000
commitacf0ee57b64490ae82f46b055fb6cbe428e376f8 (patch)
tree83d7aefb3c81fc04c29dfa9a184f5597c82cdbf1 /clang/lib/Sema/SemaStmt.cpp
parent6b1b95376f11dc31fc1e8a2e2936f24cf50fc696 (diff)
downloadbcm5719-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.cpp11
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);
}
OpenPOWER on IntegriCloud