From: Jakub Jelinek Date: Tue, 30 May 2017 07:18:37 +0000 (+0200) Subject: backport: re PR c++/77363 (Missing debug information in DWARF) X-Git-Tag: releases/gcc-5.5.0~308 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ae7e23d5cb988e28e19f85547960d608c7a0d99;p=thirdparty%2Fgcc.git backport: re PR c++/77363 (Missing debug information in DWARF) Backported from mainline 2016-08-30 Jakub Jelinek PR debug/77363 * dwarf2out.c (modified_type_die): Use lookup_type_die (type) instead of lookup_type_die (type_main_variant (type)) even for array types. * g++.dg/debug/dwarf2/pr77363.C: New test. From-SVN: r248602 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d01b2705e7ed..1eea27323c02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,11 @@ Backported from mainline 2016-08-30 Jakub Jelinek + PR debug/77363 + * dwarf2out.c (modified_type_die): Use lookup_type_die (type) + instead of lookup_type_die (type_main_variant (type)) even for array + types. + PR middle-end/77377 * simplify-rtx.c (avoid_constant_pool_reference): For out of bounds constant pool reference return x instead of c. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 6808cc159193..4727859c4d85 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10817,7 +10817,8 @@ modified_type_die (tree type, int cv_quals, dw_die_ref context_die) copy was created to help us keep track of typedef names) and that copy might have a different TYPE_UID from the original ..._TYPE node. */ - if (TREE_CODE (type) != VECTOR_TYPE) + if (TREE_CODE (type) != VECTOR_TYPE + && TREE_CODE (type) != ARRAY_TYPE) return lookup_type_die (type_main_variant (type)); else /* Vectors have the debugging information in the type, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b189f210b1f..fc5e04bb5779 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,9 @@ Backported from mainline 2016-08-30 Jakub Jelinek + PR debug/77363 + * g++.dg/debug/dwarf2/pr77363.C: New test. + PR middle-end/77377 * gcc.target/i386/pr77377.c: New test. diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C b/gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C new file mode 100644 index 000000000000..47b714338152 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C @@ -0,0 +1,20 @@ +// PR debug/77363 +// { dg-options "-gdwarf-2 -dA -fno-merge-debug-strings" } +// { dg-final { scan-assembler "DIE \\(\[^\n\r\]*\\) DW_TAG_typedef\[^\n\r\]*\[\n\r]*\[^\n\r\]*type2\[^\n\r\]* DW_AT_name\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_file\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_line\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_type" } } +// { dg-final { scan-assembler "DIE \\(\[^\n\r\]*\\) DW_TAG_typedef\[^\n\r\]*\[\n\r]*\[^\n\r\]*type3\[^\n\r\]* DW_AT_name\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_file\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_line\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_type" } } +// { dg-final { scan-assembler "DIE \\(\[^\n\r\]*\\) DW_TAG_typedef\[^\n\r\]*\[\n\r]*\[^\n\r\]*type4\[^\n\r\]* DW_AT_name\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_file\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_line\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_type" } } +// { dg-final { scan-assembler "DIE \\(\[^\n\r\]*\\) DW_TAG_typedef\[^\n\r\]*\[\n\r]*\[^\n\r\]*type5\[^\n\r\]* DW_AT_name\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_file\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_decl_line\[^\n\r\]*\[\n\r]*\[^\n\r\]* DW_AT_type" } } + +typedef unsigned short type1; +typedef unsigned char type2; +typedef type2 type3[16]; +typedef unsigned char type4[16]; +typedef struct +{ + struct + { + type3 a; + type4 b; + } c; +} type5; +type5 var;