[PATCH] D38209: [Sema] Correct nothrow inherited by noexcept

Erich Keane via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 25 05:04:19 PDT 2017


erichkeane created this revision.

As reported in https://bugs.llvm.org/show_bug.cgi?id=33235,
a noexcept function was unable to inherit from a nothrow defaulted
constructor.  Attribute "nothrow" is supposed to be semantically
identical to noexcept, and in fact, a number of other places in the
code treat them identically.

This patch simply checks the RecordDecl for the correct attribute in
the case where no other exception specifier was set.


https://reviews.llvm.org/D38209

Files:
  lib/Sema/SemaDeclCXX.cpp
  test/SemaCXX/nothrow-as-noexcept-ctor.cpp


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;
+};
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<NoThrowAttr>()) {
+    EST = EST_BasicNoexcept;
+  }
+
   switch(EST) {
   // If this function can throw any exceptions, make a note of that.
   case EST_MSAny:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D38209.116443.patch
Type: text/x-patch
Size: 1135 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170925/ecf59c81/attachment.bin>


More information about the cfe-commits mailing list