Files
clang-p2996/clang/test/Modules/preprocess-build.cpp
Richard Smith 5d2ed48987 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.

llvm-svn: 305101
2017-06-09 19:22:32 +00:00

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'}}