diff options
| author | John McCall <rjmccall@apple.com> | 2011-08-26 18:41:18 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2011-08-26 18:41:18 +0000 |
| commit | 1cd60a2670f43053b2a70d8b7af63d86600a6415 (patch) | |
| tree | ff52921cbb33ac4f1cc3fd8ace9065374cf0bcea /clang/lib | |
| parent | f29d9aa5f5b6b94eaa43a22d809da6d79bf07107 (diff) | |
| download | bcm5719-llvm-1cd60a2670f43053b2a70d8b7af63d86600a6415.tar.gz bcm5719-llvm-1cd60a2670f43053b2a70d8b7af63d86600a6415.zip | |
In -Wno-error=non-pod-varargs, initialize a temporary with
the crazy comma expression so that we get an r-value in the
varargs position.
llvm-svn: 138638
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 19cd1184ffd..e651f6dc2b7 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -517,9 +517,18 @@ ExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, ExprResult Comma = ActOnBinOp(TUScope, E->getLocStart(), tok::comma, Call.get(), E); if (Comma.isInvalid()) - return ExprError(); - + return ExprError(); E = Comma.get(); + + // Use that to initialize a temporary, or else we might get an + // l-value in a varargs position. + ExprResult Temp = PerformCopyInitialization( + InitializedEntity::InitializeTemporary(E->getType()), + E->getLocStart(), + Owned(E)); + if (Temp.isInvalid()) + return ExprError(); + E = Temp.get(); } } |

