OSDN Git Service

* builtin-types.def (BT_FN_PTR_PTR_SIZE): New type.
[pf3gnuchains/gcc-fork.git] / gcc / fortran / trans-decl.c
index 0a9c0d7..8ea25fc 100644 (file)
@@ -7,7 +7,7 @@ This file is part of GCC.
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
 
 GCC is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
+Software Foundation; either version 3, or (at your option) any later
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
 version.
 
 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
@@ -16,9 +16,8 @@ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
 for more details.
 
 You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING.  If not, write to the Free
-Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301, USA.  */
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
 
 /* trans-decl.c -- Handling of backend function and variable decls, etc */
 
 
 /* trans-decl.c -- Handling of backend function and variable decls, etc */
 
@@ -74,10 +73,6 @@ tree gfc_static_ctors;
 
 /* Function declarations for builtin library functions.  */
 
 
 /* Function declarations for builtin library functions.  */
 
-tree gfor_fndecl_internal_realloc;
-tree gfor_fndecl_allocate;
-tree gfor_fndecl_allocate_array;
-tree gfor_fndecl_deallocate;
 tree gfor_fndecl_pause_numeric;
 tree gfor_fndecl_pause_string;
 tree gfor_fndecl_stop_numeric;
 tree gfor_fndecl_pause_numeric;
 tree gfor_fndecl_pause_string;
 tree gfor_fndecl_stop_numeric;
@@ -126,6 +121,7 @@ tree gfor_fndecl_string_index;
 tree gfor_fndecl_string_scan;
 tree gfor_fndecl_string_verify;
 tree gfor_fndecl_string_trim;
 tree gfor_fndecl_string_scan;
 tree gfor_fndecl_string_verify;
 tree gfor_fndecl_string_trim;
+tree gfor_fndecl_string_minmax;
 tree gfor_fndecl_adjustl;
 tree gfor_fndecl_adjustr;
 
 tree gfor_fndecl_adjustl;
 tree gfor_fndecl_adjustr;
 
@@ -1109,9 +1105,14 @@ gfc_get_extern_function_decl (gfc_symbol * sym)
            isym->resolve.f2 (&e, &argexpr, NULL);
          else
            {
            isym->resolve.f2 (&e, &argexpr, NULL);
          else
            {
-             /* All specific intrinsics take less than 4 arguments.  */
-             gcc_assert (isym->formal->next->next->next == NULL);
-             isym->resolve.f3 (&e, &argexpr, NULL, NULL);
+             if (isym->formal->next->next->next == NULL)
+               isym->resolve.f3 (&e, &argexpr, NULL, NULL);
+             else
+               {
+                 /* All specific intrinsics take less than 5 arguments.  */
+                 gcc_assert (isym->formal->next->next->next->next == NULL);
+                 isym->resolve.f4 (&e, &argexpr, NULL, NULL, NULL);
+               }
            }
        }
 
            }
        }
 
@@ -1453,25 +1454,8 @@ create_function_arglist (gfc_symbol * sym)
          if (!f->sym->ts.cl->length)
            {
              TREE_USED (length) = 1;
          if (!f->sym->ts.cl->length)
            {
              TREE_USED (length) = 1;
-             if (!f->sym->ts.cl->backend_decl)
-               f->sym->ts.cl->backend_decl = length;
-             else
-               {
-                 /* there is already another variable using this
-                    gfc_charlen node, build a new one for this variable
-                    and chain it into the list of gfc_charlens.
-                    This happens for e.g. in the case
-                    CHARACTER(*)::c1,c2
-                    since CHARACTER declarations on the same line share
-                    the same gfc_charlen node.  */
-                 gfc_charlen *cl;
-             
-                 cl = gfc_get_charlen ();
-                 cl->backend_decl = length;
-                 cl->next = f->sym->ts.cl->next;
-                 f->sym->ts.cl->next = cl;
-                 f->sym->ts.cl = cl;
-               }
+             gcc_assert (!f->sym->ts.cl->backend_decl);
+             f->sym->ts.cl->backend_decl = length;
            }
 
          hidden_typelist = TREE_CHAIN (hidden_typelist);
            }
 
          hidden_typelist = TREE_CHAIN (hidden_typelist);
