Index: cfe/trunk/lib/Sema/SemaDeclCXX.cpp =================================================================== --- cfe/trunk/lib/Sema/SemaDeclCXX.cpp +++ cfe/trunk/lib/Sema/SemaDeclCXX.cpp @@ -167,6 +167,9 @@ 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: cfe/trunk/test/SemaCXX/nothrow-as-noexcept-ctor.cpp =================================================================== --- cfe/trunk/test/SemaCXX/nothrow-as-noexcept-ctor.cpp +++ cfe/trunk/test/SemaCXX/nothrow-as-noexcept-ctor.cpp @@ -0,0 +1,26 @@ +// 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; +};