re PR debug/83550 (Bad location of DW_TAG_structure_type with forward declaration since r224161)

PR debug/83550
	* c-decl.c (finish_struct): Set DECL_SOURCE_LOCATION on
	TYPE_STUB_DECL and call rest_of_type_compilation before processing
	incomplete vars rather than after it.

	* c-c++-common/dwarf2/pr83550.c: New test.

From-SVN: r255982
This commit is contained in:
Jakub Jelinek 2017-12-22 19:12:15 +01:00 committed by Jakub Jelinek
parent b4b883cee3
commit b58d01a977
4 changed files with 28 additions and 8 deletions

View File

@ -1,3 +1,10 @@
2017-12-22 Jakub Jelinek <jakub@redhat.com>
PR debug/83550
* c-decl.c (finish_struct): Set DECL_SOURCE_LOCATION on
TYPE_STUB_DECL and call rest_of_type_compilation before processing
incomplete vars rather than after it.
2017-12-10 Tom de Vries <tom@codesourcery.com>
backport from trunk:

View File

@ -8123,6 +8123,14 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
warning_at (loc, 0, "union cannot be made transparent");
}
/* Update type location to the one of the definition, instead of e.g.
a forward declaration. */
if (TYPE_STUB_DECL (t))
DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
/* Finish debugging output for this type. */
rest_of_type_compilation (t, toplevel);
/* If this structure or union completes the type of any previous
variable declaration, lay it out and output its rtl. */
for (x = incomplete_vars; x; x = TREE_CHAIN (x))
@ -8139,14 +8147,6 @@ finish_struct (location_t loc, tree t, tree fieldlist, tree attributes,
}
}
/* Update type location to the one of the definition, instead of e.g.
a forward declaration. */
if (TYPE_STUB_DECL (t))
DECL_SOURCE_LOCATION (TYPE_STUB_DECL (t)) = loc;
/* Finish debugging output for this type. */
rest_of_type_compilation (t, toplevel);
/* If we're inside a function proper, i.e. not file-scope and not still
parsing parameters, then arrange for the size of a variable sized type
to be bound now. */

View File

@ -1,5 +1,8 @@
2017-12-22 Jakub Jelinek <jakub@redhat.com>
PR debug/83550
* c-c++-common/dwarf2/pr83550.c: New test.
Backported from mainline
2017-12-21 Jakub Jelinek <jakub@redhat.com>

View File

@ -0,0 +1,10 @@
/* PR debug/83550 */
/* { dg-do compile } */
/* { dg-options "-gdwarf -dA -fno-merge-debug-strings" } */
struct my_struct;
extern struct my_struct s;
struct my_struct { int a, b; };
struct my_struct q;
/* { dg-final { scan-assembler "DW_TAG_structure_type\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\"my_struct\[^\\r\\n\]*DW_AT_name(\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*DW_AT_)*\[^\\r\\n\]*\[\\r\\n\]+\[^\\r\\n\]*\[^0-9a-fA-FxX](0x)?7\[^0-9a-fA-FxX]\[^\\r\\n\]*DW_AT_decl_line" } } */