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);

Reply via email to