diff options
author | Ed Schonberg <schonberg@adacore.com> | 2014-10-20 14:13:02 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-10-20 16:13:02 +0200 |
commit | 3e1862b1fd8d6025453dfb3119891dcc26822528 (patch) | |
tree | ae95ee54c603974a35cb1beecc37ac02d9c6cffa /gcc | |
parent | a9bbfbd052c4a6572ec8c46149549e046f7e0ed1 (diff) | |
download | gcc-3e1862b1fd8d6025453dfb3119891dcc26822528.zip gcc-3e1862b1fd8d6025453dfb3119891dcc26822528.tar.gz gcc-3e1862b1fd8d6025453dfb3119891dcc26822528.tar.bz2 |
sem_ch13.adb: Improve error recovery on illegal aspect.
2014-10-20 Ed Schonberg <schonberg@adacore.com>
* sem_ch13.adb: Improve error recovery on illegal aspect.
From-SVN: r216472
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 44 |
2 files changed, 32 insertions, 16 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a304daa..f22d38b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2014-10-20 Ed Schonberg <schonberg@adacore.com> + + * sem_ch13.adb: Improve error recovery on illegal aspect. + 2014-10-20 Arnaud Charlet <charlet@adacore.com> * set_targ.adb (Write_Target_Dependent_Values, Write_Line): diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index c8cfd03..8b716f4 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1119,33 +1119,39 @@ package body Sem_Ch13 is case A_Id is -- For aspects whose expression is an optional Boolean, make - -- the corresponding pragma at the freezing point. + -- the corresponding pragma at the freeze point. - when Boolean_Aspects | - Library_Unit_Aspects => - Make_Pragma_From_Boolean_Aspect (ASN); + when Boolean_Aspects | + Library_Unit_Aspects => + Make_Pragma_From_Boolean_Aspect (ASN); -- Special handling for aspects that don't correspond to -- pragmas/attributes. - when Aspect_Default_Value | - Aspect_Default_Component_Value => - Analyze_Aspect_Default_Value (ASN); + when Aspect_Default_Value | + Aspect_Default_Component_Value => + Analyze_Aspect_Default_Value (ASN); -- Ditto for iterator aspects, because the corresponding -- attributes may not have been analyzed yet. - when Aspect_Constant_Indexing | - Aspect_Variable_Indexing | - Aspect_Default_Iterator | - Aspect_Iterator_Element => - Analyze (Expression (ASN)); + when Aspect_Constant_Indexing | + Aspect_Variable_Indexing | + Aspect_Default_Iterator | + Aspect_Iterator_Element => + Analyze (Expression (ASN)); - when Aspect_Iterable => - Validate_Iterable_Aspect (E, ASN); + if Etype (Expression (ASN)) = Any_Type then + Error_Msg_NE + ("\aspect must be fully defined before & is frozen", + ASN, E); + end if; - when others => - null; + when Aspect_Iterable => + Validate_Iterable_Aspect (E, ASN); + + when others => + null; end case; Ritem := Aspect_Rep_Item (ASN); @@ -3901,6 +3907,9 @@ package body Sem_Ch13 is Ctrl := Etype (First_Formal (Subp)); end if; + -- Type of formal may be the class-wide type, an access to such, + -- or an incomplete view. + if Ctrl = Ent or else Ctrl = Class_Wide_Type (Ent) or else @@ -3908,6 +3917,9 @@ package body Sem_Ch13 is and then (Designated_Type (Ctrl) = Ent or else Designated_Type (Ctrl) = Class_Wide_Type (Ent))) + or else + (Ekind (Ctrl) = E_Incomplete_Type + and then Full_View (Ctrl) = Ent) then null; else |