[patch.,fortran] PR102595 ICE in var_element, at fortran/decl.c
Checks
Commit Message
A PARAMETER value is not allowed in a DATA statement, similar to an
EQUIVALENCE.
The check for this was in gfc_assign_data_value() in data.cc which turns
out to be too late when trying to assign a zero sized array.
To correct this, the check is moved to match_variable() in primary.cc
where a similar check for EQUIVALENCE is already being performed.
Regression tested on x86_64-linux-gnu. I will create a test case from
the case presented in the PR which is trivial. There are already two
other tests in the test suite that exercise this check.
OK for trunk?
Regards,
Jerry
Comments
On 1/20/23 5:46 PM, Jerry D wrote:
> A PARAMETER value is not allowed in a DATA statement, similar to an
> EQUIVALENCE.
>
> The check for this was in gfc_assign_data_value() in data.cc which turns
> out to be too late when trying to assign a zero sized array.
Correction, the chunk in data.cc must remain for one test case. I
spotted this after rerunning check-fortran for several variations.
Regards,
Jerry
On 1/20/23 9:16 PM, Jerry D wrote:
> On 1/20/23 5:46 PM, Jerry D wrote:
>> A PARAMETER value is not allowed in a DATA statement, similar to an
>> EQUIVALENCE.
>>
>> The check for this was in gfc_assign_data_value() in data.cc which
>> turns out to be too late when trying to assign a zero sized array.
>
> Correction, the chunk in data.cc must remain for one test case. I
> spotted this after rerunning check-fortran for several variations.
>
Attached patch is revised to include a new test case and adjustment of
an existing test case. It also adds in a return MATCH_ERROR I
accidentally left of the first submit when I was cleaning some things up.
Ok for Mainline?
Jeyy
Hi Jerry,
Am 21.01.23 um 19:27 schrieb Jerry D via Gcc-patches:
> On 1/20/23 9:16 PM, Jerry D wrote:
>> On 1/20/23 5:46 PM, Jerry D wrote:
>>> A PARAMETER value is not allowed in a DATA statement, similar to an
>>> EQUIVALENCE.
>>>
>>> The check for this was in gfc_assign_data_value() in data.cc which
>>> turns out to be too late when trying to assign a zero sized array.
>>
>> Correction, the chunk in data.cc must remain for one test case. I
>> spotted this after rerunning check-fortran for several variations.
>>
>
> Attached patch is revised to include a new test case and adjustment of
> an existing test case. It also adds in a return MATCH_ERROR I
> accidentally left of the first submit when I was cleaning some things up.
>
> Ok for Mainline?
the patch looks good to me, so ok for mainline.
But please provide a commit message next time.
Thanks,
Harald
>
> Jeyy
@@ -244,13 +244,6 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
"array-element nor a scalar-structure-component";
symbol = lvalue->symtree->n.sym;
- if (symbol->attr.flavor == FL_PARAMETER)
- {
- gfc_error ("PARAMETER %qs shall not appear in a DATA statement at %L",
- symbol->name, &lvalue->where);
- return false;
- }
-
init = symbol->value;
last_ts = &symbol->ts;
last_con = NULL;
@@ -4076,6 +4076,11 @@ match_variable (gfc_expr **result, int equiv_flag, int host_flag)
gfc_error ("Named constant at %C in an EQUIVALENCE");
return MATCH_ERROR;
}
+ if (gfc_in_match_data())
+ {
+ gfc_error ("PARAMETER %qs shall not appear in a DATA statement at %C",
+ sym->name);
+ }
/* Otherwise this is checked for and an error given in the
variable definition context checks. */
break;