diff options
| author | Janus Weil <janus@gcc.gnu.org> | 2014-02-21 23:54:50 +0100 |
|---|---|---|
| committer | Janus Weil <janus@gcc.gnu.org> | 2014-02-21 23:54:50 +0100 |
| commit | f1ed9e151e1263e32142fa3fe3909d48964c72c2 (patch) | |
| tree | ad96c11489b4f82b4d9dcd96d716aa8436b7a1eb /gcc/fortran | |
| parent | d723358d0167b16e3fdffe71e4e5267e3ce01a5f (diff) | |
| download | gcc-f1ed9e151e1263e32142fa3fe3909d48964c72c2.zip gcc-f1ed9e151e1263e32142fa3fe3909d48964c72c2.tar.gz gcc-f1ed9e151e1263e32142fa3fe3909d48964c72c2.tar.bz2 | |
re PR fortran/60302 (ICE with c_f_pointer and android cross compiler)
2014-02-21 Janus Weil <janus@gcc.gnu.org>
PR fortran/60302
* check.c (gfc_check_c_f_pointer): Only clear 'size' if 'gfc_array_size'
is successful.
2014-02-21 Janus Weil <janus@gcc.gnu.org>
PR fortran/60302
* gfortran.dg/c_f_pointer_shape_tests_6.f90: New.
From-SVN: r208033
Diffstat (limited to 'gcc/fortran')
| -rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/fortran/check.c | 15 |
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c27a1d0..995ede7 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2014-02-21 Janus Weil <janus@gcc.gnu.org> + PR fortran/60302 + * check.c (gfc_check_c_f_pointer): Only clear 'size' if 'gfc_array_size' + is successful. + +2014-02-21 Janus Weil <janus@gcc.gnu.org> + PR fortran/60234 * gfortran.h (gfc_build_class_symbol): Removed argument. * class.c (gfc_add_component_ref): Fix up missing vtype if necessary. diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 4282030..119750a 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -3944,16 +3944,17 @@ gfc_check_c_f_pointer (gfc_expr *cptr, gfc_expr *fptr, gfc_expr *shape) 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) |
