From: Douglas Gregor Date: Fri, 17 Jun 2011 00:15:10 +0000 (+0000) Subject: Check for placeholder expressions before promoting an argument passed X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8d5e18c69e007f5d0f447b4a716088589a827857;p=clang Check for placeholder expressions before promoting an argument passed through an ellipsis. Fixes . git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133219 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 2c988d15e3..fe11c7e4fe 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -439,7 +439,11 @@ ExprResult Sema::DefaultArgumentPromotion(Expr *E) { /// interfaces passed by value. ExprResult Sema::DefaultVariadicArgumentPromotion(Expr *E, VariadicCallType CT, FunctionDecl *FDecl) { - ExprResult ExprRes = DefaultArgumentPromotion(E); + ExprResult ExprRes = CheckPlaceholderExpr(E); + if (ExprRes.isInvalid()) + return ExprError(); + + ExprRes = DefaultArgumentPromotion(E); if (ExprRes.isInvalid()) return ExprError(); E = ExprRes.take(); diff --git a/test/SemaCXX/overloaded-name.cpp b/test/SemaCXX/overloaded-name.cpp index 5a87cc8e67..73f12a9027 100644 --- a/test/SemaCXX/overloaded-name.cpp +++ b/test/SemaCXX/overloaded-name.cpp @@ -12,3 +12,19 @@ void test(bool b) { (void)(b? ovl : &ovl); // expected-error{{cannot resolve overloaded function 'ovl' from context}} (void)(b? ovl : ovl); } + +namespace rdar9623945 { + void f(...) { + } + + class X { + public: + const char* text(void); + void g(void) { + f(text()); + f(text); // expected-error{{a bound member function may only be called}} + f(text()); + f(text); // expected-error{{a bound member function may only be called}} + } + }; +}