File tree Expand file tree Collapse file tree 1 file changed +107
-0
lines changed Expand file tree Collapse file tree 1 file changed +107
-0
lines changed Original file line number Diff line number Diff line change
1
+ // If this test fails, it should be investigated under Debug builds.
2
+ // Before the PR, this test was violating an assertion.
3
+
4
+ // RUN: rm -rf %t
5
+ // RUN: mkdir -p %t
6
+ // RUN: split-file %s %t
7
+
8
+ // RUN: %clang_cc1 -std=c++17 -emit-obj -fmodules \
9
+ // RUN: -fmodule-map-file=%t/module.modulemap \
10
+ // RUN: -fmodules-cache-path=%t %t/a.cpp
11
+
12
+ // --- module.modulemap
13
+ module ebo {
14
+ header " ebo.h"
15
+ }
16
+
17
+ module fwd {
18
+ header " fwd.h"
19
+ }
20
+
21
+ module s {
22
+ header " s.h"
23
+ export *
24
+ }
25
+
26
+ module mod {
27
+ header " a.h"
28
+ header " b.h"
29
+ }
30
+
31
+ // --- ebo.h
32
+ #pragma once
33
+
34
+ namespace N { inline namespace __1 {
35
+
36
+ template <typename T>
37
+ struct EBO : T {
38
+ EBO () = default ;
39
+ };
40
+
41
+ }}
42
+
43
+ // --- fwd.h
44
+ #pragma once
45
+
46
+ namespace N { inline namespace __1 {
47
+
48
+ template <typename T>
49
+ struct Empty ;
50
+
51
+ template <typename T>
52
+ struct BS ;
53
+
54
+ using S = BS<Empty<char >>;
55
+
56
+ }}
57
+
58
+ // --- s.h
59
+ #pragma once
60
+
61
+ #include " fwd.h"
62
+ #include " ebo.h"
63
+
64
+ namespace N { inline namespace __1 {
65
+
66
+ template <typename T>
67
+ struct Empty {};
68
+
69
+ template <typename T>
70
+ struct BS {
71
+ EBO<T> _;
72
+ void f ();
73
+ };
74
+
75
+ extern template void BS<Empty<char >>::f();
76
+
77
+ }}
78
+
79
+ // --- b.h
80
+ #pragma once
81
+
82
+ #include " s.h"
83
+
84
+ struct B {
85
+ void f () {
86
+ N::S{}.f ();
87
+ }
88
+ };
89
+
90
+ // --- a.h
91
+ #pragma once
92
+
93
+ #include " s.h"
94
+
95
+ struct A {
96
+ void f (int ) {}
97
+ void f (const N::S &) {}
98
+
99
+ void g ();
100
+ };
101
+
102
+ // --- a.cpp
103
+ #include " a.h"
104
+
105
+ void A::g () { f (0 ); }
106
+
107
+ // expected-no-diagnostics
You can’t perform that action at this time.
0 commit comments