[PATCH Fortran] bootstrap failure by wrong sizetype.
authorKai Tietz <kai.tietz@onevision.com>
Wed, 22 Aug 2007 13:06:22 +0000 (13:06 +0000)
committerKai Tietz <ktietz@gcc.gnu.org>
Wed, 22 Aug 2007 13:06:22 +0000 (15:06 +0200)
From-SVN: r127704

gcc/fortran/ChangeLog
gcc/fortran/f95-lang.c

index d26607ccbee66de6d288fe4ddff2247b92e6a66b..85e39038c8b478c4bd5640ecc8be21b809b46469 100644 (file)
@@ -1,3 +1,8 @@
+2007-08-22  Kai Tietz  <kai.tietz@onevision.com>
+
+       * f95-lang.c: (gfc_init_decl_processing): Choose sizetype by using
+       Pmode.
+
 2007-08-21  Paul Brook  <paul@codesourcery.com>
            Nathan Sidwell  <nathan@codesourcery.com>
            Mark Mitchell  <mark@codesourcery.com>
index cc660fb9e474f7017236df2286287b3aefe99b64..1e1b640537e880980b2c2be1d6d4b9a6cd43d040 100644 (file)
@@ -615,7 +615,15 @@ gfc_init_decl_processing (void)
      only use it for actual characters, not for INTEGER(1). Also, we
      want double_type_node to actually have double precision.  */
   build_common_tree_nodes (false, false);
-  set_sizetype (long_unsigned_type_node);
+  /* x86_64 minw32 has a sizetype of "unsigned long long", most other hosts
+     have a sizetype of "unsigned long". Therefore choose the correct size
+     in mostly target independent way.  */
+  if (TYPE_MODE (long_unsigned_type_node) == Pmode)
+    set_sizetype (long_unsigned_type_node);
+  else if (TYPE_MODE (long_long_unsigned_type_node) == Pmode)
+    set_sizetype (long_long_unsigned_type_node);
+  else
+    set_sizetype (long_unsigned_type_node);
   build_common_tree_nodes_2 (0);
   void_list_node = build_tree_list (NULL_TREE, void_type_node);