[PATCH Fortran] bootstrap failure by wrong sizetype.
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Aug 2007 13:06:22 +0000 (13:06 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Aug 2007 13:06:22 +0000 (13:06 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127704 138bc75d-0d04-0410-961f-82ee72b054a4

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

index d26607c..85e3903 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 cc660fb..1e1b640 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);