xref: /llvm-project/clang/test/CodeGenCXX/dynamic-cast-exact-disabled.cpp (revision 6cf8179661997f8d512cdf944f4f4c0c01cb37c1)
1 // RUN: %clang_cc1 -I%S %s -triple x86_64-apple-darwin10 -O1 -emit-llvm -std=c++11 -o - | FileCheck %s --check-prefixes=CHECK,EXACT
2 // RUN: %clang_cc1 -I%S %s -triple x86_64-apple-darwin10 -O0 -emit-llvm -std=c++11 -o - | FileCheck %s --check-prefixes=CHECK,INEXACT
3 // RUN: %clang_cc1 -I%S %s -triple x86_64-apple-darwin10 -O1 -fvisibility=hidden -emit-llvm -std=c++11 -o - | FileCheck %s --check-prefixes=CHECK,INEXACT
4 // RUN: %clang_cc1 -I%S %s -triple x86_64-apple-darwin10 -O1 -fapple-kext -emit-llvm -std=c++11 -o - | FileCheck %s --check-prefixes=CHECK,INEXACT
5 // RUN: %clang_cc1 -I%S %s -triple x86_64-apple-darwin10 -O1 -fno-assume-unique-vtables -emit-llvm -std=c++11 -o - | FileCheck %s --check-prefixes=CHECK,INEXACT
6 
7 struct A { virtual ~A(); };
8 struct B final : A { };
9 
10 // CHECK-LABEL: @_Z5exactP1A
exact(A * a)11 B *exact(A *a) {
12   // INEXACT: call {{.*}} @__dynamic_cast
13   // EXACT-NOT: call {{.*}} @__dynamic_cast
14   return dynamic_cast<B*>(a);
15 }
16