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