diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 3 | ||||
| -rw-r--r-- | clang/test/SemaCXX/nothrow-as-noexcept-ctor.cpp | 26 |
2 files changed, 29 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 492694d07ef..82e112bb3f9 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -167,6 +167,9 @@ Sema::ImplicitExceptionSpecification::CalledDecl(SourceLocation CallLoc, 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: diff --git a/clang/test/SemaCXX/nothrow-as-noexcept-ctor.cpp b/clang/test/SemaCXX/nothrow-as-noexcept-ctor.cpp new file mode 100644 index 00000000000..7cca414d7a6 --- /dev/null +++ b/clang/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; +}; |

