diff options
| author | Peter Collingbourne <peter@pcc.me.uk> | 2016-01-14 02:49:48 +0000 |
|---|---|---|
| committer | Peter Collingbourne <peter@pcc.me.uk> | 2016-01-14 02:49:48 +0000 |
| commit | 574975efa99e387ba23cc2e0157141f83f387e0b (patch) | |
| tree | b590b0c369e996725a2f7a2d998412ede60a9423 /clang/test | |
| parent | a6b2c4f721f4243d4b39f1ab02bbdc986002afdc (diff) | |
| download | bcm5719-llvm-574975efa99e387ba23cc2e0157141f83f387e0b.tar.gz bcm5719-llvm-574975efa99e387ba23cc2e0157141f83f387e0b.zip | |
CodeGen: Only emit CFI unrelated cast checks for bit casts.
We were previously emitting them for no-op casts (e.g. implicit casts
to const).
llvm-svn: 257738
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGenCXX/cfi-cast.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/clang/test/CodeGenCXX/cfi-cast.cpp b/clang/test/CodeGenCXX/cfi-cast.cpp index 0b96cb6506c..845b9553b24 100644 --- a/clang/test/CodeGenCXX/cfi-cast.cpp +++ b/clang/test/CodeGenCXX/cfi-cast.cpp @@ -8,6 +8,7 @@ struct A { virtual void f(); + int i() const; }; struct B : A { @@ -103,23 +104,31 @@ void vbrr(char &&r) { // CHECK-UCAST-LABEL: define void @_Z3vcpPv // CHECK-UCAST-STRICT-LABEL: define void @_Z3vcpPv void vcp(void *p) { - // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") - // CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") + // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") + // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") static_cast<C*>(p); } // CHECK-UCAST-LABEL: define void @_Z3bcpP1B // CHECK-UCAST-STRICT-LABEL: define void @_Z3bcpP1B void bcp(B *p) { - // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") - // CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") + // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") + // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") (C *)p; } // CHECK-UCAST-LABEL: define void @_Z8bcp_callP1B // CHECK-UCAST-STRICT-LABEL: define void @_Z8bcp_callP1B void bcp_call(B *p) { - // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") - // CHECK-UCAST-STRICT: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") + // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") + // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") ((C *)p)->f(); } + +// CHECK-UCAST-LABEL: define i32 @_Z6a_callP1A +// CHECK-UCAST-STRICT-LABEL: define i32 @_Z6a_callP1A +int a_call(A *a) { + // CHECK-UCAST-NOT: @llvm.bitset.test + // CHECK-UCAST-STRICT-NOT: @llvm.bitset.test + return a->i(); +} |

