as part of a compilation. This is intended for two purposes: 1) Writing self-contained test cases for modules: we can now write a single source file test that builds some number of module files on the side and imports them. 2) Debugging / test case reduction. A single-source testcase is much more amenable to reduction, compared to a VFS tarball or .pcm files. llvm-svn: 305101
36 lines
1014 B
C++
36 lines
1014 B
C++
// RUN: %clang_cc1 -std=c++1z %s -verify
|
|
|
|
#pragma clang module build baz
|
|
module baz {}
|
|
#pragma clang module endbuild // baz
|
|
|
|
#pragma clang module build foo
|
|
module foo { module bar {} }
|
|
#pragma clang module contents
|
|
#pragma clang module begin foo.bar
|
|
|
|
// Can import baz here even though it was created in an outer build.
|
|
#pragma clang module import baz
|
|
|
|
#pragma clang module build bar
|
|
module bar {}
|
|
#pragma clang module contents
|
|
#pragma clang module begin bar
|
|
extern int n;
|
|
#pragma clang module end
|
|
#pragma clang module endbuild // bar
|
|
|
|
#pragma clang module import bar
|
|
|
|
constexpr int *f() { return &n; }
|
|
|
|
#pragma clang module end
|
|
#pragma clang module endbuild // foo
|
|
|
|
#pragma clang module import bar
|
|
#pragma clang module import foo.bar
|
|
static_assert(f() == &n);
|
|
|
|
#pragma clang module build // expected-error {{expected module name}}
|
|
#pragma clang module build unterminated // expected-error {{no matching '#pragma clang module endbuild'}}
|