diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-09 19:22:32 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-06-09 19:22:32 +0000 |
commit | ae2de79ce245a2bac0c19e905a78ba7fa923820c (patch) | |
tree | c4843a9f27eba7cb915b356ae60f67eb8f4d8aff /test/Modules | |
parent | ce2bd42c852d229fa07ff64b85d0715cc7a24d33 (diff) |
Add #pragma clang module build/endbuild pragmas for performing a module build
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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@305101 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Modules')
-rw-r--r-- | test/Modules/preprocess-build.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/test/Modules/preprocess-build.cpp b/test/Modules/preprocess-build.cpp new file mode 100644 index 0000000000..bf9f16162b --- /dev/null +++ b/test/Modules/preprocess-build.cpp @@ -0,0 +1,35 @@ +// 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'}} |