diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2023-07-02 10:07:55 +0200 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-07-18 15:11:46 +0200 |
commit | f31a63438347c628a64257cb909a400cbd5388e3 (patch) | |
tree | cd2df5ff26147bbac88f8e61df6482aadc54a4a6 | |
parent | bd93ef7f1a178079c6cdaccdf953f79a3365b028 (diff) | |
download | gcc-f31a63438347c628a64257cb909a400cbd5388e3.zip gcc-f31a63438347c628a64257cb909a400cbd5388e3.tar.gz gcc-f31a63438347c628a64257cb909a400cbd5388e3.tar.bz2 |
ada: Fix Valid_Scalars attribute applied to types from limited with
The attribute is wrongly computed as always True because, unlike for e.g.
private types, Validated_View does not look through the limited view.
gcc/ada/
* sem_util.ads (Validated_View): Document enhanced behavior.
* sem_util.adb (Validated_View): Return the nonlimited view, if any,
of types coming from a limited with.
-rw-r--r-- | gcc/ada/sem_util.adb | 7 | ||||
-rw-r--r-- | gcc/ada/sem_util.ads | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 821aacf..222fd72 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -29231,6 +29231,13 @@ package body Sem_Util is return Typ; end if; + elsif From_Limited_With (Typ) then + if Has_Non_Limited_View (Typ) then + return Validated_View (Non_Limited_View (Typ)); + else + return Typ; + end if; + else return Typ; end if; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index 3751fb7..7fc77de 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -3331,8 +3331,8 @@ package Sem_Util is function Validated_View (Typ : Entity_Id) return Entity_Id; -- Obtain the "validated view" of arbitrary type Typ which is suitable for -- verification by attribute 'Valid_Scalars. This view is the type itself - -- or its full view while stripping away concurrency, derivations, and - -- privacy. + -- or its full view or nonlimited view, while stripping away concurrency, + -- derivations, and privacy. function Visible_Ancestors (Typ : Entity_Id) return Elist_Id; -- [Ada 2012:AI-0125-1]: Collect all the visible parents and progenitors |