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 Trieuvoid Run() { 894eefb451SRichard Trieu Box<> Present; 904eefb451SRichard Trieu } 91