xref: /llvm-project/clang/test/Modules/preprocess-build.cpp (revision 1f2bd35b247b895619c41f5119dd424f9b1ca658)
1*1f2bd35bSRichard Smith // RUN: %clang_cc1 -std=c++1z -fmodules %s -verify
25d2ed489SRichard Smith 
35d2ed489SRichard Smith #pragma clang module build baz
45d2ed489SRichard Smith   module baz {}
55d2ed489SRichard Smith #pragma clang module endbuild // baz
65d2ed489SRichard Smith 
75d2ed489SRichard Smith #pragma clang module build foo
85d2ed489SRichard Smith   module foo { module bar {} }
95d2ed489SRichard Smith #pragma clang module contents
105d2ed489SRichard Smith   #pragma clang module begin foo.bar
115d2ed489SRichard Smith 
125d2ed489SRichard Smith     // Can import baz here even though it was created in an outer build.
135d2ed489SRichard Smith     #pragma clang module import baz
145d2ed489SRichard Smith 
155d2ed489SRichard Smith     #pragma clang module build bar
165d2ed489SRichard Smith       module bar {}
175d2ed489SRichard Smith     #pragma clang module contents
185d2ed489SRichard Smith       #pragma clang module begin bar
195d2ed489SRichard Smith         extern int n;
205d2ed489SRichard Smith       #pragma clang module end
215d2ed489SRichard Smith     #pragma clang module endbuild // bar
225d2ed489SRichard Smith 
235d2ed489SRichard Smith     #pragma clang module import bar
245d2ed489SRichard Smith 
f()255d2ed489SRichard Smith     constexpr int *f() { return &n; }
265d2ed489SRichard Smith 
275d2ed489SRichard Smith   #pragma clang module end
285d2ed489SRichard Smith #pragma clang module endbuild // foo
295d2ed489SRichard Smith 
305d2ed489SRichard Smith #pragma clang module import bar
315d2ed489SRichard Smith #pragma clang module import foo.bar
325d2ed489SRichard Smith static_assert(f() == &n);
335d2ed489SRichard Smith 
345d2ed489SRichard Smith #pragma clang module build // expected-error {{expected module name}}
355d2ed489SRichard Smith #pragma clang module build unterminated // expected-error {{no matching '#pragma clang module endbuild'}}
36