1*ebf267b8SZequan Wu // RUN: %clang_cc1 %s -triple x86_64-unknown-linux -fno-rtti-data -fsyntax-only -verify
2*ebf267b8SZequan Wu 
3*ebf267b8SZequan Wu namespace std {
4*ebf267b8SZequan Wu struct type_info {};
5*ebf267b8SZequan Wu } // namespace std
6*ebf267b8SZequan Wu class B {
7*ebf267b8SZequan Wu public:
8*ebf267b8SZequan Wu   virtual ~B() = default;
9*ebf267b8SZequan Wu };
10*ebf267b8SZequan Wu 
11*ebf267b8SZequan Wu class D1 : public B {
12*ebf267b8SZequan Wu public:
13*ebf267b8SZequan Wu   ~D1() = default;
14*ebf267b8SZequan Wu };
15*ebf267b8SZequan Wu 
f()16*ebf267b8SZequan Wu void f() {
17*ebf267b8SZequan Wu   B *b = new D1();
18*ebf267b8SZequan Wu   auto d = dynamic_cast<D1 *>(b); // expected-warning{{dynamic_cast will not work since RTTI data is disabled by -fno-rtti-data}}
19*ebf267b8SZequan Wu   void *v = dynamic_cast<void *>(b);
20*ebf267b8SZequan Wu 
21*ebf267b8SZequan Wu   (void)typeid(int);
22*ebf267b8SZequan Wu   (void)typeid(b);
23*ebf267b8SZequan Wu   (void)typeid(*b); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
24*ebf267b8SZequan Wu   B b2 = *b;
25*ebf267b8SZequan Wu   (void)typeid(b2);
26*ebf267b8SZequan Wu   (void)typeid(*&b2); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
27*ebf267b8SZequan Wu   (void)typeid((B &)b2);
28*ebf267b8SZequan Wu 
29*ebf267b8SZequan Wu   B &br = b2;
30*ebf267b8SZequan Wu   (void)typeid(br); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
31*ebf267b8SZequan Wu   (void)typeid(&br);
32*ebf267b8SZequan Wu }