Message ID | 4D29C8FA.5000400@netcologne.de |
---|---|
State | New |
Headers | show |
Am 09.01.2011 15:40, schrieb Thomas Koenig: > Hello world, > > this fixes a rejects-valid bug, what's left of PR 38536 (Mikael fixed > the previous ICE). > > OK for trunk? I forgot to mention: Regression-tested. Thomas
Thomas Koenig wrote: > this fixes a rejects-valid bug, what's left of PR 38536 (Mikael fixed > the previous ICE). > > OK for trunk? OK - thanks for the patch. Tobias PS: I think two bugs are still left to be fixed (cf. my comment in the PR). > 2011-01-09 Thomas Koenig<tkoenig@gcc.gnu.org> > > PR fortran/38536 > * resolve.c (is_scalar_expr_ptr): For a substring reference, > use gfc_dep_compare_expr to compare start and end expession. > Add FIXME for using gfc_deb_compare_expr elsewhere. > > 2011-01-09 Thomas Koenig<tkoenig@gcc.gnu.org> > > PR fortran/38536 > * gfortran.dg/iso_c_binding_c_loc_char_1.f03: New test.
Am 09.01.2011 16:25, schrieb Tobias Burnus: > Thomas Koenig wrote: >> this fixes a rejects-valid bug, what's left of PR 38536 (Mikael fixed >> the previous ICE). >> >> OK for trunk? > > OK - thanks for the patch. Sende fortran/ChangeLog Sende fortran/resolve.c Sende testsuite/ChangeLog Hinzufügen testsuite/gfortran.dg/iso_c_binding_c_loc_char_1.f03 Übertrage Daten .... Revision 168614 übertragen. Thanks for the review! > Tobias > > PS: I think two bugs are still left to be fixed (cf. my comment in the PR). A pity - I would have liked to close it ;-) Thomas
Index: resolve.c =================================================================== --- resolve.c (Revision 168596) +++ resolve.c (Arbeitskopie) @@ -2547,21 +2547,11 @@ is_scalar_expr_ptr (gfc_expr *expr) switch (ref->type) { case REF_SUBSTRING: - if (ref->u.ss.length != NULL - && ref->u.ss.length->length != NULL - && ref->u.ss.start - && ref->u.ss.start->expr_type == EXPR_CONSTANT - && ref->u.ss.end - && ref->u.ss.end->expr_type == EXPR_CONSTANT) - { - start = (int) mpz_get_si (ref->u.ss.start->value.integer); - end = (int) mpz_get_si (ref->u.ss.end->value.integer); - if (end - start + 1 != 1) - retval = FAILURE; - } - else - retval = FAILURE; + if (ref->u.ss.start == NULL || ref->u.ss.end == NULL + || gfc_dep_compare_expr (ref->u.ss.start, ref->u.ss.end) != 0) + retval = FAILURE; break; + case REF_ARRAY: if (ref->u.ar.type == AR_ELEMENT) retval = SUCCESS; @@ -2590,7 +2580,8 @@ is_scalar_expr_ptr (gfc_expr *expr) { /* We have constant lower and upper bounds. If the difference between is 1, it can be considered a - scalar. */ + scalar. + FIXME: Use gfc_dep_compare_expr instead. */ start = (int) mpz_get_si (ref->u.ar.as->lower[0]->value.integer); end = (int) mpz_get_si