[PATCH] PR debug/45682 - wrong struct DIE nesting with -fdebug-types-section

Jakub Jelinek jakub@redhat.com
Thu Jan 5 22:57:00 GMT 2012


On Thu, Jan 05, 2012 at 11:47:49PM +0100, Dodji Seketeli wrote:
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/debug/dwarf2/nested-3.C
> @@ -0,0 +1,34 @@
> +// Origin: PR debug/45682
> +// { dg-options "-g -gdwarf-4 -dA -fdebug-types-section" }
> +
> +namespace thread {
> +    class Executor {};
> +}
> +
> +thread::Executor *te;
> +
> +int
> +main ()
> +{
> +    return 0;
> +}
> +
> +// We want to express the fact that the DIE for the definition of
> +// 'Executor' is a child of the DIE for the namespace 'thread'. E.g,
> +// we must have this outout:
> +// 	.uleb128 0x2	# (DIE (0x25) DW_TAG_namespace)
> +//	.long	.LASF0	# DW_AT_name: "thread"
> +//			# DW_AT_declaration
> +//	.uleb128 0x3	# (DIE (0x2a) DW_TAG_class_type)
> +//	.long	.LASF1	# DW_AT_name: "Executor"
> +//			# DW_AT_declaration
> +//	.uleb128 0x4	# (DIE (0x2f) DW_TAG_class_type)
> +//	.byte	0x1	# DW_AT_byte_size
> +//	.byte	0x1	# DW_AT_decl_file (../../prtests/test-PR45682-2.cc)
> +//	.byte	0x2	# DW_AT_decl_line
> +//	.long	0x2a	# DW_AT_specification
> +//	.byte	0	# end of children of DIE 0x25
> +//
> +//	Hence the scary regexp:
> +//
> +//	{ dg-final { scan-assembler "\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\) DW_TAG_namespace\\)\[\n\r\]+\[^\n\r\]*DW_AT_name: \"thread\"\[\n\r\]+\[^\n\r\]*DW_AT_declaration\[\n\r\]+\[^\n\r\]*\\(DIE \\(0x(\[0-9a-f\]+)\\)\[^\n\r\]*DW_TAG_class_type\\)\[\n\r\]+\[^\n\r\]*DW_AT_name: \"Executor\"\[\n\r\]+\[^\n\r\]*DW_AT_declaration\[\n\r\]+\[^\n\r\]*\\(DIE\[^\n\r\]*DW_TAG_class_type\\)\[\n\r\]+(\[^\n\r\]*\[\n\r\]+)+\[^\n\r\]*0x\\2\[^\n\r\]*\[\n\r\]+\[^\n\r\]*end of children of DIE 0x\\1" } }

Just a testcase comment, I bet this will surely fail on Darwin
or other targets that aren't capable of merging string sections.
So, you should add -fno-merge-debug-strings to dg-options
and adjust the example and regexp for that, that way
it will be the same on all targets.

	Jakub



More information about the Gcc-patches mailing list