@@ -1995,13 +1979,11 @@ gfc_build_intrinsic_function_decls (void)
   tree gfc_complex8_type_node = gfc_get_complex_type (8);
   tree gfc_complex10_type_node = gfc_get_complex_type (10);
   tree gfc_complex16_type_node = gfc_get_complex_type (16);
   tree gfc_complex8_type_node = gfc_get_complex_type (8);
   tree gfc_complex10_type_node = gfc_get_complex_type (10);
   tree gfc_complex16_type_node = gfc_get_complex_type (16);
-  tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
 
   /* String functions.  */
   gfor_fndecl_compare_string =
     gfc_build_library_function_decl (get_identifier (PREFIX("compare_string")),
 
   /* String functions.  */
   gfor_fndecl_compare_string =
     gfc_build_library_function_decl (get_identifier (PREFIX("compare_string")),
-                                    gfc_int4_type_node,
-                                    4,
+                                    integer_type_node, 4,
                                     gfc_charlen_type_node, pchar_type_node,
                                     gfc_charlen_type_node, pchar_type_node);
 
                                     gfc_charlen_type_node, pchar_type_node,
                                     gfc_charlen_type_node, pchar_type_node);
 
@@ -2049,13 +2031,20 @@ gfc_build_intrinsic_function_decls (void)
                                      gfc_charlen_type_node,
                                      pchar_type_node);
 
                                      gfc_charlen_type_node,
                                      pchar_type_node);
 
+  gfor_fndecl_string_minmax = 
+    gfc_build_library_function_decl (get_identifier (PREFIX("string_minmax")),
+                                     void_type_node, -4,
+                                     build_pointer_type (gfc_charlen_type_node),
+                                     ppvoid_type_node, integer_type_node,
+                                     integer_type_node);
+
   gfor_fndecl_ttynam =
     gfc_build_library_function_decl (get_identifier (PREFIX("ttynam")),
                                      void_type_node,
                                      3,
                                      pchar_type_node,
                                      gfc_charlen_type_node,
   gfor_fndecl_ttynam =
     gfc_build_library_function_decl (get_identifier (PREFIX("ttynam")),
                                      void_type_node,
                                      3,
                                      pchar_type_node,
                                      gfc_charlen_type_node,
-                                     gfc_c_int_type_node);
+                                     integer_type_node);
 
   gfor_fndecl_fdate =
     gfc_build_library_function_decl (get_identifier (PREFIX("fdate")),
 
   gfor_fndecl_fdate =
     gfc_build_library_function_decl (get_identifier (PREFIX("fdate")),
@@ -2215,7 +2204,7 @@ gfc_build_intrinsic_function_decls (void)
 
   /* BLAS functions.  */
   {
 
   /* BLAS functions.  */
   {
-    tree pint = build_pointer_type (gfc_c_int_type_node);
+    tree pint = build_pointer_type (integer_type_node);
     tree ps = build_pointer_type (gfc_get_real_type (gfc_default_real_kind));
     tree pd = build_pointer_type (gfc_get_real_type (gfc_default_double_kind));
     tree pc = build_pointer_type (gfc_get_complex_type (gfc_default_real_kind));
     tree ps = build_pointer_type (gfc_get_real_type (gfc_default_real_kind));
     tree pd = build_pointer_type (gfc_get_real_type (gfc_default_double_kind));
     tree pc = build_pointer_type (gfc_get_complex_type (gfc_default_real_kind));
@@ -2228,32 +2217,32 @@ gfc_build_intrinsic_function_decls (void)
                                                           : "sgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, ps, ps, pint,
                                                           : "sgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, ps, ps, pint,
-                          ps, pint, ps, ps, pint, gfc_c_int_type_node,
-                          gfc_c_int_type_node);
+                          ps, pint, ps, ps, pint, integer_type_node,
+                          integer_type_node);
     gfor_fndecl_dgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "dgemm_"
                                                           : "dgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pd, pd, pint,
     gfor_fndecl_dgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "dgemm_"
                                                           : "dgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pd, pd, pint,
-                          pd, pint, pd, pd, pint, gfc_c_int_type_node,
-                          gfc_c_int_type_node);
+                          pd, pint, pd, pd, pint, integer_type_node,
+                          integer_type_node);
     gfor_fndecl_cgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "cgemm_"
                                                           : "cgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pc, pc, pint,
     gfor_fndecl_cgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "cgemm_"
                                                           : "cgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pc, pc, pint,
