diff options
author | Peter Collingbourne <peter@pcc.me.uk> | 2016-06-24 21:21:46 +0000 |
---|---|---|
committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-06-24 21:21:46 +0000 |
commit | 3400678c4baef75ea1bd67e3f03b6f034302e51c (patch) | |
tree | f82348f1d4fb6c245b9c6560f60a7dbe8b8832fe /test/CodeGenCXX/lto-visibility-inference.cpp | |
parent | 7c599a54a6a9431a44112599fc9166a0e381e932 (diff) |
CodeGen: Update Clang to use the new type metadata.
Differential Revision: http://reviews.llvm.org/D21054
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273730 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/lto-visibility-inference.cpp')
-rw-r--r-- | test/CodeGenCXX/lto-visibility-inference.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/test/CodeGenCXX/lto-visibility-inference.cpp b/test/CodeGenCXX/lto-visibility-inference.cpp new file mode 100644 index 0000000000..8e57ef5e0b --- /dev/null +++ b/test/CodeGenCXX/lto-visibility-inference.cpp @@ -0,0 +1,107 @@ +// 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 +// 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 +// 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 + +struct C1 { + virtual void f(); +}; + +struct __attribute__((visibility("default"))) C2 { + virtual void f(); +}; + +struct __declspec(dllexport) C3 { + virtual void f(); +}; + +struct __declspec(dllimport) C4 { + virtual void f(); +}; + +struct [[clang::lto_visibility_public]] C5 { + virtual void f(); +}; + +struct __declspec(uuid("00000000-0000-0000-0000-000000000000")) C6 { + virtual void f(); +}; + +namespace std { + +struct C7 { + virtual void f(); + struct C8 { + virtual void f(); + }; +}; + +} + +extern "C++" { + +namespace stdext { + +struct C9 { + virtual void f(); +}; + +} + +} + +namespace other { + +struct C10 { + virtual void f(); +}; + +} + +namespace { + +struct C11 { + virtual void f(); +}; + +} + +void f(C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, std::C7 *c7, + std::C7::C8 *c8, stdext::C9 *c9, other::C10 *c10) { + // ITANIUM: type.test{{.*}}!"_ZTS2C1" + // MS: type.test{{.*}}!"?AUC1@@" + c1->f(); + // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C2" + // MS: type.test{{.*}}!"?AUC2@@" + c2->f(); + // ITANIUM: type.test{{.*}}!"_ZTS2C3" + // MS-NOT: type.test{{.*}}!"?AUC3@@" + c3->f(); + // ITANIUM: type.test{{.*}}!"_ZTS2C4" + // MS-NOT: type.test{{.*}}!"?AUC4@@" + c4->f(); + // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C5" + // MS-NOT: type.test{{.*}}!"?AUC5@@" + c5->f(); + // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C6" + // MS-NOT: type.test{{.*}}!"?AUC6@@" + c6->f(); + // ITANIUM: type.test{{.*}}!"_ZTSSt2C7" + // MS-STD: type.test{{.*}}!"?AUC7@std@@" + // MS-NOSTD-NOT: type.test{{.*}}!"?AUC7@std@@" + c7->f(); + // ITANIUM: type.test{{.*}}!"_ZTSNSt2C72C8E" + // MS-STD: type.test{{.*}}!"?AUC8@C7@std@@" + // MS-NOSTD-NOT: type.test{{.*}}!"?AUC8@C7@std@@" + c8->f(); + // ITANIUM: type.test{{.*}}!"_ZTSN6stdext2C9E" + // MS-STD: type.test{{.*}}!"?AUC9@stdext@@" + // MS-NOSTD-NOT: type.test{{.*}}!"?AUC9@stdext@@" + c9->f(); + // ITANIUM: type.test{{.*}}!"_ZTSN5other3C10E" + // MS: type.test{{.*}}!"?AUC10@other@@" + c10->f(); + // ITANIUM: type.test{{.*}}!{{[0-9]}} + // MS: type.test{{.*}}!{{[0-9]}} + C11 *c11; + c11->f(); +} |