Hi, fortran produces malloc call with signed size instead of unsigned. This in turn makes gimple_call_builtin_p to fail type checking and we do not treat the call as malloc call.
regtested x86_64-linux, OK? gcc/fortran/ChangeLog: * trans-expr.cc (gfc_trans_subcomponent_assign): Convert malloc parameter to size_type. diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc index ddbb5ecf068..951ac26c4ea 100644 --- a/gcc/fortran/trans-expr.cc +++ b/gcc/fortran/trans-expr.cc @@ -9661,6 +9661,7 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * cm, gfc_init_se (&se, NULL); gfc_conv_expr (&se, expr); size = size_of_string_in_bytes (cm->ts.kind, se.string_length); + size = fold_convert (size_type_node, size); tmp = build_call_expr_loc (input_location, builtin_decl_explicit (BUILT_IN_MALLOC), 1, size);