]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
trans.c (gigi): Make the special IA-64 descriptor type a builtin type and give it...
authorEric Botcazou <ebotcazou@adacore.com>
Sun, 19 Apr 2009 13:02:14 +0000 (13:02 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sun, 19 Apr 2009 13:02:14 +0000 (13:02 +0000)
* gcc-interface/trans.c (gigi): Make the special IA-64 descriptor type
a builtin type and give it a name.

From-SVN: r146347

gcc/ada/ChangeLog
gcc/ada/gcc-interface/trans.c

index 9724bcd7c267efc5a580deed0522481a85c6925a..6d5ef8efd905a6687da5a3db09c425e222d9b549 100644 (file)
@@ -1,3 +1,8 @@
+2009-04-19  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (gigi): Make the special IA-64 descriptor type
+       a builtin type and give it a name.
+
 2009-04-17  Diego Novillo  <dnovillo@google.com>
 
        * gcc-interface/misc.c (gnat_expand_expr): Remove.
index 981b91310f965eaf5653a03141080c542d94e53a..83d32a68de2f6dbaf01729e8df1b3ab506e87d22 100644 (file)
@@ -544,21 +544,6 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
     = build_qualified_type (TREE_TYPE (raise_nodefer_decl),
                            TYPE_QUAL_VOLATILE);
 
-  long_long_float_type
-    = gnat_to_gnu_entity (Base_Type (standard_long_long_float), NULL_TREE, 0);
-
-  if (TREE_CODE (TREE_TYPE (long_long_float_type)) == INTEGER_TYPE)
-    {
-      /* In this case, the builtin floating point types are VAX float,
-        so make up a type for use.  */
-      longest_float_type_node = make_node (REAL_TYPE);
-      TYPE_PRECISION (longest_float_type_node) = LONG_DOUBLE_TYPE_SIZE;
-      layout_type (longest_float_type_node);
-      record_builtin_type ("longest float type", longest_float_type_node);
-    }
-  else
-    longest_float_type_node = TREE_TYPE (long_long_float_type);
-
   /* Build the special descriptor type and its null node if needed.  */
   if (TARGET_VTABLE_USES_DESCRIPTORS)
     {
@@ -577,10 +562,26 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
          null_list = tree_cons (field, null_node, null_list);
        }
 
-      finish_record_type (fdesc_type_node, nreverse (field_list), 0, false);
+      finish_record_type (fdesc_type_node, nreverse (field_list), 0, true);
+      record_builtin_type ("descriptor", fdesc_type_node);
       null_fdesc_node = gnat_build_constructor (fdesc_type_node, null_list);
     }
 
+  long_long_float_type
+    = gnat_to_gnu_entity (Base_Type (standard_long_long_float), NULL_TREE, 0);
+
+  if (TREE_CODE (TREE_TYPE (long_long_float_type)) == INTEGER_TYPE)
+    {
+      /* In this case, the builtin floating point types are VAX float,
+        so make up a type for use.  */
+      longest_float_type_node = make_node (REAL_TYPE);
+      TYPE_PRECISION (longest_float_type_node) = LONG_DOUBLE_TYPE_SIZE;
+      layout_type (longest_float_type_node);
+      record_builtin_type ("longest float type", longest_float_type_node);
+    }
+  else
+    longest_float_type_node = TREE_TYPE (long_long_float_type);
+
   /* Dummy objects to materialize "others" and "all others" in the exception
      tables.  These are exported by a-exexpr.adb, so see this unit for the
      types to use.  */
@@ -6316,7 +6317,7 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
       int needed_precision = precision * 2;
 
       if (code == MULT_EXPR && precision == 64)
-       { 
+       {
          tree int_64 = gnat_type_for_size (64, 0);
 
          return convert (gnu_type, build_call_2_expr (mulv64_decl,
@@ -6325,7 +6326,7 @@ build_binary_op_trapv (enum tree_code code, tree gnu_type, tree left,
        }
 
       else if (needed_precision <= BITS_PER_WORD
-              || (code == MULT_EXPR 
+              || (code == MULT_EXPR
                   && needed_precision <= LONG_LONG_TYPE_SIZE))
        {
          tree wide_type = gnat_type_for_size (needed_precision, 0);