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