]> git.ipfire.org Git - thirdparty/gcc.git/commit
[Ada] Add -gnatX support for casing on array values
authorSteve Baird <baird@adacore.com>
Fri, 9 Jul 2021 19:04:09 +0000 (12:04 -0700)
committerPierre-Marie de Rodat <derodat@adacore.com>
Wed, 22 Sep 2021 15:01:42 +0000 (15:01 +0000)
commitec813d06f788fed7e0d9f47f77182877f1d8cf47
treee0124781b876c9e0dc0935870ea4bf972dc610cd
parentc5ff859dc01958f39ba77de6421d774171e3ea09
[Ada] Add -gnatX support for casing on array values

gcc/ada/

* exp_ch5.adb (Expand_General_Case_Statement.Pattern_Match): Add
new function Indexed_Element to handle array element
comparisons. Handle case choices that are array aggregates,
string literals, or names denoting constants.
* sem_case.adb (Composite_Case_Ops.Array_Case_Ops): New package
providing utilities needed for casing on arrays.
(Composite_Case_Ops.Choice_Analysis): If necessary, include
array length as a "component" (like a discriminant) when
traversing components. We do not (yet) partition choice analysis
to deal with unequal length choices separately. Instead, we
embed everything in the minimum-dimensionality Cartesian product
space needed to handle all choices properly; this is determined
by the length of the longest choice pattern.
(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
Include length as a "component" in the traversal if necessary.
(Composite_Case_Ops.Choice_Analysis.Parse_Choice.Traverse_Choice):
Add support for case choices that are string literals or names
denoting constants.
(Composite_Case_Ops.Choice_Analysis): Include length as a
"component" in the analysis if necessary.
(Check_Choices.Check_Case_Pattern_Choices.Ops.Value_Sets.Value_Index_Count):
Improve error message when capacity exceeded.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update
documentation to reflect current implementation status.
* gnat_rm.texi: Regenerate.
gcc/ada/doc/gnat_rm/implementation_defined_pragmas.rst
gcc/ada/exp_ch5.adb
gcc/ada/gnat_rm.texi
gcc/ada/sem_case.adb