| // RUN: rm -rf %t |
| // RUN: mkdir -p %t |
| // RUN: split-file %s %t |
| // RUN: cd %t |
| // |
| // RUN: %clang_cc1 -std=c++20 M.cpp -fsyntax-only -DTEST_INTERFACE -verify |
| // RUN: %clang_cc1 -std=c++20 M.cpp -emit-module-interface -o M.pcm |
| // RUN: %clang_cc1 -std=c++20 M.cpp -emit-reduced-module-interface -o M.reduced.pcm |
| // RUN: %clang_cc1 -std=c++20 useM.cpp -fsyntax-only -fmodule-file=M=M.pcm -verify |
| // RUN: %clang_cc1 -std=c++20 useM.cpp -fsyntax-only -fmodule-file=M=M.reduced.pcm -verify |
| |
| //--- decls.h |
| int f(); // #1, attached to the global module |
| int g(); // #2, attached to the global module |
| |
| //--- M.cpp |
| module; |
| #include "decls.h" |
| export module M; |
| export using ::f; // OK, does not declare an entity, exports #1 |
| #if TEST_INTERFACE |
| // error: matches #2, but attached to M |
| int g(); // expected-error {{declaration of 'g' in module M follows declaration in the global module}} |
| // expected-note@decls.h:2 {{previous declaration is here}} |
| #endif |
| export int h(); // #3 |
| export int k(); // #4 |
| |
| //--- useM.cpp |
| import M; |
| // error: matches #3 |
| static int h(); // expected-error {{static declaration of 'h' follows non-static declaration}} |
| // expected-note@M.cpp:10 {{previous declaration is here}} |
| |
| // error: matches #4 |
| int k(); // expected-error {{declaration of 'k' in the global module follows declaration in module M}} |
| // expected-note@M.cpp:11 {{previous declaration is here}} |