72 lines · plain
1// RUN: rm -rf %t2// RUN: mkdir %t3// RUN: split-file %s %t4 5// RUN: %clang_cc1 -std=c++20 %t/M.cppm -verify6// RUN: %clang_cc1 -std=c++20 %t/M.cppm -emit-module-interface -o %t/M.pcm7// RUN: %clang_cc1 -std=c++20 -fmodule-file=M=%t/M.pcm %t/M.cpp -verify8//9// RUN: %clang_cc1 -std=c++20 -fmodule-file=M=%t/M.pcm %t/user.cpp -verify10 11//--- M.cppm12// expected-no-diagnostics13export module M;14 15export int external_linkage_var;16int module_linkage_var;17static int internal_linkage_var;18 19export void external_linkage_fn() {}20void module_linkage_fn() {}21static void internal_linkage_fn() {}22 23export struct external_linkage_class {};24struct module_linkage_class {};25namespace {26struct internal_linkage_class {};27} // namespace28 29void use() {30 external_linkage_fn();31 module_linkage_fn();32 internal_linkage_fn();33 (void)external_linkage_class{};34 (void)module_linkage_class{};35 (void)internal_linkage_class{};36 (void)external_linkage_var;37 (void)module_linkage_var;38 (void)internal_linkage_var;39}40 41//--- M.cpp42 43module M;44 45void use_from_module_impl() {46 external_linkage_fn();47 module_linkage_fn();48 internal_linkage_fn(); // expected-error {{use of undeclared identifier 'internal_linkage_fn'}} // expected-note@* {{}}49 (void)external_linkage_class{};50 (void)module_linkage_class{};51 (void)external_linkage_var;52 (void)module_linkage_var;53 54 (void)internal_linkage_class{}; // expected-error {{use of undeclared identifier 'internal_linkage_class'}} // expected-note@* {{}}55 (void)internal_linkage_var; // expected-error {{use of undeclared identifier 'internal_linkage_var'}}56}57 58//--- user.cpp59import M;60 61void use_from_module_impl() {62 external_linkage_fn();63 module_linkage_fn(); // expected-error {{use of undeclared identifier 'module_linkage_fn'}}64 internal_linkage_fn(); // expected-error {{use of undeclared identifier 'internal_linkage_fn'}}65 (void)external_linkage_class{};66 (void)module_linkage_class{}; // expected-error {{undeclared identifier}} expected-error 0+{{}} // expected-note@* {{}}67 (void)internal_linkage_class{}; // expected-error {{undeclared identifier}} expected-error 0+{{}} // expected-note@* {{}}68 (void)external_linkage_var;69 (void)module_linkage_var; // expected-error {{undeclared identifier}}70 (void)internal_linkage_var; // expected-error {{undeclared identifier}}71}72