blob: bfbf5117dd1aae5755a33d7778a88cf3e1243151 [file] [log] [blame]
// 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);
}