Affects versions down to at least r5 : $ cat z1.f90 program p integer, parameter :: a(-1) = 1 integer, parameter :: b(1) = maskl(shape(a)) end $ cat z2.f90 program p integer, parameter :: a(-1) = maskl(shape(a)) end $ gfortran-12-20211205 -c z1.f90 f951: internal compiler error: in gfc_convert_mpz_to_signed, at fortran/simplify.c:193 0x8288e1 gfc_convert_mpz_to_signed(__mpz_struct*, int) ../../gcc/fortran/simplify.c:193 0x830010 gfc_simplify_maskl(gfc_expr*, gfc_expr*) ../../gcc/fortran/simplify.c:4923 0x7aefd6 do_simplify ../../gcc/fortran/intrinsic.c:4648 0x7b9f98 gfc_intrinsic_func_interface(gfc_expr*, int) ../../gcc/fortran/intrinsic.c:4920 0x79fb09 gfc_simplify_expr(gfc_expr*, int) ../../gcc/fortran/expr.c:2219 0x7a065a scalarize_intrinsic_call ../../gcc/fortran/expr.c:2486 0x79fb5d gfc_simplify_expr(gfc_expr*, int) ../../gcc/fortran/expr.c:2227 0x7ba14e gfc_intrinsic_func_interface(gfc_expr*, int) ../../gcc/fortran/intrinsic.c:5070 0x80dcac resolve_unknown_f ../../gcc/fortran/resolve.c:2972 0x80dcac resolve_function ../../gcc/fortran/resolve.c:3329 0x80dcac gfc_resolve_expr(gfc_expr*) ../../gcc/fortran/resolve.c:7166 0x79f054 gfc_reduce_init_expr(gfc_expr*) ../../gcc/fortran/expr.c:3155 0x7a1fc0 gfc_match_init_expr(gfc_expr**) ../../gcc/fortran/expr.c:3203 0x78c3d4 variable_decl ../../gcc/fortran/decl.c:3004 0x78c3d4 gfc_match_data_decl() ../../gcc/fortran/decl.c:6297 0x7f6343 match_word ../../gcc/fortran/parse.c:67 0x7f6343 decode_statement ../../gcc/fortran/parse.c:378 0x7f7d8a next_free ../../gcc/fortran/parse.c:1397 0x7f7d8a next_statement ../../gcc/fortran/parse.c:1629 0x7f931b parse_spec ../../gcc/fortran/parse.c:4168
$ cat z3.f90 program p integer, parameter :: a(-1) = 1 integer, parameter :: b(1) = maskr(shape(a)) end $ cat z4.f90 program p integer, parameter :: a(-1) = maskr(shape(a)) end $ gfortran-12-20211205 -c z3.f90 gmp: overflow in mpz type f951: internal compiler error: Aborted 0xf0b99f crash_signal ../../gcc/toplev.c:322 0x870a74 gfc_simplify_maskr(gfc_expr*, gfc_expr*) ../../gcc/fortran/simplify.c:4885 0x7ef826 do_simplify ../../gcc/fortran/intrinsic.c:4648 0x7fa888 gfc_intrinsic_func_interface(gfc_expr*, int) ../../gcc/fortran/intrinsic.c:4920 0x7e0359 gfc_simplify_expr(gfc_expr*, int) ../../gcc/fortran/expr.c:2219 0x7e0eaa scalarize_intrinsic_call ../../gcc/fortran/expr.c:2486 0x7e03ad gfc_simplify_expr(gfc_expr*, int) ../../gcc/fortran/expr.c:2227 0x7faa3e gfc_intrinsic_func_interface(gfc_expr*, int) ../../gcc/fortran/intrinsic.c:5070 0x84e86c resolve_unknown_f ../../gcc/fortran/resolve.c:2972 0x84e86c resolve_function ../../gcc/fortran/resolve.c:3329 0x84e86c gfc_resolve_expr(gfc_expr*) ../../gcc/fortran/resolve.c:7166 0x7df8a4 gfc_reduce_init_expr(gfc_expr*) ../../gcc/fortran/expr.c:3155 0x7e2810 gfc_match_init_expr(gfc_expr**) ../../gcc/fortran/expr.c:3203 0x7ccac4 variable_decl ../../gcc/fortran/decl.c:3004 0x7ccac4 gfc_match_data_decl() ../../gcc/fortran/decl.c:6297 0x836f03 match_word ../../gcc/fortran/parse.c:67 0x836f03 decode_statement ../../gcc/fortran/parse.c:378 0x83894a next_free ../../gcc/fortran/parse.c:1397 0x83894a next_statement ../../gcc/fortran/parse.c:1629 0x839edb parse_spec ../../gcc/fortran/parse.c:4168
Really funny. The bug however does not need maskl/maskr: program p integer, parameter :: a(-1) = 1 integer, parameter :: c(1) = shape(a) print *, c end This prints: -1 instead of 0.
Tentative patch: diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index e5e22099405..a23fabbdcdb 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -2330,6 +2330,9 @@ spec_dimen_size (gfc_array_spec *as, int dimen, mpz_t *result) mpz_add_ui (*result, *result, 1); + if (mpz_cmp_si (*result, 0) < 0) + mpz_set_si (*result, 0); + return true; }
Patch: https://gcc.gnu.org/pipermail/fortran/2021-December/057142.html
The master branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:5f7cdea34e118776d0ccd2ff3dda0f5acab18a94 commit r12-5842-g5f7cdea34e118776d0ccd2ff3dda0f5acab18a94 Author: Harald Anlauf <anlauf@gmx.de> Date: Tue Dec 7 23:06:41 2021 +0100 Fortran: dimensions of an array have to be non-negative gcc/fortran/ChangeLog: PR fortran/103610 * array.c (spec_dimen_size): Fix simplification of SHAPE: dimensions must be non-negative. gcc/testsuite/ChangeLog: PR fortran/103610 * gfortran.dg/shape_11.f90: New test.
The releases/gcc-11 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:3459ef2e9f9cd4d3ed64c9bc44282534a24987b8 commit r11-9372-g3459ef2e9f9cd4d3ed64c9bc44282534a24987b8 Author: Harald Anlauf <anlauf@gmx.de> Date: Tue Dec 7 23:06:41 2021 +0100 Fortran: dimensions of an array have to be non-negative gcc/fortran/ChangeLog: PR fortran/103610 * array.c (spec_dimen_size): Fix simplification of SHAPE: dimensions must be non-negative. gcc/testsuite/ChangeLog: PR fortran/103610 * gfortran.dg/shape_11.f90: New test. (cherry picked from commit 5f7cdea34e118776d0ccd2ff3dda0f5acab18a94)
The releases/gcc-10 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:a28d6903677629c23bac53ff061eb80f22d51006 commit r10-10346-ga28d6903677629c23bac53ff061eb80f22d51006 Author: Harald Anlauf <anlauf@gmx.de> Date: Tue Dec 7 23:06:41 2021 +0100 Fortran: dimensions of an array have to be non-negative gcc/fortran/ChangeLog: PR fortran/103610 * array.c (spec_dimen_size): Fix simplification of SHAPE: dimensions must be non-negative. gcc/testsuite/ChangeLog: PR fortran/103610 * gfortran.dg/shape_11.f90: New test. (cherry picked from commit 5f7cdea34e118776d0ccd2ff3dda0f5acab18a94)
*** Bug 103260 has been marked as a duplicate of this bug. ***
The releases/gcc-9 branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>: https://gcc.gnu.org/g:1062d2b022575e2ab942236478029cd637f937a5 commit r9-9875-g1062d2b022575e2ab942236478029cd637f937a5 Author: Harald Anlauf <anlauf@gmx.de> Date: Tue Dec 7 23:06:41 2021 +0100 Fortran: dimensions of an array have to be non-negative gcc/fortran/ChangeLog: PR fortran/103610 * array.c (spec_dimen_size): Fix simplification of SHAPE: dimensions must be non-negative. gcc/testsuite/ChangeLog: PR fortran/103610 * gfortran.dg/shape_11.f90: New test. (cherry picked from commit 5f7cdea34e118776d0ccd2ff3dda0f5acab18a94)
Fixed on all open branches. Closing. Thanks for the report!