On 22/05/2019 12:35, Janne Blomqvist wrote:
Thanks for the catch. Though for size_t you should use build_zero_cst (size_type_node). size_zero_node is a zero constant of type sizetype, which is not the same as size_type_node (size_t in C). Ok with that change.
So, integer_zero_node is compatible with integer_type_node, but size_zero_node is not (necessarily) compatible with size_type_node? Well, that's just asking for trouble. :-(
Just to confirm, is the attached what you mean? Thanks Andrew
Fix fortran size_type_node parameter passing. 2019-05-22 Andrew Stubbs <a...@codesourcery.com> gcc/fortran/ * trans-stmt.c (gfc_trans_critical): Use size_type_node for gfor_fndecl_caf_lock and gfor_fndecl_caf_unlock calls. (gfc_trans_allocate): Use size_type_node for gfor_fndecl_caf_sync_all call. diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c index 5fa182bf05a..7c365634085 100644 --- a/gcc/fortran/trans-stmt.c +++ b/gcc/fortran/trans-stmt.c @@ -1576,12 +1576,13 @@ gfc_trans_critical (gfc_code *code) if (flag_coarray == GFC_FCOARRAY_LIB) { + tree zero_size = build_zero_cst (size_type_node); token = gfc_get_symbol_decl (code->resolved_sym); token = GFC_TYPE_ARRAY_CAF_TOKEN (TREE_TYPE (token)); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_lock, 7, - token, integer_zero_node, integer_one_node, + token, zero_size, integer_one_node, null_pointer_node, null_pointer_node, - null_pointer_node, integer_zero_node); + null_pointer_node, zero_size); gfc_add_expr_to_block (&block, tmp); /* It guarantees memory consistency within the same segment */ @@ -1601,10 +1602,11 @@ gfc_trans_critical (gfc_code *code) if (flag_coarray == GFC_FCOARRAY_LIB) { + tree zero_size = build_zero_cst (size_type_node); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_unlock, 6, - token, integer_zero_node, integer_one_node, + token, zero_size, integer_one_node, null_pointer_node, null_pointer_node, - integer_zero_node); + zero_size); gfc_add_expr_to_block (&block, tmp); /* It guarantees memory consistency within the same segment */ @@ -6772,9 +6774,10 @@ gfc_trans_allocate (gfc_code * code) if (needs_caf_sync) { /* Add a sync all after the allocation has been executed. */ + tree zero_size = build_zero_cst (size_type_node); tmp = build_call_expr_loc (input_location, gfor_fndecl_caf_sync_all, 3, null_pointer_node, null_pointer_node, - integer_zero_node); + zero_size); gfc_add_expr_to_block (&post, tmp); }