http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60302
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC| |burnus at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |janus at gcc dot gnu.org --- Comment #4 from janus at gcc dot gnu.org --- (In reply to janus from comment #3) > The function 'gfc_check_c_f_pointer' was added in r197053 ... and I think that's indeed the culprit. This patch fixes it: Index: gcc/fortran/check.c =================================================================== --- gcc/fortran/check.c (revision 207988) +++ gcc/fortran/check.c (working copy) @@ -3944,16 +3944,17 @@ gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *f if (shape) { mpz_t size; - - if (gfc_array_size (shape, &size) - && mpz_cmp_ui (size, fptr->rank) != 0) + if (gfc_array_size (shape, &size)) { + if (mpz_cmp_ui (size, fptr->rank) != 0) + { + mpz_clear (size); + gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same " + "size as the RANK of FPTR", &shape->where); + return false; + } mpz_clear (size); - gfc_error ("SHAPE argument at %L to C_F_POINTER must have the same " - "size as the RANK of FPTR", &shape->where); - return false; } - mpz_clear (size); } if (fptr->ts.type == BT_CLASS) We should not free 'size' unless gfc_array_size is successful!