llvm/clang/test/SemaCXX/no-rtti-data.cpp

// RUN: %clang_cc1 %s -triple x86_64-unknown-linux -fno-rtti-data -fsyntax-only -verify

namespace std {
struct type_info {};
} // namespace std
class B {
public:
  virtual ~B() = default;
};

class D1 : public B {
public:
  ~D1() = default;
};

void f() {
  B *b = new D1();
  auto d = dynamic_cast<D1 *>(b); // expected-warning{{dynamic_cast will not work since RTTI data is disabled by -fno-rtti-data}}
  void *v = dynamic_cast<void *>(b);

  (void)typeid(int);
  (void)typeid(b);
  (void)typeid(*b); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
  B b2 = *b;
  (void)typeid(b2);
  (void)typeid(*&b2); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
  (void)typeid((B &)b2);

  B &br = b2;
  (void)typeid(br); // expected-warning{{typeid will not work since RTTI data is disabled by -fno-rtti-data}}
  (void)typeid(&br);
}