[Ada] Add -gnatX support for casing on discriminated values
authorSteve Baird <baird@adacore.com>
Thu, 10 Jun 2021 18:20:27 +0000 (11:20 -0700)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 9 Jul 2021 12:35:30 +0000 (12:35 +0000)
commite4de29f4677e81e71c60eb2b9f247eaa12ea1353
tree04c6b5510d3874e81262d11aee1181f6fa79e8d2
parent765ca22b1792b613d2801b6d2ef9986e18bba3ab
[Ada] Add -gnatX support for casing on discriminated values

gcc/ada/

* exp_ch5.adb (Expand_General_Case_Statement): Add new function
Else_Statements to handle the case of invalid data analogously
to how it is handled when casing on a discrete value.
* sem_case.adb (Has_Static_Discriminant_Constraint): A new
Boolean-valued function.
(Composite_Case_Ops.Scalar_Part_Count): Include discriminants
when traversing components.
(Composite_Case_Ops.Choice_Analysis.Traverse_Discrete_Parts):
Include discriminants when traversing components; the component
range for a constrained discriminant is a single value.
(Composite_Case_Ops.Choice_Analysis.Parse_Choice): Eliminate
Done variable and modify how Next_Part is computed so that it is
always correct (as opposed to being incorrect when Done is
True).  This includes changes in Update_Result (a local
procedure).  Add new local procedure
Update_Result_For_Box_Component and call it not just for box
components but also for "missing" components (components
associated with an inactive variant).
(Check_Choices.Check_Composite_Case_Selector.Check_Component_Subtype):
Instead of disallowing all discriminated component types, allow
those that are unconstrained or statically constrained. Check
discriminant subtypes along with other component subtypes.
* 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