]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: Fix generate_error library function fnspec
authorMartin Jambor <mjambor@suse.cz>
Mon, 6 Nov 2023 16:04:33 +0000 (17:04 +0100)
committerMartin Jambor <mjambor@suse.cz>
Mon, 6 Nov 2023 16:05:46 +0000 (17:05 +0100)
when developing an otherwise unrelated patch I've discovered that the
fnspec for the Fortran library function generate_error is wrong. It is
currently ". R . R " where the first R describes the first parameter
and means that it "is only read and does not escape."  The function
itself, however, with signature:

  bool
  generate_error_common (st_parameter_common *cmp, int family, const char *message)

contains the following:

  /* Report status back to the compiler.  */
  cmp->flags &= ~IOPARM_LIBRETURN_MASK;

which does not correspond to the fnspec and breaks testcase
gfortran.dg/large_unit_2.f90 when my patch is applied, since it tries
to re-use the flags from before the call.

This patch replaces the "R" with "W" which stands for "specifies that
the memory pointed to by the parameter does not escape."

gcc/fortran/ChangeLog:

2023-11-02  Martin Jambor  <mjambor@suse.cz>

* trans-decl.cc (gfc_build_builtin_function_decls): Fix fnspec of
generate_error.

gcc/fortran/trans-decl.cc

index a3f037bd07bcf058979be085a726df7daa138d18..b86cfec7d499a041f506e64658c316c3de989fdd 100644 (file)
@@ -3821,7 +3821,7 @@ gfc_build_builtin_function_decls (void)
        void_type_node, -2, pchar_type_node, pchar_type_node);
 
   gfor_fndecl_generate_error = gfc_build_library_function_decl_with_spec (
-       get_identifier (PREFIX("generate_error")), ". R . R ",
+       get_identifier (PREFIX("generate_error")), ". W . R ",
        void_type_node, 3, pvoid_type_node, integer_type_node,
        pchar_type_node);