// { dg-do run }
// { dg-options "-fsanitize=vptr" }

struct S
{
  S() : a(0) {}
  ~S() {}
  int a;
  int f() { return 0; }
  virtual int v() { return 0; }
};

struct T : S
{
  T() : b(0) {}
  int b;
  int g() { return 0; }
  virtual int v() { return 1; }
};

T *
foo (S *p)
{
  return (T *) p;
}

int
main ()
{
  if (foo (__null) != __null)
    __builtin_abort ();
}