ada: Fix crash caused by incorrect expansion of iterated component
commiteb16654e44775841f82488311fcf08ef521756d9
authorMarc Poulhiès <poulhies@adacore.com>
Thu, 9 Feb 2023 08:36:14 +0000 (9 09:36 +0100)
committerMarc Poulhiès <poulhies@adacore.com>
Mon, 22 May 2023 08:44:11 +0000 (22 10:44 +0200)
tree427854133150b63c1ffb989e8a051881266732bf
parentc58d5574ae74c414c73558288fad42c229695881
ada: Fix crash caused by incorrect expansion of iterated component

The way iterated component are expanded could lead to inconsistent tree.

This change fixes 2 issues:

- in an early step during Pre_Analyze, the loop variable still has
Any_Type and the compiler must not emit an error. A later full Analyze
is supposed to correctly set the Etype, and only then should the
compiler emit an error if Any_Type is still used.

- when expanding into a loop with assignments statement, the expression
is analyzed in an early context (where the loop variable still has
Any_Type Etype) and then copied. The compiler would crash because this
Any_Type is never changed because the expression node has its Analyzed
flag set. Resetting the flag ensures the later Analyze call also
analyzes these nodes and set Etype correctly.

gcc/ada/

* exp_aggr.adb (Process_Transient_Component): Reset Analyzed flag
for the copy of the initialization expression.
* sem_attr.adb (Validate_Non_Static_Attribute_Function_Call): Skip
error emission during Pre_Analyze.
gcc/ada/exp_aggr.adb
gcc/ada/sem_attr.adb