Index: lib/Sema/SemaDeclCXX.cpp =================================================================== --- lib/Sema/SemaDeclCXX.cpp +++ lib/Sema/SemaDeclCXX.cpp @@ -167,6 +167,10 @@ if (ComputedEST == EST_None) return; + if (EST == EST_None && Method->hasAttr()) { + EST = EST_BasicNoexcept; + } + switch(EST) { // If this function can throw any exceptions, make a note of that. case EST_MSAny: Index: test/SemaCXX/nothrow-as-noexcept-ctor.cpp =================================================================== --- /dev/null +++ test/SemaCXX/nothrow-as-noexcept-ctor.cpp @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 %s -fcxx-exceptions -fsyntax-only -Wexceptions -verify -std=c++14 + + +// expected-no-diagnostics +struct Base { + __attribute__((nothrow)) Base() {} +}; + +struct Derived : Base { + Derived() noexcept = default; +}; + +struct Base2 { + Base2() noexcept {} +}; + +struct Derived2 : Base2 { + __attribute__((nothrow)) Derived2() = default; +}; + +struct Base3 { + __attribute__((nothrow)) Base3() {} +}; + +struct Derived3 : Base3 { + __attribute__((nothrow)) Derived3() = default; +};