aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/rtti/dyncast6.C
blob: a6329e9441c2a1bff1cd5ac75e782c8ffcaa23a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// PR c++/57599

class A { };

class B : public A { };

void p()
{
  B* b;

  A* a1;
  a1 = dynamic_cast<A*>(b);
  a1 = dynamic_cast<const A*>(b);          // { dg-error "invalid" }
  a1 = dynamic_cast<volatile A*>(b);       // { dg-error "invalid" }
  a1 = dynamic_cast<const volatile A*>(b); // { dg-error "invalid" }

  const A* a2;
  a2 = dynamic_cast<A*>(b);
  a2 = dynamic_cast<const A*>(b);
  a2 = dynamic_cast<volatile A*>(b);       // { dg-error "invalid" }
  a2 = dynamic_cast<const volatile A*>(b); // { dg-error "invalid" }

  volatile A* a3;
  a3 = dynamic_cast<A*>(b);
  a3 = dynamic_cast<const A*>(b);          // { dg-error "invalid" }
  a3 = dynamic_cast<volatile A*>(b);
  a3 = dynamic_cast<const volatile A*>(b); // { dg-error "invalid" }

  const volatile A* a4;
  a4 = dynamic_cast<A*>(b);
  a4 = dynamic_cast<const A*>(b);
  a4 = dynamic_cast<volatile A*>(b);
  a4 = dynamic_cast<const volatile A*>(b);
}

void r()
{
  B b;

  A& a1 = dynamic_cast<A&>(b);
  A& a2 = dynamic_cast<const A&>(b);                // { dg-error "invalid" }
  A& a3 = dynamic_cast<volatile A&>(b);             // { dg-error "invalid" }
  A& a4 = dynamic_cast<const volatile A&>(b);       // { dg-error "invalid" }

  const A& ca1 = dynamic_cast<A&>(b);
  const A& ca2 = dynamic_cast<const A&>(b);
  const A& ca3 = dynamic_cast<volatile A&>(b);       // { dg-error "invalid" }
  const A& ca4 = dynamic_cast<const volatile A&>(b); // { dg-error "invalid" }

  volatile A& va1 = dynamic_cast<A&>(b);
  volatile A& va2 = dynamic_cast<const A&>(b);       // { dg-error "invalid" }
  volatile A& va3 = dynamic_cast<volatile A&>(b);
  volatile A& va4 = dynamic_cast<const volatile A&>(b);// { dg-error "invalid" }

  const volatile A& cva1 = dynamic_cast<A&>(b);
  const volatile A& cva2 = dynamic_cast<const A&>(b);
  const volatile A& cva3 = dynamic_cast<volatile A&>(b);
  const volatile A& cva4 = dynamic_cast<const volatile A&>(b);
}