xref: /llvm-project/clang/test/Modules/same-decl-in-different-modules.cppm (revision e44c28f07ede2bd693e2372317880f57a635fa73)
1cc4ec6daSChuanqi Xu// RUN: rm -rf %t
2cc4ec6daSChuanqi Xu// RUN: mkdir %t
3cc4ec6daSChuanqi Xu// RUN: split-file %s %t
4cc4ec6daSChuanqi Xu//
5cc4ec6daSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/mod1.cppm -emit-module-interface -o %t/mod1.pcm
6cc4ec6daSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/mod2.cppm -emit-module-interface -o %t/mod2.pcm
7cc4ec6daSChuanqi Xu// RUN: %clang_cc1 -std=c++20 %t/test.cc -fprebuilt-module-path=%t -fsyntax-only -verify
8cc4ec6daSChuanqi Xu
9cc4ec6daSChuanqi Xu//--- mod1.cppm
10cc4ec6daSChuanqi Xuexport module mod1;
11cc4ec6daSChuanqi Xuexport int v;
12cc4ec6daSChuanqi Xuexport void func();
13cc4ec6daSChuanqi Xuexport class A {};
14cc4ec6daSChuanqi Xuexport template <class C>
15cc4ec6daSChuanqi Xustruct S {};
16cc4ec6daSChuanqi Xu
17cc4ec6daSChuanqi Xu//--- mod2.cppm
18cc4ec6daSChuanqi Xuexport module mod2;
19cc4ec6daSChuanqi Xuexport int v;
20cc4ec6daSChuanqi Xuexport void func();
21cc4ec6daSChuanqi Xuexport class A;
22cc4ec6daSChuanqi Xuexport template <class C>
23cc4ec6daSChuanqi Xustruct S {};
24cc4ec6daSChuanqi Xu
25cc4ec6daSChuanqi Xu//--- test.cc
26cc4ec6daSChuanqi Xuimport mod1;
27cc4ec6daSChuanqi Xuimport mod2;
28cc4ec6daSChuanqi Xuvoid test() {
29cc4ec6daSChuanqi Xu    int value = v;
30cc4ec6daSChuanqi Xu    func();
31cc4ec6daSChuanqi Xu    A a;
32cc4ec6daSChuanqi Xu    S<int> s;
33cc4ec6daSChuanqi Xu}
34cc4ec6daSChuanqi Xu
35*e44c28f0SKrzysztof Parzyszek// expected-error@mod1.cppm:* {{declaration 'v' attached to named module 'mod1' cannot be attached to other modules}}
36cc4ec6daSChuanqi Xu// expected-note@mod2.cppm:* {{}}
37*e44c28f0SKrzysztof Parzyszek// expected-error@mod1.cppm:* {{declaration 'func' attached to named module 'mod1' cannot be attached to other modules}}
38cc4ec6daSChuanqi Xu// expected-note@mod2.cppm:* {{}}
39*e44c28f0SKrzysztof Parzyszek// expected-error@mod1.cppm:* {{declaration 'A' attached to named module 'mod1' cannot be attached to other modules}}
40cc4ec6daSChuanqi Xu// expected-note@mod2.cppm:* {{}}
41*e44c28f0SKrzysztof Parzyszek// expected-error@mod1.cppm:* 1+{{declaration 'S' attached to named module 'mod1' cannot be attached to other modules}}
42cc4ec6daSChuanqi Xu// expected-note@mod2.cppm:* 1+{{}}
43