This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: [Fortran-Experiments]: regressions
hi all,
i've replied to the changes separately below.
Christopher D. Rickett wrote:
i'll look into this. i remember having had problems like this before,
but they were fixed when i handled is_c_interop in gfc_clear_ts ().
i'll see why this isn't applied to internal symbols.
Have a look at the following patch. It fixes it for me. In two cases I'm
not sure whether it is needed/correct, but the rest should be ok.
Tobias
Index: decl.c
===================================================================
*** decl.c (Revision 123065)
--- decl.c (Arbeitskopie)
*************** variable_decl (int elem)
*** 1386,1391 ****
--- 1386,1393 ----
sym->ts.kind = current_ts.kind;
sym->ts.cl = cl;
sym->ts.derived = current_ts.derived;
+ sym->ts.is_c_interop = current_ts.is_c_interop;
+ sym->ts.is_iso_c = current_ts.is_iso_c;
m = MATCH_YES;
OK.
/* Check to see if we have an array specification. */
*************** match_type_spec (gfc_typespec *ts, int i
*** 2006,2011 ****
--- 2008,2015 ----
ts->type = BT_DERIVED;
ts->kind = 0;
ts->derived = sym;
+ ts->is_iso_c = 0;
+ ts->is_c_interop = 0;
return MATCH_YES;
shouldn't be necessary since it's preceded by a call to gfc_clear_ts ().
Index: data.c
===================================================================
*** data.c (Revision 123065)
--- data.c (Arbeitskopie)
*************** gfc_assign_data_value (gfc_expr *lvalue,
*** 336,341 ****
--- 336,343 ----
expr->expr_type = EXPR_STRUCTURE;
expr->ts.type = BT_DERIVED;
expr->ts.derived = ref->u.c.sym;
+ expr->ts.is_iso_c = 0; /* Is this needed/correct? */
+ expr->ts.is_c_interop = 0;
}
else
gcc_assert (expr->expr_type == EXPR_STRUCTURE);
*************** gfc_assign_data_value_range (gfc_expr *l
*** 525,530 ****
--- 527,534 ----
expr->expr_type = EXPR_STRUCTURE;
expr->ts.type = BT_DERIVED;
expr->ts.derived = ref->u.c.sym;
+ expr->ts.is_iso_c = 0; /* Is this needed/correct? */
+ expr->ts.is_c_interop = 0;
}
else
gcc_assert (expr->expr_type == EXPR_STRUCTURE);
i don't think that these are necessary, and they seem to have no effect on
the results of the test cases that are not working for me (i.e., they
still ICE).
Index: primary.c
===================================================================
*** primary.c (Revision 123065)
--- primary.c (Arbeitskopie)
*************** got_delim:
*** 971,976 ****
--- 971,978 ----
e->ref = NULL;
e->ts.type = BT_CHARACTER;
e->ts.kind = kind;
+ e->ts.is_c_interop = 0;
+ e->ts.is_iso_c = 0;
e->where = start_locus;
e->value.character.string = p = gfc_getmem (length + 1);
*************** match_logical_constant (gfc_expr **resul
*** 1042,1047 ****
--- 1044,1051 ----
e->value.logical = i;
e->ts.type = BT_LOGICAL;
e->ts.kind = kind;
+ e->ts.is_c_interop = 0;
+ e->ts.is_iso_c = 0;
e->where = gfc_current_locus;
*result = e;
*************** match_complex_constant (gfc_expr **resul
*** 1226,1231 ****
--- 1230,1237 ----
}
target.type = BT_REAL;
target.kind = kind;
+ target.is_c_interop = 0;
+ target.is_iso_c = 0;
if (real->ts.type != BT_REAL || kind != real->ts.kind)
gfc_convert_type (real, &target, 2);
these look ok to me. after applying the marked changes above, the
testcase for module_implicit_conversion.f90 works for me now.
however, i'm still getting an ice for loop_nest_1.f90 and pr29581.f90.
thanks Tobias for fixing this!
Chris