OSDN Git Service

* gcc-interface/gigi.h (build_unc_object_type): Add DEBUG_INFO_P param.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 8 May 2010 11:02:08 +0000 (11:02 +0000)
committerMasaki Muranaka <monaka@monami-software.com>
Sun, 23 May 2010 05:03:08 +0000 (14:03 +0900)
(build_unc_object_type_from_ptr): Likewise.
* gcc-interface/utils.c (build_unc_object_type): Add DEBUG_INFO_P param
and pass it to create_type_decl.  Declare the type.  Simplify.
(build_unc_object_type_from_ptr): Add DEBUG_INFO_P parameter and pass
it to build_unc_object_type.
* gcc-interface/decl.c (gnat_to_gnu_entity): Adjust to above change.
* gcc-interface/trans.c (Attribute_to_gnu): Likewise.
(gnat_to_gnu): Likewise.
* gcc-interface/utils2.c (build_allocator): Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159180 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/gigi.h
gcc/ada/gcc-interface/trans.c
gcc/ada/gcc-interface/utils.c
gcc/ada/gcc-interface/utils2.c
gcc/testsuite/ChangeLog

index 15af250..634e8dd 100644 (file)
@@ -1,3 +1,16 @@
+2010-05-08  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/gigi.h (build_unc_object_type): Add DEBUG_INFO_P param.
+       (build_unc_object_type_from_ptr): Likewise.
+       * gcc-interface/utils.c (build_unc_object_type): Add DEBUG_INFO_P param
+       and pass it to create_type_decl.  Declare the type.  Simplify.
+       (build_unc_object_type_from_ptr): Add DEBUG_INFO_P parameter and pass
+       it to build_unc_object_type.
+       * gcc-interface/decl.c (gnat_to_gnu_entity): Adjust to above change.
+       * gcc-interface/trans.c (Attribute_to_gnu): Likewise.
+       (gnat_to_gnu): Likewise.
+       * gcc-interface/utils2.c (build_allocator): Likewise.
+
 2010-05-07 Eric Botcazou  <ebotcazou@adacore.com>
 
        PR 40989
index ccedee0..137cbbb 100644 (file)
@@ -807,7 +807,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
          gnu_type
            = build_unc_object_type_from_ptr (gnu_fat, gnu_type,
                                              concat_name (gnu_entity_name,
-                                                          "UNC"));
+                                                          "UNC"),
+                                             debug_info_p);
        }
 
 #ifdef MINIMUM_ATOMIC_ALIGNMENT
@@ -2066,7 +2067,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
           a record type for the object and its template with the fields
           shifted to have the template at a negative offset.  */
        tem = build_unc_object_type (gnu_template_type, tem,
-                                    create_concat_name (gnat_name, "XUT"));
+                                    create_concat_name (gnat_name, "XUT"),
+                                    debug_info_p);
        shift_unc_components_for_thin_pointers (tem);
 
        SET_TYPE_UNCONSTRAINED_ARRAY (tem, gnu_type);
index b7f6639..b7a3200 100644 (file)
@@ -658,19 +658,20 @@ extern tree build_vms_descriptor32 (tree type, Mechanism_Type mech,
    and the GNAT node GNAT_SUBPROG.  */
 extern void build_function_stub (tree gnu_subprog, Entity_Id gnat_subprog);
 
-/* Build a type to be used to represent an aliased object whose nominal
-   type is an unconstrained array.  This consists of a RECORD_TYPE containing
-   a field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an
-   ARRAY_TYPE.  If ARRAY_TYPE is that of the unconstrained array, this
-   is used to represent an arbitrary unconstrained object.  Use NAME
-   as the name of the record.  */
+/* Build a type to be used to represent an aliased object whose nominal type
+   is an unconstrained array.  This consists of a RECORD_TYPE containing a
+   field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an ARRAY_TYPE.
+   If ARRAY_TYPE is that of an unconstrained array, this is used to represent
+   an arbitrary unconstrained object.  Use NAME as the name of the record.
+   DEBUG_INFO_P is true if we need to write debug information for the type.  */
 extern tree build_unc_object_type (tree template_type, tree object_type,
-                                   tree name);
+                                  tree name, bool debug_info_p);
 
 /* Same as build_unc_object_type, but taking a thin or fat pointer type
    instead of the template type.  */
 extern tree build_unc_object_type_from_ptr (tree thin_fat_ptr_type,
-                                           tree object_type, tree name);
+                                           tree object_type, tree name,
+                                           bool debug_info_p);
 
 /* Shift the component offsets within an unconstrained object TYPE to make it
    suitable for use as a designated type for thin pointers.  */
