https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84697
Thomas Koenig <tkoenig at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |kargl at gcc dot gnu.org
--- Comment #3 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
Something is rotten in the state of gfc_simplify_expr.
Adding
Index: simplify.c
===================================================================
--- simplify.c (Revision 258232)
+++ simplify.c (Arbeitskopie)
@@ -230,6 +230,7 @@
return x;
}
+void gfc_debug_expr (gfc_expr *);
/* Test that the expression is a constant array, simplifying if
we are dealing with a parameter array. */
@@ -242,9 +243,11 @@
if (e == NULL)
return true;
+ gfc_debug_expr (e);
if (e->expr_type == EXPR_VARIABLE && e->rank > 0
&& e->symtree->n.sym->attr.flavor == FL_PARAMETER)
gfc_simplify_expr (e, 1);
+ gfc_debug_expr (e);
if (e->expr_type != EXPR_ARRAY || !gfc_is_constant_expr (e))
return false;
on a.f90 below yields
main:z(FULL)
0
but the 0 output after simplification seems to be wrong:
show_expr (p=0x11ec2780) at ../../trunk/gcc/fortran/dump-parse-tree.c:388
388 if (p == NULL)
(gdb) p *p
$1 = {expr_type = EXPR_CONSTANT, ts = {type = BT_INTEGER, kind = 4, u =
{derived = 0x0, cl = 0x0, pad = 0}, interface = 0x0, is_c_interop = 0,
is_iso_c = 0, f90_type = BT_UNKNOWN, deferred = false, interop_kind = 0x0},
rank = 1, shape = 0x0, symtree = 0x0, ref = 0x0, where = {
nextc = 0x11ec0378, lb = 0x11ec02e0},
(gdb) p p->rank
$2 = 1
(gdb) p p->shape
$3 = (mpz_t *) 0x0
Note that this works correctly:
program main
implicit none
integer, parameter :: z(0) = [integer::]
print *,minloc(z)
end program main
This yields (correctly)
(gdb) p *p
$1 = {expr_type = EXPR_ARRAY, ts = {type = BT_INTEGER, kind = 4, u = {derived =
0x0, cl = 0x0, pad = 0}, interface = 0x0, is_c_interop = 0, is_iso_c = 0,
f90_type = BT_UNKNOWN, deferred = false, interop_kind = 0x11d41be0
<file_changes_cur>}, rank = 1, shape = 0x11ea8610, symtree = 0x0, ref = 0x0,
where = {nextc = 0x11ec0378, lb = 0x11ec02e0},
Steve, this may also be the root cause of the other problems in PR66128.