diff options
author | Ed Schonberg <schonberg@adacore.com> | 2020-05-04 20:05:03 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-07-06 07:34:56 -0400 |
commit | 776afaf7fef4e8d73a2376778c648f8f9a6c536b (patch) | |
tree | 5008ff868b05c7037a836992e9d268498d7db316 /gcc | |
parent | e2d87663af0bfcd0563c00f958082dd7d801175d (diff) | |
download | gcc-776afaf7fef4e8d73a2376778c648f8f9a6c536b.zip gcc-776afaf7fef4e8d73a2376778c648f8f9a6c536b.tar.gz gcc-776afaf7fef4e8d73a2376778c648f8f9a6c536b.tar.bz2 |
[Ada] Crash on declaration with aggregate for unchecked union
gcc/ada/
* sem_ch3.adb (Analyze_Object_Declaration): If the type is an
Unchecked_Union, and the expression is an aggregate. complete
the analysis and resolution of the aggregate, and treat like a
regular object declaration, instead of as a renaming
declarattion.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch3.adb | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 9e60d75..c105f3c 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4564,16 +4564,26 @@ package body Sem_Ch3 is Set_Ekind (Id, E_Variable); end if; - Rewrite (N, - Make_Object_Renaming_Declaration (Loc, - Defining_Identifier => Id, - Subtype_Mark => New_Occurrence_Of (T, Loc), - Name => E)); - - Set_Renamed_Object (Id, E); - Freeze_Before (N, T); - Set_Is_Frozen (Id); - goto Leave; + -- If the expression is an aggregate it contains the required + -- discriminant values but it has not been resolved yet, so do + -- it now, and treat it as the initial expression of an object + -- declaration, rather than a renaming. + + if Nkind (E) = N_Aggregate then + Analyze_And_Resolve (E, T); + + else + Rewrite (N, + Make_Object_Renaming_Declaration (Loc, + Defining_Identifier => Id, + Subtype_Mark => New_Occurrence_Of (T, Loc), + Name => E)); + + Set_Renamed_Object (Id, E); + Freeze_Before (N, T); + Set_Is_Frozen (Id); + goto Leave; + end if; else -- Ensure that the generated subtype has a unique external name |