public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-3366] Fix debug info for packed array types in Ada
@ 2021-09-06  9:18 Eric Botcazou
  0 siblings, 0 replies; only message in thread
From: Eric Botcazou @ 2021-09-06  9:18 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:c0b03afeab4502da3040ef1ebbd28f826737fa8a

commit r12-3366-gc0b03afeab4502da3040ef1ebbd28f826737fa8a
Author: Eric Botcazou <ebotcazou@adacore.com>
Date:   Mon Sep 6 11:16:08 2021 +0200

    Fix debug info for packed array types in Ada
    
    Packed array types are sometimes represented with integer types under the
    hood in Ada, but we nevertheless need to emit them as array types in the
    debug info so we have the types.get_array_descr_info langhook for this
    purpose; but it is not invoked from modified_type_die, which causes:
    
    FAIL: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all
    FAIL: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all(3)
    
    in the GDB testsuite.
    
    gcc/
            * dwarf2out.c (modified_type_die): Deal with all array types earlier
            and use local variable consistently throughout the function.

Diff:
---
 gcc/dwarf2out.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 07a479f6382..4f100606618 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -13542,6 +13542,7 @@ modified_type_die (tree type, int cv_quals, bool reverse,
   tree qualified_type;
   tree name, low, high;
   dw_die_ref mod_scope;
+  struct array_descr_info info;
   /* Only these cv-qualifiers are currently handled.  */
   const int cv_qual_mask = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE
 			    | TYPE_QUAL_RESTRICT | TYPE_QUAL_ATOMIC | 
@@ -13786,6 +13787,13 @@ modified_type_die (tree type, int cv_quals, bool reverse,
 	    }
 	}
     }
+  else if (code == ARRAY_TYPE
+	   || (lang_hooks.types.get_array_descr_info
+	       && lang_hooks.types.get_array_descr_info (type, &info)))
+    {
+      gen_type_die (type, context_die);
+      return lookup_type_die (type);
+    }
   else if (code == INTEGER_TYPE
 	   && TREE_TYPE (type) != NULL_TREE
 	   && subrange_type_for_debug_p (type, &low, &high))
@@ -13822,8 +13830,7 @@ 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) == FUNCTION_TYPE
-	  || TREE_CODE (type) == METHOD_TYPE)
+      if (code == FUNCTION_TYPE || code == METHOD_TYPE)
 	{
 	  /* For function/method types, can't just use type_main_variant here,
 	     because that can have different ref-qualifiers for C++,
@@ -13836,13 +13843,12 @@ modified_type_die (tree type, int cv_quals, bool reverse,
 	      return lookup_type_die (t);
 	  return lookup_type_die (type);
 	}
-      else 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,
-	   not the main variant.  */
+      /* Vectors have the debugging information in the type,
+	 not the main variant.  */
+      else if (code == VECTOR_TYPE)
 	return lookup_type_die (type);
+      else
+	return lookup_type_die (type_main_variant (type));
     }
 
   /* Builtin types don't have a DECL_ORIGINAL_TYPE.  For those,


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-09-06  9:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-06  9:18 [gcc r12-3366] Fix debug info for packed array types in Ada Eric Botcazou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).