This patch fixes a visibility error in the expression for a dynamic predicate of a record type, when the expression contains a reference to a subcomponent of the record given by a selected component whose prefix is the name of the enclosing component.
gnatmake -q -gnata main ./main
TGV OK Amtrak broken, as usual
with Text_IO; use Text_IO; with Recpred; use Recpred; procedure Main is TGV : Train_Data; Amtrak : Train_Data; begin TGV := (20, (10,10)); Put_Line ("TGV OK");
begin Amtrak := (30, (40, 40)); exception when Others => Put_Line ("Amtrak broken, as usual"); end; end;
package Recpred is
type Train_Position is record TTD : Integer;
VSS : Integer; end record;
type Train_Data is record MA : Integer; Front_Position : Train_Position; end record with Dynamic_Predicate => MA >= Front_Position.TTD;
2018-01-11 Ed Schonberg
- sem_ch13.adb (Replace_Type_Ref): Handle properly reference to a subcomponent of the current entity when building the body for a dynamic predicate function for a record with composite subcomponents.
3e406e6ddee [Ada] Spurious error on referene to subcoponrnt in dynamic predicate
gcc/ada/ChangeLog | 6 ++++++
gcc/ada/sem_ch13.adb | 15 ++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)