1// Verify ubsan vptr does not check down-casts on blacklisted types.
2// RUN: echo "type:_ZTI3Foo" > %t-type.blacklist
3// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsanitize=vptr -fsanitize-recover=vptr -emit-llvm %s -o - | FileCheck %s --check-prefix=DEFAULT
4// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsanitize=vptr -fsanitize-recover=vptr -fsanitize-blacklist=%t-type.blacklist -emit-llvm %s -o - | FileCheck %s --check-prefix=TYPE
5
6class Bar {
7public:
8  virtual ~Bar() {}
9};
10class Foo : public Bar {};
11
12Bar bar;
13
14// DEFAULT: @_Z7checkmev
15// TYPE: @_Z7checkmev
16void checkme() {
17// DEFAULT: call void @__ubsan_handle_dynamic_type_cache_miss({{.*}} (%class.Bar* @bar to
18// TYPE-NOT: @__ubsan_handle_dynamic_type_cache_miss
19  Foo* foo = static_cast<Foo*>(&bar); // down-casting
20// DEFAULT: ret void
21// TYPE: ret void
22  return;
23}
24