| // 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 "" } |
| A& a3 = dynamic_cast<volatile A&>(b); // { dg-error "" } |
| A& a4 = dynamic_cast<const volatile A&>(b); // { dg-error "" } |
| |
| 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 "" } |
| const A& ca4 = dynamic_cast<const volatile A&>(b); // { dg-error "" } |
| |
| volatile A& va1 = dynamic_cast<A&>(b); |
| volatile A& va2 = dynamic_cast<const A&>(b); // { dg-error "" } |
| volatile A& va3 = dynamic_cast<volatile A&>(b); |
| volatile A& va4 = dynamic_cast<const volatile A&>(b);// { dg-error "" } |
| |
| 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); |
| } |