PR 78534, 84509 Fix libgfortran API for PAUSE statement
This patch changes the libgfortran API for the PAUSE statement. By passing a GFC_INTEGER_8 it handles -fdefault-integer-8, and for the character version passing the length as a size_t. Regtested on x86_64-pc-linux-gnu, committed as obvious. gcc/fortran/ChangeLog: 2018-02-22 Janne Blomqvist <jb@gcc.gnu.org> PR 78534 PR 84509 * trans-decl.c (gfc_build_builtin_function_decls): Pass gfc_int8_type node to pause_numeric, size_type_node to pause_string. * trans-stmt.c (gfc_trans_pause): Likewise. libgfortran/ChangeLog: 2018-02-22 Janne Blomqvist <jb@gcc.gnu.org> PR 78534 PR 84509 * runtime/pause.c (pause_numeric): Modify to take GFC_INTEGER_8 argument. (pause_string): Modify to take size_t character length argument. From-SVN: r257903
This commit is contained in:
parent
58730d1899
commit
6cc22cf4df
@ -1,3 +1,12 @@
|
||||
2018-02-22 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
PR 78534
|
||||
PR 84509
|
||||
* trans-decl.c (gfc_build_builtin_function_decls): Pass
|
||||
gfc_int8_type node to pause_numeric, size_type_node to
|
||||
pause_string.
|
||||
* trans-stmt.c (gfc_trans_pause): Likewise.
|
||||
|
||||
2018-02-22 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
* gfortran.texi: Update Coarray API description.
|
||||
|
@ -3499,7 +3499,7 @@ gfc_build_intrinsic_function_decls (void)
|
||||
void
|
||||
gfc_build_builtin_function_decls (void)
|
||||
{
|
||||
tree gfc_int4_type_node = gfc_get_int_type (4);
|
||||
tree gfc_int8_type_node = gfc_get_int_type (8);
|
||||
|
||||
gfor_fndecl_stop_numeric = gfc_build_library_function_decl (
|
||||
get_identifier (PREFIX("stop_numeric")),
|
||||
@ -3527,11 +3527,11 @@ gfc_build_builtin_function_decls (void)
|
||||
|
||||
gfor_fndecl_pause_numeric = gfc_build_library_function_decl (
|
||||
get_identifier (PREFIX("pause_numeric")),
|
||||
void_type_node, 1, gfc_int4_type_node);
|
||||
void_type_node, 1, gfc_int8_type_node);
|
||||
|
||||
gfor_fndecl_pause_string = gfc_build_library_function_decl_with_spec (
|
||||
get_identifier (PREFIX("pause_string")), ".R.",
|
||||
void_type_node, 2, pchar_type_node, gfc_int4_type_node);
|
||||
void_type_node, 2, pchar_type_node, size_type_node);
|
||||
|
||||
gfor_fndecl_runtime_error = gfc_build_library_function_decl_with_spec (
|
||||
get_identifier (PREFIX("runtime_error")), ".R",
|
||||
|
@ -578,7 +578,7 @@ gfc_trans_return (gfc_code * code)
|
||||
tree
|
||||
gfc_trans_pause (gfc_code * code)
|
||||
{
|
||||
tree gfc_int4_type_node = gfc_get_int_type (4);
|
||||
tree gfc_int8_type_node = gfc_get_int_type (8);
|
||||
gfc_se se;
|
||||
tree tmp;
|
||||
|
||||
@ -589,7 +589,7 @@ gfc_trans_pause (gfc_code * code)
|
||||
|
||||
if (code->expr1 == NULL)
|
||||
{
|
||||
tmp = build_int_cst (gfc_int4_type_node, 0);
|
||||
tmp = build_int_cst (size_type_node, 0);
|
||||
tmp = build_call_expr_loc (input_location,
|
||||
gfor_fndecl_pause_string, 2,
|
||||
build_int_cst (pchar_type_node, 0), tmp);
|
||||
@ -599,14 +599,15 @@ gfc_trans_pause (gfc_code * code)
|
||||
gfc_conv_expr (&se, code->expr1);
|
||||
tmp = build_call_expr_loc (input_location,
|
||||
gfor_fndecl_pause_numeric, 1,
|
||||
fold_convert (gfc_int4_type_node, se.expr));
|
||||
fold_convert (gfc_int8_type_node, se.expr));
|
||||
}
|
||||
else
|
||||
{
|
||||
gfc_conv_expr_reference (&se, code->expr1);
|
||||
tmp = build_call_expr_loc (input_location,
|
||||
gfor_fndecl_pause_string, 2,
|
||||
se.expr, se.string_length);
|
||||
se.expr, fold_convert (size_type_node,
|
||||
se.string_length));
|
||||
}
|
||||
|
||||
gfc_add_expr_to_block (&se.pre, tmp);
|
||||
|
@ -1,3 +1,11 @@
|
||||
2018-02-22 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
PR 78534
|
||||
PR 84509
|
||||
* runtime/pause.c (pause_numeric): Modify to take GFC_INTEGER_8
|
||||
argument.
|
||||
(pause_string): Modify to take size_t character length argument.
|
||||
|
||||
2018-02-22 Janne Blomqvist <jb@gcc.gnu.org>
|
||||
|
||||
* libgfortran.h (stop_string): Use size_t for character length.
|
||||
|
@ -46,23 +46,23 @@ do_pause (void)
|
||||
|
||||
/* A numeric PAUSE statement. */
|
||||
|
||||
extern void pause_numeric (GFC_INTEGER_4);
|
||||
extern void pause_numeric (GFC_INTEGER_8);
|
||||
export_proto(pause_numeric);
|
||||
|
||||
void
|
||||
pause_numeric (GFC_INTEGER_4 code)
|
||||
pause_numeric (GFC_INTEGER_8 code)
|
||||
{
|
||||
st_printf ("PAUSE %d\n", (int) code);
|
||||
st_printf ("PAUSE %ld\n", (long) code);
|
||||
do_pause ();
|
||||
}
|
||||
|
||||
/* A character string or blank PAUSE statement. */
|
||||
|
||||
extern void pause_string (char *string, GFC_INTEGER_4 len);
|
||||
extern void pause_string (char *string, size_t len);
|
||||
export_proto(pause_string);
|
||||
|
||||
void
|
||||
pause_string (char *string, GFC_INTEGER_4 len)
|
||||
pause_string (char *string, size_t len)
|
||||
{
|
||||
estr_write ("PAUSE ");
|
||||
ssize_t w = write (STDERR_FILENO, string, len);
|
||||
|
Loading…
Reference in New Issue
Block a user