summaryrefslogtreecommitdiff
path: root/test/Modules/exception-spec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Modules/exception-spec.cpp')
-rw-r--r--test/Modules/exception-spec.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/Modules/exception-spec.cpp b/test/Modules/exception-spec.cpp
new file mode 100644
index 0000000000000..083cd950f7c52
--- /dev/null
+++ b/test/Modules/exception-spec.cpp
@@ -0,0 +1,36 @@
+// RUN: %clang_cc1 -x c++ -std=c++17 -fmodules -fmodules-local-submodule-visibility -fmodules-cache-path=%t %s -verify
+
+// expected-no-diagnostics
+
+#pragma clang module build PR38627
+module PR38627 {}
+#pragma clang module contents
+#pragma clang module begin PR38627
+namespace PR38627 {
+struct X {
+ virtual ~X() {}
+ struct C {
+ friend X::~X();
+ } c;
+};
+}
+#pragma clang module end
+#pragma clang module endbuild
+
+#pragma clang module import PR38627
+
+namespace PR38627 {
+struct Y {
+ virtual ~Y() {}
+ struct C {
+ friend Y::~Y();
+ } c;
+};
+static_assert(noexcept(X().~X()));
+static_assert(noexcept(Y().~Y()));
+
+struct A { virtual ~A() = default; };
+struct B : public A, public X {
+ virtual ~B() override = default;
+};
+} // PR38627