Fix size_type_node and sizetype in Fortran frontend
authorJanne Blomqvist <jb@gcc.gnu.org>
Sat, 20 Nov 2010 13:55:14 +0000 (15:55 +0200)
committerJanne Blomqvist <jb@gcc.gnu.org>
Sat, 20 Nov 2010 13:55:14 +0000 (15:55 +0200)
From-SVN: r166976

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

index 0961df3c25afb53e0230e9d95a1e05a29f67fe5c..69312db9fdb9ffd52d9371fbbd720ccca64d5111 100644 (file)
@@ -1,3 +1,10 @@
+2010-11-20  Janne Blomqvist  <jb@gcc.gnu.org>
+
+       * f95-lang.c (gfc_init_decl_processing): Set size_type_node as
+       unsigned int of pointer size and set sizetype based on that.
+       * trans-types.c (gfc_init_types): Don't set size_type_node to an
+       unsigned type.
+
 2010-11-17  Joseph Myers  <joseph@codesourcery.com>
 
        * f95-lang.c (gfc_be_parse_file): Take no arguments.
index 3ed500b8587fa89dc464fb7cf43ba7058d101c49..a3ac86032c660f029809f5365eb96e16c0ace19f 100644 (file)
@@ -582,15 +582,10 @@ 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);
-  /* x86_64 mingw32 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) == ptr_mode)
-    set_sizetype (long_unsigned_type_node);
-  else if (TYPE_MODE (long_long_unsigned_type_node) == ptr_mode)
-    set_sizetype (long_long_unsigned_type_node);
-  else
-    set_sizetype (long_unsigned_type_node);
+
+  size_type_node = gfc_build_uint_type (POINTER_SIZE);
+  set_sizetype (size_type_node);
+
   build_common_tree_nodes_2 (0);
   void_list_node = build_tree_list (NULL_TREE, void_type_node);
 
index 0571bd1e742a653a1a422bb81c4622843cb5ae54..66dd99e3c4fc598298b6bdb5b27abf4de8103fec 100644 (file)
@@ -919,8 +919,6 @@ gfc_init_types (void)
   gfc_max_array_element_size
     = build_int_cst_wide (long_unsigned_type_node, lo, hi);
 
-  size_type_node = gfc_array_index_type;
-
   boolean_type_node = gfc_get_logical_type (gfc_default_logical_kind);
   boolean_true_node = build_int_cst (boolean_type_node, 1);
   boolean_false_node = build_int_cst (boolean_type_node, 0);