xref: /aosp_15_r20/external/clang/test/SemaCXX/no-rtti.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -fno-rtti %s
2*67e74705SXin Li 
3*67e74705SXin Li namespace std {
4*67e74705SXin Li   class type_info;
5*67e74705SXin Li }
6*67e74705SXin Li 
f()7*67e74705SXin Li void f()
8*67e74705SXin Li {
9*67e74705SXin Li   (void)typeid(int); // expected-error {{cannot use typeid with -fno-rtti}}
10*67e74705SXin Li }
11*67e74705SXin Li 
12*67e74705SXin Li namespace {
13*67e74705SXin Li struct A {
~A__anona6da8eb00111::A14*67e74705SXin Li   virtual ~A(){};
15*67e74705SXin Li };
16*67e74705SXin Li 
17*67e74705SXin Li struct B : public A {
B__anona6da8eb00111::B18*67e74705SXin Li   B() : A() {}
19*67e74705SXin Li };
20*67e74705SXin Li }
21*67e74705SXin Li 
isa_B(A * a)22*67e74705SXin Li bool isa_B(A *a) {
23*67e74705SXin Li   return dynamic_cast<B *>(a) != 0; // expected-error {{cannot use dynamic_cast with -fno-rtti}}
24*67e74705SXin Li }
25*67e74705SXin Li 
getMostDerived(A * a)26*67e74705SXin Li void* getMostDerived(A* a) {
27*67e74705SXin Li   // This cast does not use RTTI.
28*67e74705SXin Li   return dynamic_cast<void *>(a);
29*67e74705SXin Li }
30