-                          pc, pint, pc, pc, pint, gfc_c_int_type_node,
-                          gfc_c_int_type_node);
+                          pc, pint, pc, pc, pint, integer_type_node,
+                          integer_type_node);
     gfor_fndecl_zgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "zgemm_"
                                                           : "zgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pz, pz, pint,
     gfor_fndecl_zgemm = gfc_build_library_function_decl
                          (get_identifier
                             (gfc_option.flag_underscoring ? "zgemm_"
                                                           : "zgemm"),
                           void_type_node, 15, pchar_type_node,
                           pchar_type_node, pint, pint, pint, pz, pz, pint,
-                          pz, pint, pz, pz, pint, gfc_c_int_type_node,
-                          gfc_c_int_type_node);
+                          pz, pint, pz, pz, pint, integer_type_node,
+                          integer_type_node);
   }
 
   /* Other functions.  */
   }
 
   /* Other functions.  */
@@ -2279,38 +2268,11 @@ gfc_build_intrinsic_function_decls (void)
 void
 gfc_build_builtin_function_decls (void)
 {
 void
 gfc_build_builtin_function_decls (void)
 {
-  tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
   tree gfc_int4_type_node = gfc_get_int_type (4);
   tree gfc_int4_type_node = gfc_get_int_type (4);
-  tree gfc_logical4_type_node = gfc_get_logical_type (4);
-  tree gfc_pint4_type_node = build_pointer_type (gfc_int4_type_node);
-
-  gfor_fndecl_internal_realloc =
-    gfc_build_library_function_decl (get_identifier
-                                    (PREFIX("internal_realloc")),
-                                    pvoid_type_node, 2, pvoid_type_node,
-                                    gfc_array_index_type);
-
-  gfor_fndecl_allocate =
-    gfc_build_library_function_decl (get_identifier (PREFIX("allocate")),
-                                    pvoid_type_node, 2,
-                                    gfc_array_index_type, gfc_pint4_type_node);
-  DECL_IS_MALLOC (gfor_fndecl_allocate) = 1;
-
-  gfor_fndecl_allocate_array =
-    gfc_build_library_function_decl (get_identifier (PREFIX("allocate_array")),
-                                    pvoid_type_node, 3, pvoid_type_node,
-                                    gfc_array_index_type, gfc_pint4_type_node);
-  DECL_IS_MALLOC (gfor_fndecl_allocate_array) = 1;
-
-  gfor_fndecl_deallocate =
-    gfc_build_library_function_decl (get_identifier (PREFIX("deallocate")),
-                                    void_type_node, 2, pvoid_type_node,
-                                    gfc_pint4_type_node);
 
   gfor_fndecl_stop_numeric =
     gfc_build_library_function_decl (get_identifier (PREFIX("stop_numeric")),
                                     void_type_node, 1, gfc_int4_type_node);
 
   gfor_fndecl_stop_numeric =
     gfc_build_library_function_decl (get_identifier (PREFIX("stop_numeric")),
                                     void_type_node, 1, gfc_int4_type_node);
-
   /* Stop doesn't return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_stop_numeric) = 1;
 
   /* Stop doesn't return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_stop_numeric) = 1;
 
@@ -2332,17 +2294,17 @@ gfc_build_builtin_function_decls (void)
 
   gfor_fndecl_select_string =
     gfc_build_library_function_decl (get_identifier (PREFIX("select_string")),
 
   gfor_fndecl_select_string =
     gfc_build_library_function_decl (get_identifier (PREFIX("select_string")),
-                                     gfc_c_int_type_node, 0);
+                                     integer_type_node, 0);
 
   gfor_fndecl_runtime_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error")),
 
   gfor_fndecl_runtime_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error")),
-                                    void_type_node, 1, pchar_type_node);
+                                    void_type_node, -1, pchar_type_node);
   /* The runtime_error function does not return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_runtime_error) = 1;
 
   gfor_fndecl_runtime_error_at =
     gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error_at")),
   /* The runtime_error function does not return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_runtime_error) = 1;
 
   gfor_fndecl_runtime_error_at =
     gfc_build_library_function_decl (get_identifier (PREFIX("runtime_error_at")),
-                                    void_type_node, 2, pchar_type_node,
+                                    void_type_node, -2, pchar_type_node,
                                     pchar_type_node);
   /* The runtime_error_at function does not return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_runtime_error_at) = 1;
                                     pchar_type_node);
   /* The runtime_error_at function does not return.  */
   TREE_THIS_VOLATILE (gfor_fndecl_runtime_error_at) = 1;
@@ -2350,7 +2312,7 @@ gfc_build_builtin_function_decls (void)
   gfor_fndecl_generate_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("generate_error")),
                                     void_type_node, 3, pvoid_type_node,
   gfor_fndecl_generate_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("generate_error")),
                                     void_type_node, 3, pvoid_type_node,
