re PR c/89933 (ICE in merge_decls, at c/c-decl.c:2517)
PR c/89933 c/ * c-decl.c (merge_decls): When newdecl's type is its main variant, don't try to remove it from the variant list, but instead assert it has no variants. cp/ * decl.c (duplicate_decls): When newdecl's type is its main variant, don't try to remove it from the variant list, but instead assert it has no variants. testsuite/ * c-c++-common/pr89933.c: New test. From-SVN: r270329
This commit is contained in:
parent
bb50312e02
commit
60a2c64519
6 changed files with 44 additions and 14 deletions
|
@ -1,3 +1,10 @@
|
|||
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/89933
|
||||
* c-decl.c (merge_decls): When newdecl's type is its main variant,
|
||||
don't try to remove it from the variant list, but instead assert
|
||||
it has no variants.
|
||||
|
||||
2019-04-01 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR c/71598
|
||||
|
|
|
@ -2512,13 +2512,16 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
|
|||
if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
|
||||
{
|
||||
tree remove = TREE_TYPE (newdecl);
|
||||
for (tree t = TYPE_MAIN_VARIANT (remove); ;
|
||||
t = TYPE_NEXT_VARIANT (t))
|
||||
if (TYPE_NEXT_VARIANT (t) == remove)
|
||||
{
|
||||
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
|
||||
break;
|
||||
}
|
||||
if (TYPE_MAIN_VARIANT (remove) == remove)
|
||||
gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
|
||||
else
|
||||
for (tree t = TYPE_MAIN_VARIANT (remove); ;
|
||||
t = TYPE_NEXT_VARIANT (t))
|
||||
if (TYPE_NEXT_VARIANT (t) == remove)
|
||||
{
|
||||
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/89933
|
||||
* decl.c (duplicate_decls): When newdecl's type is its main variant,
|
||||
don't try to remove it from the variant list, but instead assert
|
||||
it has no variants.
|
||||
|
||||
2019-04-12 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c/88383
|
||||
|
|
|
@ -2132,13 +2132,16 @@ next_arg:;
|
|||
if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
|
||||
{
|
||||
tree remove = TREE_TYPE (newdecl);
|
||||
for (tree t = TYPE_MAIN_VARIANT (remove); ;
|
||||
t = TYPE_NEXT_VARIANT (t))
|
||||
if (TYPE_NEXT_VARIANT (t) == remove)
|
||||
{
|
||||
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
|
||||
break;
|
||||
}
|
||||
if (TYPE_MAIN_VARIANT (remove) == remove)
|
||||
gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
|
||||
else
|
||||
for (tree t = TYPE_MAIN_VARIANT (remove); ;
|
||||
t = TYPE_NEXT_VARIANT (t))
|
||||
if (TYPE_NEXT_VARIANT (t) == remove)
|
||||
{
|
||||
TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (merge_attr)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-04-12 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c/89933
|
||||
* c-c++-common/pr89933.c: New test.
|
||||
|
||||
2019-04-12 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR c/88383
|
||||
|
|
5
gcc/testsuite/c-c++-common/pr89933.c
Normal file
5
gcc/testsuite/c-c++-common/pr89933.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
/* PR c/89933 */
|
||||
/* { dg-do compile } */
|
||||
|
||||
typedef unsigned int a __attribute__ ((__aligned__(8), __may_alias__));
|
||||
typedef unsigned int a __attribute__ ((__aligned__(8), __may_alias__));
|
Loading…
Add table
Reference in a new issue