xref: /llvm-project/clang/test/Modules/odr_hash-Friend.cpp (revision 0b9234b915d37b186b7631ee77ad591793d1305c)
14eefb451SRichard Trieu // RUN: rm -rf %t
24eefb451SRichard Trieu 
30ac2eb73SRichard Trieu // PR35939: MicrosoftMangle.cpp triggers an assertion failure on this test.
40ac2eb73SRichard Trieu // UNSUPPORTED: system-windows
50ac2eb73SRichard Trieu 
60ac2eb73SRichard Trieu // RUN: %clang_cc1 \
74eefb451SRichard Trieu // RUN:  -I %S/Inputs/odr_hash-Friend \
84eefb451SRichard Trieu // RUN:  -emit-obj -o /dev/null \
94eefb451SRichard Trieu // RUN:  -fmodules \
104eefb451SRichard Trieu // RUN:  -fimplicit-module-maps \
114eefb451SRichard Trieu // RUN:  -fmodules-cache-path=%t/modules.cache \
12*0b9234b9SRichard Trieu // RUN:  -std=c++11 -x c++ %s -verify -DTEST1
134eefb451SRichard Trieu 
140ac2eb73SRichard Trieu // RUN: %clang_cc1 \
150ac2eb73SRichard Trieu // RUN:  -I %S/Inputs/odr_hash-Friend \
160ac2eb73SRichard Trieu // RUN:  -emit-obj -o /dev/null \
170ac2eb73SRichard Trieu // RUN:  -fmodules \
180ac2eb73SRichard Trieu // RUN:  -fimplicit-module-maps \
190ac2eb73SRichard Trieu // RUN:  -fmodules-cache-path=%t/modules.cache \
20*0b9234b9SRichard Trieu // RUN:  -std=c++11 -x c++ %s -verify -DTEST2
21526fb05cSRichard Trieu 
220ac2eb73SRichard Trieu // RUN: %clang_cc1 \
230ac2eb73SRichard Trieu // RUN:  -I %S/Inputs/odr_hash-Friend \
240ac2eb73SRichard Trieu // RUN:  -emit-obj -o /dev/null \
250ac2eb73SRichard Trieu // RUN:  -fmodules \
260ac2eb73SRichard Trieu // RUN:  -fimplicit-module-maps \
270ac2eb73SRichard Trieu // RUN:  -fmodules-cache-path=%t/modules.cache \
28*0b9234b9SRichard Trieu // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
294eefb451SRichard Trieu 
300ac2eb73SRichard Trieu // RUN: %clang_cc1 \
310ac2eb73SRichard Trieu // RUN:  -I %S/Inputs/odr_hash-Friend \
320ac2eb73SRichard Trieu // RUN:  -emit-obj -o /dev/null \
330ac2eb73SRichard Trieu // RUN:  -fmodules \
340ac2eb73SRichard Trieu // RUN:  -fimplicit-module-maps \
350ac2eb73SRichard Trieu // RUN:  -fmodules-cache-path=%t/modules.cache \
36*0b9234b9SRichard Trieu // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
370ac2eb73SRichard Trieu 
380ac2eb73SRichard Trieu // RUN: %clang_cc1 \
390ac2eb73SRichard Trieu // RUN:  -I %S/Inputs/odr_hash-Friend \
400ac2eb73SRichard Trieu // RUN:  -emit-obj -o /dev/null \
410ac2eb73SRichard Trieu // RUN:  -fmodules \
420ac2eb73SRichard Trieu // RUN:  -fimplicit-module-maps \
430ac2eb73SRichard Trieu // RUN:  -fmodules-cache-path=%t/modules.cache \
44*0b9234b9SRichard Trieu // RUN:  -std=c++11 -x c++ %s -verify -DTEST3
450ac2eb73SRichard Trieu 
460ac2eb73SRichard Trieu #if defined(TEST1)
474eefb451SRichard Trieu #include "Box.h"
484eefb451SRichard Trieu #include "M1.h"
494eefb451SRichard Trieu #include "M3.h"
500ac2eb73SRichard Trieu // expected-no-diagnostics
510ac2eb73SRichard Trieu #endif
520ac2eb73SRichard Trieu 
530ac2eb73SRichard Trieu #if defined(TEST2)
540ac2eb73SRichard Trieu #include "Box.h"
550ac2eb73SRichard Trieu #include "M1.h"
560ac2eb73SRichard Trieu #include "M3.h"
570ac2eb73SRichard Trieu #include "Good.h"
580ac2eb73SRichard Trieu // expected-no-diagnostics
590ac2eb73SRichard Trieu #endif
600ac2eb73SRichard Trieu 
610ac2eb73SRichard Trieu #if defined(TEST3)
620ac2eb73SRichard Trieu #include "Good.h"
630ac2eb73SRichard Trieu #include "Box.h"
640ac2eb73SRichard Trieu #include "M1.h"
650ac2eb73SRichard Trieu #include "M3.h"
660ac2eb73SRichard Trieu // expected-no-diagnostics
670ac2eb73SRichard Trieu #endif
680ac2eb73SRichard Trieu 
690ac2eb73SRichard Trieu #if defined(TEST4)
700ac2eb73SRichard Trieu #include "Box.h"
710ac2eb73SRichard Trieu #include "M1.h"
720ac2eb73SRichard Trieu #include "M3.h"
730ac2eb73SRichard Trieu #include "Bad.h"
740ac2eb73SRichard Trieu // expected-error@Bad.h:* {{'Check' has different definitions in different modules; definition in module 'Bad' first difference is function body}}
750ac2eb73SRichard Trieu // expected-note@Box.h:* {{but in 'Box' found a different body}}
760ac2eb73SRichard Trieu #endif
770ac2eb73SRichard Trieu 
780ac2eb73SRichard Trieu #if defined(TEST5)
790ac2eb73SRichard Trieu #include "Bad.h"
800ac2eb73SRichard Trieu #include "Box.h"
810ac2eb73SRichard Trieu #include "M1.h"
820ac2eb73SRichard Trieu #include "M3.h"
830ac2eb73SRichard Trieu // expected-error@Bad.h:* {{'Check' has different definitions in different modules; definition in module 'Bad' first difference is function body}}
840ac2eb73SRichard Trieu // expected-note@Box.h:* {{but in 'Box' found a different body}}
850ac2eb73SRichard Trieu #endif
860ac2eb73SRichard Trieu 
874eefb451SRichard Trieu 
Run()884eefb451SRichard Trieu void Run() {
894eefb451SRichard Trieu   Box<> Present;
904eefb451SRichard Trieu }
91