xref: /llvm-project/clang/test/Modules/exception-spec.cpp (revision 49532137d087d8053789d18540c5e7916b91ef30)
1*49532137SNico Weber // RUN: rm -rf %t
25159bbadSRichard Smith // RUN: %clang_cc1 -x c++ -std=c++17 -fmodules -fmodules-local-submodule-visibility -fmodules-cache-path=%t %s -verify
35159bbadSRichard Smith 
45159bbadSRichard Smith // expected-no-diagnostics
55159bbadSRichard Smith 
65159bbadSRichard Smith #pragma clang module build PR38627
75159bbadSRichard Smith module PR38627 {}
85159bbadSRichard Smith #pragma clang module contents
95159bbadSRichard Smith #pragma clang module begin PR38627
105159bbadSRichard Smith namespace PR38627 {
115159bbadSRichard Smith struct X {
125159bbadSRichard Smith   virtual ~X() {}
135159bbadSRichard Smith   struct C {
145159bbadSRichard Smith     friend X::~X();
155159bbadSRichard Smith   } c;
165159bbadSRichard Smith };
175159bbadSRichard Smith }
185159bbadSRichard Smith #pragma clang module end
195159bbadSRichard Smith #pragma clang module endbuild
205159bbadSRichard Smith 
215159bbadSRichard Smith #pragma clang module import PR38627
225159bbadSRichard Smith 
235159bbadSRichard Smith namespace PR38627 {
245159bbadSRichard Smith struct Y {
255159bbadSRichard Smith   virtual ~Y() {}
265159bbadSRichard Smith   struct C {
275159bbadSRichard Smith     friend Y::~Y();
285159bbadSRichard Smith   } c;
295159bbadSRichard Smith };
305159bbadSRichard Smith static_assert(noexcept(X().~X()));
315159bbadSRichard Smith static_assert(noexcept(Y().~Y()));
325159bbadSRichard Smith 
335159bbadSRichard Smith struct A { virtual ~A() = default; };
345159bbadSRichard Smith struct B : public A, public X {
355159bbadSRichard Smith   virtual ~B() override = default;
365159bbadSRichard Smith };
375159bbadSRichard Smith } // PR38627
38