re PR debug/69518 (Flag -g causes "error: type variant has different TYPE_VFIELD")
PR debug/69518 * c-decl.c (finish_struct): Clear C_TYPE_INCOMPLETE_VARS in all type variants, not just TYPE_MAIN_VARIANT. * gcc.dg/torture/pr69518.c: New test. From-SVN: r232998
This commit is contained in:
parent
c661a43de3
commit
3a5d2ba4fc
@ -1,3 +1,9 @@
|
||||
2016-01-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/69518
|
||||
* c-decl.c (finish_struct): Clear C_TYPE_INCOMPLETE_VARS in
|
||||
all type variants, not just TYPE_MAIN_VARIANT.
|
||||
|
||||
2016-01-27 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/66869
|
||||
|
@ -7842,6 +7842,14 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
|
||||
}
|
||||
}
|
||||
|
||||
/* Note: C_TYPE_INCOMPLETE_VARS overloads TYPE_VFIELD which is used
|
||||
in dwarf2out via rest_of_decl_compilation below and means
|
||||
something totally different. Since we will be clearing
|
||||
C_TYPE_INCOMPLETE_VARS shortly after we iterate through them,
|
||||
clear it ahead of time and avoid problems in dwarf2out. Ideally,
|
||||
C_TYPE_INCOMPLETE_VARS should use some language specific
|
||||
node. */
|
||||
tree incomplete_vars = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
|
||||
for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
|
||||
{
|
||||
TYPE_FIELDS (x) = TYPE_FIELDS (t);
|
||||
@ -7849,6 +7857,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
|
||||
C_TYPE_FIELDS_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
|
||||
C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
|
||||
C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (t);
|
||||
C_TYPE_INCOMPLETE_VARS (x) = NULL_TREE;
|
||||
}
|
||||
|
||||
/* If this was supposed to be a transparent union, but we can't
|
||||
@ -7862,17 +7871,7 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
|
||||
}
|
||||
|
||||
/* If this structure or union completes the type of any previous
|
||||
variable declaration, lay it out and output its rtl.
|
||||
|
||||
Note: C_TYPE_INCOMPLETE_VARS overloads TYPE_VFIELD which is used
|
||||
in dwarf2out via rest_of_decl_compilation below and means
|
||||
something totally different. Since we will be clearing
|
||||
C_TYPE_INCOMPLETE_VARS shortly after we iterate through them,
|
||||
clear it ahead of time and avoid problems in dwarf2out. Ideally,
|
||||
C_TYPE_INCOMPLETE_VARS should use some language specific
|
||||
node. */
|
||||
tree incomplete_vars = C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t));
|
||||
C_TYPE_INCOMPLETE_VARS (TYPE_MAIN_VARIANT (t)) = 0;
|
||||
variable declaration, lay it out and output its rtl. */
|
||||
for (x = incomplete_vars; x; x = TREE_CHAIN (x))
|
||||
{
|
||||
tree decl = TREE_VALUE (x);
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-01-29 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR debug/69518
|
||||
* gcc.dg/torture/pr69518.c: New test.
|
||||
|
||||
2016-01-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR target/69530
|
||||
|
11
gcc/testsuite/gcc.dg/torture/pr69518.c
Normal file
11
gcc/testsuite/gcc.dg/torture/pr69518.c
Normal file
@ -0,0 +1,11 @@
|
||||
/* PR debug/69518 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-g" } */
|
||||
|
||||
struct A a;
|
||||
typedef struct A B;
|
||||
struct A {}
|
||||
foo (B x)
|
||||
{
|
||||
__builtin_abort ();
|
||||
}
|
Loading…
Reference in New Issue
Block a user