On 12/18/19 17:17, Tobias Burnus wrote:
> LGTM. Thanks for the patch!
Thanks, committed as r279527.
> Tobias
>
> PS: I assume, your patch also fixes the following test case, which also
> ICEs in gfc_trans_pointer_assignment:
> integer, pointer, contiguous :: x(:)
> nullify(x(1:1))
> end
Well, that depends on your interpretation of "fix". The ICE is now
replaced by a somewhat incorrect error message:
xxxxx.f90:2:8:
2 | nullify(x(1:1))
| 1
Error: If bounds remapping is specified at (1), the pointer target shall
not be NULL
For a better error message, we'd need to know that we come here from
a NULLIFY statement. Can you file a PR?
Thanks,
Harald
> On 12/18/19 5:07 PM, Harald Anlauf wrote:
>> The patch is self-explaining and practically obvious: pointer bounds
>> remapping to NULL is not allowed, thus we shall reject it. I hope the
>> error message is fine. If somebody prefers a formulation as in the
>> standard ("data target", also used by the Intel compiler), please
>> speak now.
>>
>> Regtested on x86_64-pc-linux-gnu.
>>
>> OK for trunk?
>>
>> Thanks,
>> Harald
>>
>> Index: gcc/fortran/trans-expr.c
>> ===================================================================
>> --- gcc/fortran/trans-expr.c (Revision 279405)
>> +++ gcc/fortran/trans-expr.c (Arbeitskopie)
>> @@ -9218,6 +9218,13 @@ gfc_trans_pointer_assignment (gfc_expr * expr1, gf
>> break;
>> rank_remap = (remap && remap->u.ar.end[0]);
>>
>> + if (remap && expr2->expr_type == EXPR_NULL)
>> + {
>> + gfc_error ("If bounds remapping is specified at %L, "
>> + "the pointer target shall not be NULL",
>> &expr1->where);
>> + return NULL_TREE;
>> + }
>> +
>> gfc_init_se (&lse, NULL);
>> if (remap)
>> lse.descriptor_only = 1;
>>
>>
>> Index: gcc/testsuite/gfortran.dg/pr70853.f90
>> ===================================================================
>> --- gcc/testsuite/gfortran.dg/pr70853.f90 (nicht existent)
>> +++ gcc/testsuite/gfortran.dg/pr70853.f90 (Arbeitskopie)
>> @@ -0,0 +1,8 @@
>> +! { dg-do compile }
>> +! PR fortran/70853
>> +! Contributed by Gerhard Steinmetz
>> +program p
>> + real, pointer :: z(:)
>> + z(1:2) => null() ! { dg-error "pointer target shall not be NULL" }
>> + z(2:1) => null() ! { dg-error "pointer target shall not be NULL" }
>> +end
>>
>>
>> 2019-12-18 Harald Anlauf <[email protected]>
>>
>> PR fortran/92898
>> * trans-expr.c (gfc_trans_pointer_assignment): Reject bounds
>> remapping if pointer target is NULL().
>>
>>
>> 2019-12-18 Harald Anlauf <[email protected]>
>>
>> PR fortran/70853
>> * gfortran.dg/pr70853.f90: New test.
>