index 743a652..058aaa6 100644 (file)
@@ -1446,7 +1446,8 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
                  gnu_type
                    = build_unc_object_type_from_ptr (gnu_ptr_type,
                                                      gnu_actual_obj_type,
-                                                     get_identifier ("SIZE"));
+                                                     get_identifier ("SIZE"),
+                                                     false);
                }
 
              gnu_result = TYPE_SIZE (gnu_type);
@@ -5386,8 +5387,8 @@ gnat_to_gnu (Node_Id gnat_node)
                gnu_actual_obj_type
                  = build_unc_object_type_from_ptr (gnu_ptr_type,
                                                    gnu_actual_obj_type,
-                                                   get_identifier
-                                                   ("DEALLOC"));
+                                                   get_identifier ("DEALLOC"),
+                                                   false);
            }
          else
            gnu_actual_obj_type = gnu_obj_type;
index 7b403a7..8697baf 100644 (file)
@@ -3299,15 +3299,16 @@ build_function_stub (tree gnu_subprog, Entity_Id gnat_subprog)
   end_subprog_body (gnu_body);
 }
 \f
-/* Build a type to be used to represent an aliased object whose nominal
-   type is an unconstrained array.  This consists of a RECORD_TYPE containing
-   a field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an
-   ARRAY_TYPE.  If ARRAY_TYPE is that of the unconstrained array, this
-   is used to represent an arbitrary unconstrained object.  Use NAME
-   as the name of the record.  */
+/* Build a type to be used to represent an aliased object whose nominal type
+   is an unconstrained array.  This consists of a RECORD_TYPE containing a
+   field of TEMPLATE_TYPE and a field of OBJECT_TYPE, which is an ARRAY_TYPE.
+   If ARRAY_TYPE is that of an unconstrained array, this is used to represent
+   an arbitrary unconstrained object.  Use NAME as the name of the record.
+   DEBUG_INFO_P is true if we need to write debug information for the type.  */
 
 tree
-build_unc_object_type (tree template_type, tree object_type, tree name)
+build_unc_object_type (tree template_type, tree object_type, tree name,
+                      bool debug_info_p)
 {
   tree type = make_node (RECORD_TYPE);
   tree template_field = create_field_decl (get_identifier ("BOUNDS"),
@@ -3317,10 +3318,12 @@ build_unc_object_type (tree template_type, tree object_type, tree name)
 
   TYPE_NAME (type) = name;
   TYPE_CONTAINS_TEMPLATE_P (type) = 1;
-  finish_record_type (type,
-                     chainon (chainon (NULL_TREE, template_field),
-                              array_field),
-                     0, true);
+  TREE_CHAIN (template_field) = array_field;
+  finish_record_type (type, template_field, 0, true);
+
+  /* Declare it now since it will never be declared otherwise.  This is
+     necessary to ensure that its subtrees are properly marked.  */
+  create_type_decl (name, type, NULL, true, debug_info_p, Empty);
 
   return type;
 }
@@ -3329,7 +3332,7 @@ build_unc_object_type (tree template_type, tree object_type, tree name)
 
 tree
 build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type,
-                               tree name)
+                               tree name, bool debug_info_p)
 {
   tree template_type;
 
@@ -3339,7 +3342,9 @@ build_unc_object_type_from_ptr (tree thin_fat_ptr_type, tree object_type,
     = (TYPE_IS_FAT_POINTER_P (thin_fat_ptr_type)
        ? TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (thin_fat_ptr_type))))
        : TREE_TYPE (TYPE_FIELDS (TREE_TYPE (thin_fat_ptr_type))));
-  return build_unc_object_type (template_type, object_type, name);
+
+  return
+    build_unc_object_type (template_type, object_type, name, debug_info_p);
 }
 
 /* Shift the component offsets within an unconstrained object TYPE to make it
index 9b00c0d..2998605 100644 (file)
@@ -1984,7 +1984,7 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
     {
       tree storage_type
        = build_unc_object_type_from_ptr (result_type, type,
-                                         get_identifier ("ALLOC"));
+                                         get_identifier ("ALLOC"), false);
       tree template_type = TREE_TYPE (TYPE_FIELDS (storage_type));
       tree storage_ptr_type = build_pointer_type (storage_type);
       tree storage;
index 08da4e6..3435fdf 100644 (file)
@@ -1,3 +1,8 @@
+2010-05-08  Quentin Ochem  <ochem@adacore.com>
+
+       * gnat.dg/sizetype3.ad[sb]: New test.
+       * gnat.dg/sizetype3_pkg.ads: New helper.
+
 2010-05-07  Fabien ChĂȘne  <fabien.chene@gmail.com>
 
        PR c++/43951