14967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -std=c++11 -fms-extensions -fvisibility hidden -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ITANIUM %s 24967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -std=c++11 -fms-extensions -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=MS --check-prefix=MS-STD %s 34967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -std=c++11 -fms-extensions -fwhole-program-vtables -flto-visibility-public-std -emit-llvm -o - %s | FileCheck --check-prefix=MS --check-prefix=MS-NOSTD %s 44967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 54967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct C1 { 64967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 74967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 84967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 94967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct __attribute__((visibility("default"))) C2 { 104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct __declspec(dllexport) C3 { 144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct __declspec(dllimport) C4 { 184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct [[clang::lto_visibility_public]] C5 { 224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct __declspec(uuid("00000000-0000-0000-0000-000000000000")) C6 { 264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace std { 304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct C7 { 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar struct C8 { 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar }; 364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarextern "C++" { 414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace stdext { 434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct C9 { 454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace other { 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct C10 { 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarnamespace { 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarstruct C11 { 634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar virtual void f(); 644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar}; 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainarvoid f(C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, std::C7 *c7, 694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::C7::C8 *c8, stdext::C9 *c9, other::C10 *c10) { 704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTS2C1" 714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS: type.test{{.*}}!"?AUC1@@" 724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c1->f(); 734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C2" 744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS: type.test{{.*}}!"?AUC2@@" 754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c2->f(); 764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTS2C3" 774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOT: type.test{{.*}}!"?AUC3@@" 784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c3->f(); 794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTS2C4" 804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOT: type.test{{.*}}!"?AUC4@@" 814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c4->f(); 824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C5" 834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOT: type.test{{.*}}!"?AUC5@@" 844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c5->f(); 854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C6" 864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOT: type.test{{.*}}!"?AUC6@@" 874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c6->f(); 884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTSSt2C7" 894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-STD: type.test{{.*}}!"?AUC7@std@@" 904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOSTD-NOT: type.test{{.*}}!"?AUC7@std@@" 914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c7->f(); 924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTSNSt2C72C8E" 934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-STD: type.test{{.*}}!"?AUC8@C7@std@@" 944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOSTD-NOT: type.test{{.*}}!"?AUC8@C7@std@@" 954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c8->f(); 964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTSN6stdext2C9E" 974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-STD: type.test{{.*}}!"?AUC9@stdext@@" 984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS-NOSTD-NOT: type.test{{.*}}!"?AUC9@stdext@@" 994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c9->f(); 1004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!"_ZTSN5other3C10E" 1014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS: type.test{{.*}}!"?AUC10@other@@" 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c10->f(); 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ITANIUM: type.test{{.*}}!{{[0-9]}} 1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // MS: type.test{{.*}}!{{[0-9]}} 1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar C11 *c11; 1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar c11->f(); 1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 108