-                                     gfc_c_int_type_node, pchar_type_node);
+                                     integer_type_node, pchar_type_node);
 
   gfor_fndecl_os_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("os_error")),
 
   gfor_fndecl_os_error =
     gfc_build_library_function_decl (get_identifier (PREFIX("os_error")),
@@ -2360,25 +2322,25 @@ gfc_build_builtin_function_decls (void)
 
   gfor_fndecl_set_fpe =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_fpe")),
 
   gfor_fndecl_set_fpe =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_fpe")),
-                                   void_type_node, 1, gfc_c_int_type_node);
+                                   void_type_node, 1, integer_type_node);
 
   /* Keep the array dimension in sync with the call, later in this file.  */
   gfor_fndecl_set_options =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_options")),
 
   /* Keep the array dimension in sync with the call, later in this file.  */
   gfor_fndecl_set_options =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_options")),
-                                   void_type_node, 2, gfc_c_int_type_node,
+                                   void_type_node, 2, integer_type_node,
                                    pvoid_type_node);
 
   gfor_fndecl_set_convert =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_convert")),
                                    pvoid_type_node);
 
   gfor_fndecl_set_convert =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_convert")),
-                                    void_type_node, 1, gfc_c_int_type_node);
+                                    void_type_node, 1, integer_type_node);
 
   gfor_fndecl_set_record_marker =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_record_marker")),
 
   gfor_fndecl_set_record_marker =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_record_marker")),
