PR c++/70393 * varasm.c (output_constructor_regular_field): Flush bitfield earlier. Assert we don't want to move backwards. cp/ * constexpr.c (cxx_eval_store_expression): Keep CONSTRUCTOR elements in field order. testsuite/ * g++.dg/cpp0x/constexpr-virtual6.C: New. From-SVN: r234636
50 lines
620 B
C
50 lines
620 B
C
// PR c++/70393
|
|
// { dg-do run { target c++11 } }
|
|
|
|
/* 'ab' has a static initializer, but we flubbed the initializer,
|
|
because of B being the primary base. */
|
|
|
|
struct A
|
|
{
|
|
int a = 1;
|
|
};
|
|
|
|
struct B
|
|
{
|
|
B *element = (B*)2;
|
|
|
|
virtual int vfunc() = 0;
|
|
|
|
int call_element()
|
|
{
|
|
return element->vfunc();
|
|
}
|
|
|
|
void set_element()
|
|
{
|
|
element = this;
|
|
}
|
|
};
|
|
|
|
struct AB : public A, public B
|
|
{
|
|
int vfunc()
|
|
{
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
static AB ab;
|
|
|
|
int main()
|
|
{
|
|
if (ab.a != 1)
|
|
return 1;
|
|
if (ab.element != (void*)2)
|
|
return 2;
|
|
|
|
ab.set_element();
|
|
return ab.call_element();
|
|
}
|
|
|