xref: /llvm-project/clang/test/CodeGenCXX/dynamic-cast-exact-disabled.cpp (revision 6cf8179661997f8d512cdf944f4f4c0c01cb37c1)
1*6cf81796SRichard Smith // 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*6cf81796SRichard Smith // 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*6cf81796SRichard Smith // 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*6cf81796SRichard Smith // 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*6cf81796SRichard Smith // 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
69d525bf9SRichard Smith 
79d525bf9SRichard Smith struct A { virtual ~A(); };
89d525bf9SRichard Smith struct B final : A { };
99d525bf9SRichard Smith 
109d525bf9SRichard Smith // CHECK-LABEL: @_Z5exactP1A
exact(A * a)119d525bf9SRichard Smith B *exact(A *a) {
129d525bf9SRichard Smith   // INEXACT: call {{.*}} @__dynamic_cast
139d525bf9SRichard Smith   // EXACT-NOT: call {{.*}} @__dynamic_cast
149d525bf9SRichard Smith   return dynamic_cast<B*>(a);
159d525bf9SRichard Smith }
16