This revision was automatically updated to reflect the committed changes. Closed by commit rL314462: [Sema] Correct nothrow inherited by noexcept (authored by erichkeane).
Changed prior to commit: https://reviews.llvm.org/D38209?vs=116840&id=117053#toc Repository: rL LLVM https://reviews.llvm.org/D38209 Files: cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/test/SemaCXX/nothrow-as-noexcept-ctor.cpp 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<NoThrowAttr>()) + 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; +};
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<NoThrowAttr>()) + 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; +};
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits