27 lines · cpp
1// RUN: %clang_cc1 -emit-llvm %s -verify -fno-rtti -triple %itanium_abi_triple -o - | FileCheck %s2// expected-no-diagnostics3 4struct A {5 virtual ~A(){};6};7 8struct B : public A {9 B() : A() {}10};11 12// An upcast can be resolved statically and can be used with -fno-rtti, iff it13// does not use runtime support.14A *upcast(B *b) {15 return dynamic_cast<A *>(b);16// CHECK-LABEL: define {{.*}}ptr @_Z6upcastP1B17// CHECK-NOT: call {{.*}}ptr @__dynamic_cast18}19 20// A NoOp dynamic_cast can be used with -fno-rtti iff it does not use21// runtime support.22B *samecast(B *b) {23 return dynamic_cast<B *>(b);24// CHECK-LABEL: define {{.*}}ptr @_Z8samecastP1B25// CHECK-NOT: call {{.*}}ptr @__dynamic_cast26}27