diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-04-18 21:12:54 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2019-04-18 21:12:54 +0000 |
commit | a5bbbfef156c818f845a183096bed15747ecb8c3 (patch) | |
tree | ad0bb51be1a7af3b564d650e195fadf2caf35a01 /clang/test/CXX/basic/basic.link/p1.cpp | |
parent | 4664916017ef0619f32371dd7ad225ca0f648d62 (diff) | |
download | bcm5719-llvm-a5bbbfef156c818f845a183096bed15747ecb8c3.tar.gz bcm5719-llvm-a5bbbfef156c818f845a183096bed15747ecb8c3.zip |
[c++2a] Add semantic support for private module fragments.
llvm-svn: 358713
Diffstat (limited to 'clang/test/CXX/basic/basic.link/p1.cpp')
-rw-r--r-- | clang/test/CXX/basic/basic.link/p1.cpp | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/clang/test/CXX/basic/basic.link/p1.cpp b/clang/test/CXX/basic/basic.link/p1.cpp index b94e57017fb..c6a119aa7f4 100644 --- a/clang/test/CXX/basic/basic.link/p1.cpp +++ b/clang/test/CXX/basic/basic.link/p1.cpp @@ -1,24 +1,31 @@ // RUN: %clang_cc1 -std=c++2a -verify %s // RUN: %clang_cc1 -std=c++2a -verify -DNO_GLOBAL_FRAG %s // RUN: %clang_cc1 -std=c++2a -verify -DNO_MODULE_DECL %s +// RUN: %clang_cc1 -std=c++2a -verify -DNO_PRIVATE_FRAG %s +// RUN: %clang_cc1 -std=c++2a -verify -DNO_MODULE_DECL -DNO_PRIVATE_FRAG %s +// RUN: %clang_cc1 -std=c++2a -verify -DNO_GLOBAL_FRAG -DNO_PRIVATE_FRAG %s +// RUN: %clang_cc1 -std=c++2a -verify -DNO_GLOBAL_FRAG -DNO_MODULE_DECL %s +// RUN: %clang_cc1 -std=c++2a -verify -DNO_GLOBAL_FRAG -DNO_MODULE_DECL -DNO_PRIVATE_FRAG %s // RUN: %clang_cc1 -std=c++2a -verify -DEXPORT_FRAGS %s -#ifdef NO_GLOBAL_FRAG -// expected-error@#mod-decl {{module declaration must occur at the start of the translation unit}} -// expected-note@1 {{add 'module;' to the start of the file to introduce a global module fragment}} -#else +#ifndef NO_GLOBAL_FRAG #ifdef EXPORT_FRAGS export // expected-error {{global module fragment cannot be exported}} #endif -module; // #glob-frag +module; +#ifdef NO_MODULE_DECL +// expected-error@-2 {{missing 'module' declaration at end of global module fragment introduced here}} +#endif #endif extern int a; // #a1 -#ifdef NO_MODULE_DECL -// expected-error@#glob-frag {{missing 'module' declaration at end of global module fragment introduced here}} -#else -export module Foo; // #mod-decl +#ifndef NO_MODULE_DECL +export module Foo; +#ifdef NO_GLOBAL_FRAG +// expected-error@-2 {{module declaration must occur at the start of the translation unit}} +// expected-note@1 {{add 'module;' to the start of the file to introduce a global module fragment}} +#endif // expected-error@#a2 {{declaration of 'a' in module Foo follows declaration in the global module}} // expected-note@#a1 {{previous decl}} @@ -29,9 +36,22 @@ extern int b; module; // expected-error {{'module;' introducing a global module fragment can appear only at the start of the translation unit}} +#ifndef NO_PRIVATE_FRAG #ifdef EXPORT_FRAGS export // expected-error {{private module fragment cannot be exported}} #endif -module :private; +module :private; // #priv-frag +#ifdef NO_MODULE_DECL +// expected-error@-2 {{private module fragment declaration with no preceding module declaration}} +#endif +#endif int b; // ok + + +#ifndef NO_PRIVATE_FRAG +#ifndef NO_MODULE_DECL +module :private; // expected-error {{private module fragment redefined}} +// expected-note@#priv-frag {{previous definition is here}} +#endif +#endif |