As discussed on gcc@, this removes the internal_reference_types machinery, 
which is used only by the Ada compiler for a reason probably long obsolete.

Tested on x86_64-suse-linux, applied on the mainline.


2016-04-27  Eric Botcazou  <ebotca...@adacore.com>

        PR ada/70759
        * stor-layout.h (internal_reference_types): Delete.
        * stor-layout.c (reference_types_internal): Likewise.
        (internal_reference_types): Likewise.
        (layout_type) <REFERENCE_TYPE>: Adjust.


2016-04-27  Eric Botcazou  <ebotca...@adacore.com>

        * gcc-interface/misc.c (gnat_init): Do not call
        internal_reference_types.


-- 
Eric Botcazou
Index: ada/gcc-interface/misc.c
===================================================================
--- ada/gcc-interface/misc.c	(revision 235394)
+++ ada/gcc-interface/misc.c	(working copy)
@@ -369,9 +369,6 @@ gnat_init (void)
   sbitsize_one_node = sbitsize_int (1);
   sbitsize_unit_node = sbitsize_int (BITS_PER_UNIT);
 
-  /* Show that REFERENCE_TYPEs are internal and should be Pmode.  */
-  internal_reference_types ();
-
   /* Register our internal error function.  */
   global_dc->internal_error = &internal_error_function;
 
Index: stor-layout.c
===================================================================
--- stor-layout.c	(revision 235394)
+++ stor-layout.c	(working copy)
@@ -49,11 +49,6 @@ tree sizetype_tab[(int) stk_type_kind_la
    The value is measured in bits.  */
 unsigned int maximum_field_alignment = TARGET_DEFAULT_PACK_STRUCT * BITS_PER_UNIT;
 
-/* Nonzero if all REFERENCE_TYPEs are internal and hence should be allocated
-   in the address spaces' address_mode, not pointer_mode.   Set only by
-   internal_reference_types called only by a front end.  */
-static int reference_types_internal = 0;
-
 static tree self_referential_size (tree);
 static void finalize_record_size (record_layout_info);
 static void finalize_type_size (tree);
@@ -62,15 +57,6 @@ static int excess_unit_span (HOST_WIDE_I
 			     HOST_WIDE_INT, tree);
 extern void debug_rli (record_layout_info);
 
-/* Show that REFERENCE_TYPES are internal and should use address_mode.
-   Called only by front end.  */
-
-void
-internal_reference_types (void)
-{
-  reference_types_internal = 1;
-}
-
 /* Given a size SIZE that may not be a constant, return a SAVE_EXPR
    to serve as the actual size-expression for a type or decl.  */
 
@@ -2245,12 +2231,6 @@ layout_type (tree type)
     case REFERENCE_TYPE:
       {
 	machine_mode mode = TYPE_MODE (type);
-	if (TREE_CODE (type) == REFERENCE_TYPE && reference_types_internal)
-	  {
-	    addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (type));
-	    mode = targetm.addr_space.address_mode (as);
-	  }
-
 	TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (mode));
 	TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (mode));
 	TYPE_UNSIGNED (type) = 1;
Index: stor-layout.h
===================================================================
--- stor-layout.h	(revision 235394)
+++ stor-layout.h	(working copy)
@@ -22,7 +22,6 @@ along with GCC; see the file COPYING3.
 
 extern void set_min_and_max_values_for_integral_type (tree, int, signop);
 extern void fixup_signed_type (tree);
-extern void internal_reference_types (void);
 extern unsigned int update_alignment_for_field (record_layout_info, tree,
                                                 unsigned int);
 extern record_layout_info start_record_layout (tree);

Reply via email to