8sa1-gcc/gcc/testsuite/g++.dg/cpp0x/constexpr-virtual6.C
Nathan Sidwell 88504f3435 re PR c++/70393 (Miscompilation: missing constructor call for static object)
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
2016-03-31 15:30:33 +00:00

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();
}