Commit e6d7b956 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/56237 (ICE in lang_* check: failed in push_local_name, at cp/decl.c:924)

	PR c++/56237
	* decl.c (push_local_name): Look at DECL_DISCRIMINATOR (t)
	only if DECL_DISCRIMINATOR_SET_P (t) rather than just
	DECL_LANG_SPECIFIC (t).

	* g++.dg/abi/mangle61.C: New test.

From-SVN: r195858
parent 5306401f
2013-02-07 Jakub Jelinek <jakub@redhat.com>
PR c++/56237
* decl.c (push_local_name): Look at DECL_DISCRIMINATOR (t)
only if DECL_DISCRIMINATOR_SET_P (t) rather than just
DECL_LANG_SPECIFIC (t).
2013-02-07 Jason Merrill <jason@redhat.com>
PR c++/56235
......
......@@ -920,7 +920,7 @@ push_local_name (tree decl)
if (!DECL_LANG_SPECIFIC (decl))
retrofit_lang_decl (decl);
DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
if (DECL_LANG_SPECIFIC (t))
if (DECL_DISCRIMINATOR_SET_P (t))
DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
else
DECL_DISCRIMINATOR (decl) = 1;
......
2013-02-07 Jakub Jelinek <jakub@redhat.com>
PR c++/56237
* g++.dg/abi/mangle61.C: New test.
2013-02-07 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/56225
......
// PR c++/56237
// { dg-do compile }
void *p[4];
void
foo ()
{
static union { } u;
p[0] = &u;
{
static union { } u;
p[1] = &u;
{
static union { } u;
p[2] = &u;
}
}
{
static union { } u;
p[3] = &u;
}
}
// { dg-final { scan-assembler "_ZZ3foovE1u\[^_\]" } }
// { dg-final { scan-assembler "_ZZ3foovE1u_0" } }
// { dg-final { scan-assembler "_ZZ3foovE1u_1" } }
// { dg-final { scan-assembler "_ZZ3foovE1u_2" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment