This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch, Fortran] Fix PR 66041


Hello,

Le 10/05/2015 00:31, Thomas Koenig a Ãcrit :
> Am 09.05.2015 um 13:59 schrieb Mikael Morin:
>>> +		      /* We have to get rid of the shape, if thre is one.  Do
>>> +			 so by freeing it and calling gfc_resolve to rebuild it,
>>> +			 if necessary.  */
>>> +			 
>>> +		      if (lbound_e->shape)
>>> +			gfc_free_shape (&(lbound_e->shape), lbound_e->rank);
>>> +
>>
>>> +		      lbound_e->rank = ar->dimen;
>> ar->dimen is  not what you think it is.
>> It is 3 for array(1, 1, :), while the rank is 1.
> 
>> gfc_resolve_expr should set the rank for you, so just remove this line.
> 
> It doesn't (for whatever reason), so I kept on setting it.
It seems to work here.
In fact ar->dimen is the correct setting here, as the array is full.
But it will be overwritten (by the same value) in gfc_resolve_expr.
Anyway, it doesn't matter.

> 
>>> +			
>>> +		      gfc_resolve_expr (lbound_e);
>>> +		      lbound = get_array_inq_function (GFC_ISYM_LBOUND,
>>> +						       lbound_e, i + 1);
>> free lbound_e?
> 
> It will be part of the lbound expression, or be simplified away.

get_array_inq_function makes a copy, so a _copy_ of lbound_e is in lbound.


>>> @@ -2639,6 +2665,8 @@ scalarized_expr (gfc_expr *e_in, gfc_expr **index,
>>>  	  i_index ++;
>>>  	}
>>>      }
>>> +  gfc_free_expr (e_in);
>>> +
>> This side effect is asking for trouble.
>> Instead of this, remove the copies made in the callers.
>> This is independant from the rest, so it can be made later as a follow-up.
> 
> Done (all in once).
> 
e_in is a copy of ei and is used unmodified as input for the copy to
lbound_e, so it can be removed completely.

OK with that change.  Thanks.

Mikael


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]