1 // RUN: %clang_cc1 -x c++ -std=c++17 -fmodules -fmodules-local-submodule-visibility -fmodules-cache-path=%t %s -verify
2 
3 // expected-no-diagnostics
4 
5 #pragma clang module build PR38627
6 module PR38627 {}
7 #pragma clang module contents
8 #pragma clang module begin PR38627
9 namespace PR38627 {
10 struct X {
11   virtual ~X() {}
12   struct C {
13     friend X::~X();
14   } c;
15 };
16 }
17 #pragma clang module end
18 #pragma clang module endbuild
19 
20 #pragma clang module import PR38627
21 
22 namespace PR38627 {
23 struct Y {
24   virtual ~Y() {}
25   struct C {
26     friend Y::~Y();
27   } c;
28 };
29 static_assert(noexcept(X().~X()));
30 static_assert(noexcept(Y().~Y()));
31 
32 struct A { virtual ~A() = default; };
33 struct B : public A, public X {
34   virtual ~B() override = default;
35 };
36 } // PR38627
37