(Ada) New function ada_is_access_to_unconstrained_array
authorXavier Roirand <roirand@adacore.com>
Mon, 10 Sep 2018 15:32:00 +0000 (10:32 -0500)
committerJoel Brobecker <brobecker@adacore.com>
Mon, 10 Sep 2018 15:32:00 +0000 (11:32 -0400)
Add a new function to check if a given type is an access to an
unconstrained array. This function contains code that is present only
once in the current sources but will be used in a future patch.

gdb/ChangeLog:

        * ada-lang.c (ada_is_access_to_unconstrained_array): New function.
        (ada_check_typedef): Use it.

Tested on x86_64-linux.

gdb/ChangeLog
gdb/ada-lang.c

index ca678dd1d97069cdb52cb421f548de1e41a790d5..5401864c21a88904e1e0eb98d269953797adeafb 100644 (file)
@@ -1,3 +1,8 @@
+2018-09-10  Xavier Roirand  <roirand@adacore.com>
+
+       * ada-lang.c (ada_is_access_to_unconstrained_array): New function.
+       (ada_check_typedef): Use it.
+
 2018-09-10  Xavier Roirand  <roirand@adacore.com>
 
        * ada-varobj.c (ada_varobj_describe_struct_child)
index b8a11cdff2a933763aacd6bdb8c90d7c40400cd6..83421ac24e5f8f118906dab9b1794db48133f58a 100644 (file)
@@ -2832,6 +2832,15 @@ value_assign_to_component (struct value *container, struct value *component,
               value_contents (val), 0, bits, 0);
 }
 
+/* Determine if TYPE is an access to an unconstrained array.  */
+
+static bool
+ada_is_access_to_unconstrained_array (struct type *type)
+{
+  return (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
+         && is_thick_pntr (ada_typedef_target_type (type)));
+}
+
 /* The value of the element of array ARR at the ARITY indices given in IND.
    ARR may be either a simple array, GNAT array descriptor, or pointer
    thereto.  */
@@ -9245,13 +9254,13 @@ ada_check_typedef (struct type *type)
   if (type == NULL)
     return NULL;
 
-  /* If our type is a typedef type of a fat pointer, then we're done.
+  /* If our type is an access to an unconstrained array, which is encoded
+     as a TYPE_CODE_TYPEDEF of a fat pointer, then we're done.
      We don't want to strip the TYPE_CODE_TYPDEF layer, because this is
      what allows us to distinguish between fat pointers that represent
      array types, and fat pointers that represent array access types
      (in both cases, the compiler implements them as fat pointers).  */
-  if (TYPE_CODE (type) == TYPE_CODE_TYPEDEF
-      && is_thick_pntr (ada_typedef_target_type (type)))
+  if (ada_is_access_to_unconstrained_array (type))
     return type;
 
   type = check_typedef (type);