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>
|
2016-01-27 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
PR debug/66869
|
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))
|
for (x = TYPE_MAIN_VARIANT (t); x; x = TYPE_NEXT_VARIANT (x))
|
||||||
{
|
{
|
||||||
TYPE_FIELDS (x) = TYPE_FIELDS (t);
|
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_READONLY (x) = C_TYPE_FIELDS_READONLY (t);
|
||||||
C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
|
C_TYPE_FIELDS_VOLATILE (x) = C_TYPE_FIELDS_VOLATILE (t);
|
||||||
C_TYPE_VARIABLE_SIZE (x) = C_TYPE_VARIABLE_SIZE (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
|
/* 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
|
/* If this structure or union completes the type of any previous
|
||||||
variable declaration, lay it out and output its rtl.
|
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;
|
|
||||||
for (x = incomplete_vars; x; x = TREE_CHAIN (x))
|
for (x = incomplete_vars; x; x = TREE_CHAIN (x))
|
||||||
{
|
{
|
||||||
tree decl = TREE_VALUE (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>
|
2016-01-29 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR target/69530
|
PR target/69530
|
||||||
|
|
|
@ -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