-                                    void_type_node, 1, gfc_c_int_type_node);
+                                    void_type_node, 1, integer_type_node);
 
   gfor_fndecl_set_max_subrecord_length =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_max_subrecord_length")),
 
   gfor_fndecl_set_max_subrecord_length =
     gfc_build_library_function_decl (get_identifier (PREFIX("set_max_subrecord_length")),
-                                    void_type_node, 1, gfc_c_int_type_node);
+                                    void_type_node, 1, integer_type_node);
 
   gfor_fndecl_in_pack = gfc_build_library_function_decl (
         get_identifier (PREFIX("internal_pack")),
 
   gfor_fndecl_in_pack = gfc_build_library_function_decl (
         get_identifier (PREFIX("internal_pack")),
@@ -2391,9 +2353,7 @@ gfc_build_builtin_function_decls (void)
   gfor_fndecl_associated =
     gfc_build_library_function_decl (
                                      get_identifier (PREFIX("associated")),
   gfor_fndecl_associated =
     gfc_build_library_function_decl (
                                      get_identifier (PREFIX("associated")),
-                                     gfc_logical4_type_node,
-                                     2,
-                                     ppvoid_type_node,
+                                     integer_type_node, 2, ppvoid_type_node,
                                      ppvoid_type_node);
 
   gfc_build_intrinsic_function_decls ();
                                      ppvoid_type_node);
 
   gfc_build_intrinsic_function_decls ();
@@ -3000,17 +2960,17 @@ generate_local_decl (gfc_symbol * sym)
       else if (warn_unused_variable
               && sym->attr.dummy
               && sym->attr.intent == INTENT_OUT)
       else if (warn_unused_variable
               && sym->attr.dummy
               && sym->attr.intent == INTENT_OUT)
-       gfc_warning ("dummy argument '%s' at %L was declared INTENT(OUT) but was not set",
+       gfc_warning ("Dummy argument '%s' at %L was declared INTENT(OUT) but was not set",
                     sym->name, &sym->declared_at);
       /* Specific warning for unused dummy arguments. */
       else if (warn_unused_variable && sym->attr.dummy)
                     sym->name, &sym->declared_at);
       /* Specific warning for unused dummy arguments. */
       else if (warn_unused_variable && sym->attr.dummy)
-       gfc_warning ("unused dummy argument '%s' at %L", sym->name,
+       gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
                     &sym->declared_at);
       /* Warn for unused variables, but not if they're inside a common
         block or are use-associated.  */
       else if (warn_unused_variable
               && !(sym->attr.in_common || sym->attr.use_assoc))
                     &sym->declared_at);
       /* Warn for unused variables, but not if they're inside a common
         block or are use-associated.  */
       else if (warn_unused_variable
               && !(sym->attr.in_common || sym->attr.use_assoc))
-       gfc_warning ("unused variable '%s' declared at %L", sym->name,
+       gfc_warning ("Unused variable '%s' declared at %L", sym->name,
                     &sym->declared_at);
       /* For variable length CHARACTER parameters, the PARM_DECL already
         references the length variable, so force gfc_get_symbol_decl
                     &sym->declared_at);
       /* For variable length CHARACTER parameters, the PARM_DECL already
         references the length variable, so force gfc_get_symbol_decl
@@ -3033,10 +2993,10 @@ generate_local_decl (gfc_symbol * sym)
     }
   else if (sym->attr.flavor == FL_PARAMETER)
     {
     }
   else if (sym->attr.flavor == FL_PARAMETER)
     {
-      if (warn_unused_variable 
+      if (warn_unused_parameter
            && !sym->attr.referenced
            && !sym->attr.use_assoc)
            && !sym->attr.referenced
            && !sym->attr.use_assoc)
-       gfc_warning ("unused parameter '%s' declared at %L", sym->name,
+       gfc_warning ("Unused parameter '%s' declared at %L", sym->name,
                     &sym->declared_at);
     }
 
                     &sym->declared_at);
     }
 
@@ -3050,7 +3010,7 @@ generate_local_decl (gfc_symbol * sym)
       if (sym->attr.value == 1 && sym->backend_decl != NULL
          && sym->ts.type == BT_CHARACTER && sym->ts.is_c_interop
          && sym->ns->proc_name != NULL && sym->ns->proc_name->attr.is_bind_c)
       if (sym->attr.value == 1 && sym->backend_decl != NULL
          && sym->ts.type == BT_CHARACTER && sym->ts.is_c_interop
          && sym->ns->proc_name != NULL && sym->ns->proc_name->attr.is_bind_c)
-       TREE_TYPE (sym->backend_decl) = unsigned_char_type_node;
+       gfc_conv_scalar_char_value (sym, NULL, NULL);
     }
 
   /* Make sure we convert the types of the derived types from iso_c_binding
     }
 
   /* Make sure we convert the types of the derived types from iso_c_binding
@@ -3186,7 +3146,6 @@ gfc_generate_function_code (gfc_namespace * ns)
      runtime library Fortran language standard parameters.  */
   if (sym->attr.is_main_program)
     {
      runtime library Fortran language standard parameters.  */
   if (sym->attr.is_main_program)
     {
-      tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
       tree array_type, array, var;
 
       /* Passing a new option to the library requires four modifications:
       tree array_type, array, var;
 
       /* Passing a new option to the library requires four modifications:
@@ -3196,28 +3155,28 @@ gfc_generate_function_code (gfc_namespace * ns)
             gfor_fndecl_set_options
           + modify the library (runtime/compile_options.c)!  */
       array = tree_cons (NULL_TREE,
             gfor_fndecl_set_options
           + modify the library (runtime/compile_options.c)!  */
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        gfc_option.warn_std), NULL_TREE);
       array = tree_cons (NULL_TREE,
                                        gfc_option.warn_std), NULL_TREE);
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        gfc_option.allow_std), array);
       array = tree_cons (NULL_TREE,
                                        gfc_option.allow_std), array);
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node, pedantic), array);
+                        build_int_cst (integer_type_node, pedantic), array);
       array = tree_cons (NULL_TREE,
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        gfc_option.flag_dump_core), array);
       array = tree_cons (NULL_TREE,
                                        gfc_option.flag_dump_core), array);
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        gfc_option.flag_backtrace), array);
       array = tree_cons (NULL_TREE,
                                        gfc_option.flag_backtrace), array);
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        gfc_option.flag_sign_zero), array);
 
       array = tree_cons (NULL_TREE,
                                        gfc_option.flag_sign_zero), array);
 
       array = tree_cons (NULL_TREE,
-                        build_int_cst (gfc_c_int_type_node,
+                        build_int_cst (integer_type_node,
                                        flag_bounds_check), array);
 
                                        flag_bounds_check), array);
 
