re PR c++/77363 (Missing debug information in DWARF)
authorJakub Jelinek <jakub@redhat.com>
Tue, 30 Aug 2016 06:46:38 +0000 (08:46 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 30 Aug 2016 06:46:38 +0000 (08:46 +0200)
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: r239855

gcc/ChangeLog
gcc/dwarf2out.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/dwarf2/pr77363.C [new file with mode: 0644]

index 347c7c6a50dcb1992958d841e3fc586dcde2a653..3e394ccbcfe0c04de98355803067650bfbf41961 100644 (file)
@@ -1,5 +1,10 @@
 2016-08-30  Jakub Jelinek  <jakub@redhat.com>
 
+       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.
index 45eb684e2a279735525ed22d38ec722fce1d1551..11e011399afb686cbf6d2f6846ca9988376cb510 100644 (file)
@@ -11474,7 +11474,8 @@ modified_type_die (tree type, int cv_quals, bool reverse,
         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,
index 7a435819a6810102f20e1f1ceb282de03f1ecb4e..4f6142aca6b4b9a99dc9dd2c94a5b9fc80d5d748 100644 (file)
@@ -1,5 +1,8 @@
 2016-08-30  Jakub Jelinek  <jakub@redhat.com>
 
+       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 (file)
index 0000000..47b7143
--- /dev/null
@@ -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;