1 // RUN: rm -rf %t
2 
3 // PR35939: MicrosoftMangle.cpp triggers an assertion failure on this test.
4 // UNSUPPORTED: system-windows
5 
6 // RUN: %clang_cc1 \
7 // RUN:  -I %S/Inputs/odr_hash-Friend \
8 // RUN:  -emit-obj -o /dev/null \
9 // RUN:  -fmodules \
10 // RUN:  -fimplicit-module-maps \
11 // RUN:  -fmodules-cache-path=%t/modules.cache \
12 // RUN:  -std=c++11 -x c++ %s -verify -DTEST1
13 
14 // RUN: %clang_cc1 \
15 // RUN:  -I %S/Inputs/odr_hash-Friend \
16 // RUN:  -emit-obj -o /dev/null \
17 // RUN:  -fmodules \
18 // RUN:  -fimplicit-module-maps \
19 // RUN:  -fmodules-cache-path=%t/modules.cache \
20 // RUN:  -std=c++11 -x c++ %s -verify -DTEST2
21 
22 // RUN: %clang_cc1 \
23 // RUN:  -I %S/Inputs/odr_hash-Friend \
24 // RUN:  -emit-obj -o /dev/null \
25 // RUN:  -fmodules \
26 // RUN:  -fimplicit-module-maps \
27 // RUN:  -fmodules-cache-path=%t/modules.cache \
28 // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
29 
30 // RUN: %clang_cc1 \
31 // RUN:  -I %S/Inputs/odr_hash-Friend \
32 // RUN:  -emit-obj -o /dev/null \
33 // RUN:  -fmodules \
34 // RUN:  -fimplicit-module-maps \
35 // RUN:  -fmodules-cache-path=%t/modules.cache \
36 // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
37 
38 // RUN: %clang_cc1 \
39 // RUN:  -I %S/Inputs/odr_hash-Friend \
40 // RUN:  -emit-obj -o /dev/null \
41 // RUN:  -fmodules \
42 // RUN:  -fimplicit-module-maps \
43 // RUN:  -fmodules-cache-path=%t/modules.cache \
44 // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
45 
46 #if defined(TEST1)
47 #include "Box.h"
48 #include "M1.h"
49 #include "M3.h"
50 // expected-no-diagnostics
51 #endif
52 
53 #if defined(TEST2)
54 #include "Box.h"
55 #include "M1.h"
56 #include "M3.h"
57 #include "Good.h"
58 // expected-no-diagnostics
59 #endif
60 
61 #if defined(TEST3)
62 #include "Good.h"
63 #include "Box.h"
64 #include "M1.h"
65 #include "M3.h"
66 // expected-no-diagnostics
67 #endif
68 
69 #if defined(TEST4)
70 #include "Box.h"
71 #include "M1.h"
72 #include "M3.h"
73 #include "Bad.h"
74 // expected-error@Bad.h:* {{'Check' has different definitions in different modules; definition in module 'Bad' first difference is function body}}
75 // expected-note@Box.h:* {{but in 'Box' found a different body}}
76 #endif
77 
78 #if defined(TEST5)
79 #include "Bad.h"
80 #include "Box.h"
81 #include "M1.h"
82 #include "M3.h"
83 // expected-error@Bad.h:* {{'Check' has different definitions in different modules; definition in module 'Bad' first difference is function body}}
84 // expected-note@Box.h:* {{but in 'Box' found a different body}}
85 #endif
86 
87 
Run()88 void Run() {
89   Box<> Present;
90 }
91