-      array_type = build_array_type (gfc_c_int_type_node,
+      array_type = build_array_type (integer_type_node,
                                     build_index_type (build_int_cst (NULL_TREE,
                                                                      6)));
       array = build_constructor_from_list (array_type, nreverse (array));
                                     build_index_type (build_int_cst (NULL_TREE,
                                                                      6)));
       array = build_constructor_from_list (array_type, nreverse (array));
@@ -3235,7 +3194,7 @@ gfc_generate_function_code (gfc_namespace * ns)
       var = gfc_build_addr_expr (pvoid_type_node, var);
 
       tmp = build_call_expr (gfor_fndecl_set_options, 2,
       var = gfc_build_addr_expr (pvoid_type_node, var);
 
       tmp = build_call_expr (gfor_fndecl_set_options, 2,
-                            build_int_cst (gfc_c_int_type_node, 7), var);
+                            build_int_cst (integer_type_node, 7), var);
       gfc_add_expr_to_block (&body, tmp);
     }
 
       gfc_add_expr_to_block (&body, tmp);
     }
 
@@ -3244,9 +3203,8 @@ gfc_generate_function_code (gfc_namespace * ns)
      needed.  */
   if (sym->attr.is_main_program && gfc_option.fpe != 0)
     {
      needed.  */
   if (sym->attr.is_main_program && gfc_option.fpe != 0)
     {
-      tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
       tmp = build_call_expr (gfor_fndecl_set_fpe, 1,
       tmp = build_call_expr (gfor_fndecl_set_fpe, 1,
-                            build_int_cst (gfc_c_int_type_node,
+                            build_int_cst (integer_type_node,
                                            gfc_option.fpe));
       gfc_add_expr_to_block (&body, tmp);
     }
                                            gfc_option.fpe));
       gfc_add_expr_to_block (&body, tmp);
     }
@@ -3256,9 +3214,8 @@ gfc_generate_function_code (gfc_namespace * ns)
 
   if (sym->attr.is_main_program && gfc_option.convert != CONVERT_NATIVE)
     {
 
   if (sym->attr.is_main_program && gfc_option.convert != CONVERT_NATIVE)
     {
-      tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
       tmp = build_call_expr (gfor_fndecl_set_convert, 1,
       tmp = build_call_expr (gfor_fndecl_set_convert, 1,
-                            build_int_cst (gfc_c_int_type_node,
+                            build_int_cst (integer_type_node,
                                            gfc_option.convert));
       gfc_add_expr_to_block (&body, tmp);
     }
                                            gfc_option.convert));
       gfc_add_expr_to_block (&body, tmp);
     }
@@ -3268,21 +3225,17 @@ gfc_generate_function_code (gfc_namespace * ns)
 
   if (sym->attr.is_main_program && gfc_option.record_marker != 0)
     {
 
   if (sym->attr.is_main_program && gfc_option.record_marker != 0)
     {
-      tree gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
       tmp = build_call_expr (gfor_fndecl_set_record_marker, 1,
       tmp = build_call_expr (gfor_fndecl_set_record_marker, 1,
-                            build_int_cst (gfc_c_int_type_node,
+                            build_int_cst (integer_type_node,
                                            gfc_option.record_marker));
       gfc_add_expr_to_block (&body, tmp);
     }
 
   if (sym->attr.is_main_program && gfc_option.max_subrecord_length != 0)
     {
                                            gfc_option.record_marker));
       gfc_add_expr_to_block (&body, tmp);
     }
 
   if (sym->attr.is_main_program && gfc_option.max_subrecord_length != 0)
     {
-      tree gfc_c_int_type_node;
-
-      gfc_c_int_type_node = gfc_get_int_type (gfc_c_int_kind);
       tmp = build_call_expr (gfor_fndecl_set_max_subrecord_length,
                             1,
       tmp = build_call_expr (gfor_fndecl_set_max_subrecord_length,
                             1,
-                            build_int_cst (gfc_c_int_type_node,
+                            build_int_cst (integer_type_node,
                                            gfc_option.max_subrecord_length));
       gfc_add_expr_to_block (&body, tmp);
     }
                                            gfc_option.max_subrecord_length));
       gfc_add_expr_to_block (&body, tmp);
     }