[Fortran-Experiments]: regressions

Christopher D. Rickett crickett@lanl.gov
Tue Mar 20 16:48:00 GMT 2007


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



More information about the Fortran mailing list