diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-07-01 22:25:00 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-07-01 22:25:00 +0000 |
| commit | a7143cea3bbe5ea0c65ea4850c6ab696d9b3ca7c (patch) | |
| tree | e9c2fcadc2190a61f15951a7fc6ec0dd9d103817 | |
| parent | f607234fde4ccbdd0899a1ea92703e720dd83a22 (diff) | |
| download | bcm5719-llvm-a7143cea3bbe5ea0c65ea4850c6ab696d9b3ca7c.tar.gz bcm5719-llvm-a7143cea3bbe5ea0c65ea4850c6ab696d9b3ca7c.zip | |
CodeGenCXX: Add tests for RTTI in VFTables
This test was supposed to go in with r212125.
llvm-svn: 212139
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-vftables.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp b/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp new file mode 100644 index 00000000000..323be09c05f --- /dev/null +++ b/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp @@ -0,0 +1,41 @@ +// RUN: %clang_cc1 %s -fno-rtti -triple=i386-pc-win32 -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s -check-prefix=NO-RTTI +// RUN: %clang_cc1 %s -triple=i386-pc-win32 -emit-llvm -o - -O1 -disable-llvm-optzns | FileCheck %s -check-prefix=RTTI + +// RTTI-DAG: $"\01??_7S@@6B@" = comdat largest +// RTTI-DAG: $"\01??_7V@@6B@" = comdat largest + +struct S { + virtual ~S(); +} s; + +// RTTI-DAG: [[VTABLE_S:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4S@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)], comdat $"\01??_7S@@6B@" +// RTTI-DAG: @"\01??_7S@@6B@" = unnamed_addr alias getelementptr inbounds ([2 x i8*]* [[VTABLE_S]], i32 0, i32 1), comdat $"\01??_7S@@6B@" + +// NO-RTTI-DAG: @"\01??_7S@@6B@" = linkonce_odr unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GS@@UAEPAXI@Z" to i8*)] + +struct __declspec(dllimport) U { + virtual ~U(); +} u; + +// RTTI-DAG: @"\01??_7U@@6B@" = available_externally dllimport unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GU@@UAEPAXI@Z" to i8*)] + +// NO-RTTI-DAG: @"\01??_7U@@6B@" = available_externally dllimport unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GU@@UAEPAXI@Z" to i8*)] + +struct __declspec(dllexport) V { + virtual ~V(); +} v; + +// RTTI-DAG: [[VTABLE_V:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4V@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GV@@UAEPAXI@Z" to i8*)], comdat $"\01??_7V@@6B@" +// RTTI-DAG: @"\01??_7V@@6B@" = dllexport unnamed_addr alias getelementptr inbounds ([2 x i8*]* [[VTABLE_V]], i32 0, i32 1), comdat $"\01??_7V@@6B@" + +// NO-RTTI-DAG: @"\01??_7V@@6B@" = weak_odr dllexport unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GV@@UAEPAXI@Z" to i8*)] + +namespace { +struct W { + virtual ~W(); +} w; +} +// RTTI-DAG: [[VTABLE_W:@.*]] = private unnamed_addr constant [2 x i8*] [i8* bitcast ({{.*}} @"\01??_R4W@?A@@6B@" to i8*), i8* bitcast ({{.*}} @"\01??_GW@?A@@UAEPAXI@Z" to i8*)] +// RTTI-DAG: @"\01??_7W@?A@@6B@" = unnamed_addr alias internal getelementptr inbounds ([2 x i8*]* @1, i32 0, i32 1) + +// NO-RTTI-DAG: @"\01??_7W@?A@@6B@" = internal unnamed_addr constant [1 x i8*] [i8* bitcast ({{.*}} @"\01??_GW@?A@@UAEPAXI@Z" to i8*)] |

