diff options
Diffstat (limited to 'test/Modules')
-rw-r--r-- | test/Modules/Inputs/preprocess/a.h | 2 | ||||
-rw-r--r-- | test/Modules/Inputs/preprocess/b.h | 2 | ||||
-rw-r--r-- | test/Modules/Inputs/preprocess/c.h | 4 | ||||
-rw-r--r-- | test/Modules/Inputs/preprocess/module.modulemap | 5 | ||||
-rw-r--r-- | test/Modules/preprocess-nested.cpp | 59 | ||||
-rw-r--r-- | test/Modules/preprocess-unavailable.cpp | 12 |
6 files changed, 84 insertions, 0 deletions
diff --git a/test/Modules/Inputs/preprocess/a.h b/test/Modules/Inputs/preprocess/a.h new file mode 100644 index 000000000000..1292e99b4b25 --- /dev/null +++ b/test/Modules/Inputs/preprocess/a.h @@ -0,0 +1,2 @@ +#include "c.h" +T a(); diff --git a/test/Modules/Inputs/preprocess/b.h b/test/Modules/Inputs/preprocess/b.h new file mode 100644 index 000000000000..e8a9f55968f5 --- /dev/null +++ b/test/Modules/Inputs/preprocess/b.h @@ -0,0 +1,2 @@ +#include "c.h" +T b(); diff --git a/test/Modules/Inputs/preprocess/c.h b/test/Modules/Inputs/preprocess/c.h new file mode 100644 index 000000000000..718f5dc18295 --- /dev/null +++ b/test/Modules/Inputs/preprocess/c.h @@ -0,0 +1,4 @@ +#ifndef C_H +#define C_H +using T = int; +#endif diff --git a/test/Modules/Inputs/preprocess/module.modulemap b/test/Modules/Inputs/preprocess/module.modulemap index 943435a953d0..f700db03beac 100644 --- a/test/Modules/Inputs/preprocess/module.modulemap +++ b/test/Modules/Inputs/preprocess/module.modulemap @@ -1,2 +1,7 @@ module fwd { header "fwd.h" export * } module file { header "file.h" header "file2.h" export * } +module nested { + module a { header "a.h" } + module b { header "b.h" } + module c { header "c.h" } +} diff --git a/test/Modules/preprocess-nested.cpp b/test/Modules/preprocess-nested.cpp new file mode 100644 index 000000000000..8fccf137e94f --- /dev/null +++ b/test/Modules/preprocess-nested.cpp @@ -0,0 +1,59 @@ +// RUN: rm -rf %t +// RUN: mkdir %t + +// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fmodule-name=nested -I%S/Inputs/preprocess -x c++-module-map %S/Inputs/preprocess/module.modulemap -E -o %t/no-rewrite.ii +// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fmodule-name=nested -I%S/Inputs/preprocess -x c++-module-map %S/Inputs/preprocess/module.modulemap -E -frewrite-includes -o %t/rewrite.ii + +// RUN: FileCheck %s --input-file %t/no-rewrite.ii --check-prefix=CHECK --check-prefix=NO-REWRITE +// RUN: FileCheck %s --input-file %t/rewrite.ii --check-prefix=CHECK --check-prefix=REWRITE + +// Check that we can build a module from the preprocessed output. +// FIXME: For now, the files need to exist. +// RUN: touch %t/a.h %t/b.h %t/c.h +// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fmodule-name=nested -x c++-module-map-cpp-output %t/no-rewrite.ii -emit-module -o %t/no-rewrite.pcm +// RUN: %clang_cc1 -fmodules -fmodules-local-submodule-visibility -fmodule-name=nested -x c++-module-map-cpp-output %t/rewrite.ii -emit-module -o %t/rewrite.pcm + +// Check the module we built works. +// RUN: %clang_cc1 -fmodules -fmodule-file=%t/no-rewrite.pcm %s -I%t -verify -fno-modules-error-recovery +// RUN: %clang_cc1 -fmodules -fmodule-file=%t/rewrite.pcm %s -I%t -verify -fno-modules-error-recovery -DREWRITE + +// == module map +// CHECK: # 1 "{{.*}}module.modulemap" +// CHECK: module nested { +// CHECK: module a { +// CHECK: header "a.h" +// CHECK: } +// CHECK: module b { +// CHECK: header "b.h" +// CHECK: } +// CHECK: module c { +// CHECK: header "c.h" +// CHECK: } +// CHECK: } + +// CHECK: #pragma clang module begin nested.a +// CHECK: #pragma clang module begin nested.c +// CHECK: using T = int; +// CHECK: #pragma clang module end +// CHECK: T a(); +// CHECK: #pragma clang module end + +// CHECK: #pragma clang module begin nested.b +// CHECK: #pragma clang module import nested.c +// CHECK-NOT: #pragma clang module begin nested.c +// CHECK-NOT: using T = int; +// CHECK-NOT: #pragma clang module end +// CHECK: T b(); +// CHECK: #pragma clang module end + +// CHECK: #pragma clang module import nested.c + +#pragma clang module import nested.b + +int n = b(); +T c; // expected-error {{must be imported}} +#ifdef REWRITE +// expected-note@rewrite.ii:* {{declar}} +#else +// expected-note@no-rewrite.ii:* {{declar}} +#endif diff --git a/test/Modules/preprocess-unavailable.cpp b/test/Modules/preprocess-unavailable.cpp new file mode 100644 index 000000000000..e568cd7b5251 --- /dev/null +++ b/test/Modules/preprocess-unavailable.cpp @@ -0,0 +1,12 @@ +// RUN: %clang_cc1 -x c++-module-map %s -fmodule-name=a -verify +module a { + module b { + requires cplusplus11 + } +} +#pragma clang module contents +// expected-error@3 {{module 'a.b' requires feature 'cplusplus11'}} +#pragma clang module begin a.b // expected-note {{entering module 'a' due to this pragma}} +int f(); +int g() { f(); } +#pragma clang module end // expected-error {{no matching '#pragma clang module begin'}} |