When applying 'Valid_Scalars attribute to a class-wide object (either
explicitly or as a result of a command line switch like -gnateV), we
must strip away type privacy.

Note: this is just a minimal fix to avoid a crash. Attribute
'Valid_Scalars is not really working as expected on tagged types,
especially with private derivations and type extensions.

Tested on x86_64-pc-linux-gnu, committed on trunk

2020-06-19  Piotr Trojanek  <troja...@adacore.com>

gcc/ada/

        * exp_attr.adb (Build_Record_VS_Func): Strip privacy and type
        derivation from the root type when 'Valid_Scalars is applied to
        a class-wide type.
--- gcc/ada/exp_attr.adb
+++ gcc/ada/exp_attr.adb
@@ -737,7 +737,7 @@ package body Exp_Attr is
       --  Use the root type when dealing with a class-wide type
 
       if Is_Class_Wide_Type (Typ) then
-         Typ := Root_Type (Typ);
+         Typ := Validated_View (Root_Type (Typ));
       end if;
 
       Typ_Decl := Declaration_Node (Typ);

Reply via email to