108 lines · cpp
1// 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 %s2// 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 %s3// 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 %s4 5struct C1 {6 virtual void f();7};8 9struct __attribute__((visibility("default"))) C2 {10 virtual void f();11};12 13struct __declspec(dllexport) C3 {14 virtual void f();15};16 17struct __declspec(dllimport) C4 {18 virtual void f();19};20 21struct [[clang::lto_visibility_public]] C5 {22 virtual void f();23};24 25struct __declspec(uuid("00000000-0000-0000-0000-000000000000")) C6 {26 virtual void f();27};28 29namespace std {30 31struct C7 {32 virtual void f();33 struct C8 {34 virtual void f();35 };36};37 38}39 40extern "C++" {41 42namespace stdext {43 44struct C9 {45 virtual void f();46};47 48}49 50}51 52namespace other {53 54struct C10 {55 virtual void f();56};57 58}59 60namespace {61 62struct C11 {63 virtual void f();64};65 66}67 68void f(C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, std::C7 *c7,69 std::C7::C8 *c8, stdext::C9 *c9, other::C10 *c10) {70 // ITANIUM: type.test{{.*}}!"_ZTS2C1"71 // MS: type.test{{.*}}!"?AUC1@@"72 c1->f();73 // ITANIUM: type.test{{.*}}!"_ZTS2C2"74 // MS: type.test{{.*}}!"?AUC2@@"75 c2->f();76 // ITANIUM: type.test{{.*}}!"_ZTS2C3"77 // MS-NOT: type.test{{.*}}!"?AUC3@@"78 c3->f();79 // ITANIUM: type.test{{.*}}!"_ZTS2C4"80 // MS-NOT: type.test{{.*}}!"?AUC4@@"81 c4->f();82 // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C5"83 // MS-NOT: type.test{{.*}}!"?AUC5@@"84 c5->f();85 // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C6"86 // MS-NOT: type.test{{.*}}!"?AUC6@@"87 c6->f();88 // ITANIUM: type.test{{.*}}!"_ZTSSt2C7"89 // MS-STD: type.test{{.*}}!"?AUC7@std@@"90 // MS-NOSTD-NOT: type.test{{.*}}!"?AUC7@std@@"91 c7->f();92 // ITANIUM: type.test{{.*}}!"_ZTSNSt2C72C8E"93 // MS-STD: type.test{{.*}}!"?AUC8@C7@std@@"94 // MS-NOSTD-NOT: type.test{{.*}}!"?AUC8@C7@std@@"95 c8->f();96 // ITANIUM: type.test{{.*}}!"_ZTSN6stdext2C9E"97 // MS-STD: type.test{{.*}}!"?AUC9@stdext@@"98 // MS-NOSTD-NOT: type.test{{.*}}!"?AUC9@stdext@@"99 c9->f();100 // ITANIUM: type.test{{.*}}!"_ZTSN5other3C10E"101 // MS: type.test{{.*}}!"?AUC10@other@@"102 c10->f();103 // ITANIUM: type.test{{.*}}!{{[0-9]}}104 // MS: type.test{{.*}}!{{[0-9]}}105 C11 *c11;106 c11->f();107}108