[llvm-branch-commits] [cfe-branch] r236502 - Merging r235931:
Tom Stellard
thomas.stellard at amd.com
Tue May 5 09:00:41 PDT 2015
Author: tstellar
Date: Tue May 5 11:00:41 2015
New Revision: 236502
URL: http://llvm.org/viewvc/llvm-project?rev=236502&view=rev
Log:
Merging r235931:
------------------------------------------------------------------------
r235931 | aaron | 2015-04-27 18:31:12 -0400 (Mon, 27 Apr 2015) | 2 lines
Check whether the operand to a noexcept expression is valid or not. Fixes PR15842.
------------------------------------------------------------------------
Added:
cfe/branches/release_36/test/SemaCXX/cxx0x-noexcept-expression.cpp
Modified:
cfe/branches/release_36/lib/Sema/SemaExprCXX.cpp
Modified: cfe/branches/release_36/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_36/lib/Sema/SemaExprCXX.cpp?rev=236502&r1=236501&r2=236502&view=diff
==============================================================================
--- cfe/branches/release_36/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/branches/release_36/lib/Sema/SemaExprCXX.cpp Tue May 5 11:00:41 2015
@@ -5705,6 +5705,16 @@ ExprResult Sema::BuildCXXMemberCallExpr(
ExprResult Sema::BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
SourceLocation RParen) {
+ // If the operand is an unresolved lookup expression, the expression is ill-
+ // formed per [over.over]p1, because overloaded function names cannot be used
+ // without arguments except in explicit contexts.
+ ExprResult R = CheckPlaceholderExpr(Operand);
+ if (R.isInvalid())
+ return R;
+
+ // The operand may have been modified when checking the placeholder type.
+ Operand = R.get();
+
if (ActiveTemplateInstantiations.empty() &&
Operand->HasSideEffects(Context, false)) {
// The expression operand for noexcept is in an unevaluated expression
Added: cfe/branches/release_36/test/SemaCXX/cxx0x-noexcept-expression.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_36/test/SemaCXX/cxx0x-noexcept-expression.cpp?rev=236502&view=auto
==============================================================================
--- cfe/branches/release_36/test/SemaCXX/cxx0x-noexcept-expression.cpp (added)
+++ cfe/branches/release_36/test/SemaCXX/cxx0x-noexcept-expression.cpp Tue May 5 11:00:41 2015
@@ -0,0 +1,19 @@
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
+
+void f(); // expected-note {{possible target for call}}
+void f(int); // expected-note {{possible target for call}}
+
+void g() {
+ bool b = noexcept(f); // expected-error {{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}}
+ bool b2 = noexcept(f(0));
+}
+
+struct S {
+ void g(); // expected-note {{possible target for call}}
+ void g(int); // expected-note {{possible target for call}}
+
+ void h() {
+ bool b = noexcept(this->g); // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}}
+ bool b2 = noexcept(this->g(0));
+ }
+};
More information about the llvm-branch-commits
mailing list