From: Richard Smith Date: Mon, 14 Jan 2013 08:00:39 +0000 (+0000) Subject: Fix regression in r172376. Don't try to detect missing 'constexpr' specifiers X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=714fcc1bcb42508983f9fd3435aa1dcd06212a8c;p=clang Fix regression in r172376. Don't try to detect missing 'constexpr' specifiers on redeclarations, since that makes us pick wrong prior declarations under some circumstances. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172384 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index cc9f4df447..d3d027b8a5 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1038,8 +1038,7 @@ bool Sema::IsOverload(FunctionDecl *New, FunctionDecl *Old, // or non-static member function). Add it now, on the assumption that this // is a redeclaration of OldMethod. unsigned NewQuals = NewMethod->getTypeQualifiers(); - if ((OldMethod->isConstexpr() || NewMethod->isConstexpr()) && - !isa(NewMethod)) + if (NewMethod->isConstexpr() && !isa(NewMethod)) NewQuals |= Qualifiers::Const; if (OldMethod->getTypeQualifiers() != NewQuals) return true; diff --git a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p8.cpp b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p8.cpp index 559838b056..344f8ce8c4 100644 --- a/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p8.cpp +++ b/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p8.cpp @@ -5,6 +5,8 @@ using size_t = decltype(sizeof(int)); struct S { constexpr int f(); constexpr int g() const; + constexpr int h(); + int h(); static constexpr int Sf(); /*static*/ constexpr void *operator new(size_t) noexcept; template constexpr T tm(); @@ -25,6 +27,8 @@ void f(const S &s) { constexpr int S::f() const { return 0; } constexpr int S::g() { return 1; } +constexpr int S::h() { return 0; } +int S::h() { return 0; } constexpr int S::Sf() { return 2; } constexpr void *S::operator new(size_t) noexcept { return 0; } template constexpr T S::tm() { return T(); }