From 5f4b38844262197a39e4f96bba8dca2f97283892 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 19 Oct 2016 00:14:23 +0000 Subject: [PATCH] Resolve exception specifications when selecting an overloaded operator. llvm-svn: 284556 --- clang/lib/Sema/SemaOverload.cpp | 2 ++ clang/test/SemaCXX/constant-expression-cxx1z.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 6ed68a9..0c7ef74 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -60,6 +60,8 @@ CreateFunctionRefExpr(Sema &S, FunctionDecl *Fn, NamedDecl *FoundDecl, // being used. if (FoundDecl != Fn && S.DiagnoseUseOfDecl(Fn, Loc)) return ExprError(); + if (auto *FPT = Fn->getType()->getAs()) + S.ResolveExceptionSpec(Loc, FPT); DeclRefExpr *DRE = new (S.Context) DeclRefExpr(Fn, false, Fn->getType(), VK_LValue, Loc, LocInfo); if (HadMultipleCandidates) diff --git a/clang/test/SemaCXX/constant-expression-cxx1z.cpp b/clang/test/SemaCXX/constant-expression-cxx1z.cpp index 9aab999..a045234 100644 --- a/clang/test/SemaCXX/constant-expression-cxx1z.cpp +++ b/clang/test/SemaCXX/constant-expression-cxx1z.cpp @@ -33,7 +33,9 @@ namespace NoexceptFunctionTypes { template struct A { constexpr bool f() noexcept(true) { return true; } constexpr bool g() { return f(); } + constexpr bool operator()() const noexcept(true) { return true; } }; static_assert(A().f()); static_assert(A().g()); + static_assert(A()()); } -- 2.7.4