diff options
author | Robert Dewar <dewar@adacore.com> | 2012-04-02 09:14:47 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2012-04-02 11:14:47 +0200 |
commit | 99fc068ee807cc43779d775a3dda705f5f37c4f5 (patch) | |
tree | 9a8efa2ad007e9e906c740bb0b3ea701656c6395 /gcc/ada/sem_util.adb | |
parent | cdc30df3e2f9badd1f2fd8efe14c6546cd8efe07 (diff) | |
download | gcc-99fc068ee807cc43779d775a3dda705f5f37c4f5.zip gcc-99fc068ee807cc43779d775a3dda705f5f37c4f5.tar.gz gcc-99fc068ee807cc43779d775a3dda705f5f37c4f5.tar.bz2 |
2012-04-02 Robert Dewar <dewar@adacore.com>
* einfo.adb (First_Component_Or_Discriminant) Now applies to
all types with discriminants, not just records.
* exp_attr.adb (Expand_N_Attribute): Add Scalar_Values handling
for arrays, scalars and non-variant records.
* sem_attr.adb (Analyze_Attribute): Handle Valid_Scalars
* sem_attr.ads (Valid_Scalars): Update description
* sem_util.ads, sem_util.adb (No_Scalar_Parts): New function.
From-SVN: r186069
Diffstat (limited to 'gcc/ada/sem_util.adb')
-rw-r--r-- | gcc/ada/sem_util.adb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 50200e7..e07d5bb 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -10499,6 +10499,34 @@ package body Sem_Util is Actual_Id := Next_Actual (Actual_Id); end Next_Actual; + --------------------- + -- No_Scalar_Parts -- + --------------------- + + function No_Scalar_Parts (T : Entity_Id) return Boolean is + C : Entity_Id; + + begin + if Is_Scalar_Type (T) then + return False; + + elsif Is_Array_Type (T) then + return No_Scalar_Parts (Component_Type (T)); + + elsif Is_Record_Type (T) or else Has_Discriminants (T) then + C := First_Component_Or_Discriminant (T); + while Present (C) loop + if not No_Scalar_Parts (Etype (C)) then + return False; + else + Next_Component_Or_Discriminant (C); + end if; + end loop; + end if; + + return True; + end No_Scalar_Parts; + ----------------------- -- Normalize_Actuals -- ----------------------- |