diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 1c07d5e52bf..c6f1e67ed9a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,26 @@ +2016-04-20 Ed Schonberg + + * sem_ch13.adb (Rep_Item_Too_Late): Better error message for + an illegal aspect that freezes the entity to which it applies. + +2016-04-20 Bob Duff + + * a-stwibo.ads, a-stzbou.ads + ("="): Add overriding keyword before function to avoid crash when + compiler is called with -gnatyO (check overriding indicators). + +2016-04-20 Ed Schonberg + + * sem_prag.adb (Analyze_Pragma, case Check_Policy): If this + is a configuration pragma and it uses the ARG syntax, insert + the rewritten pragma after the current one rather than using + Insert_Actions. + +2016-04-20 Arnaud Charlet + + * exp_aggr.adb (Backend_Processing_Possible): Add handling of + C back-end. + 2016-04-20 Hristian Kirtchev * s-imgllu.adb, sem_util.adb, s-imgint.adb, s-imguns.adb, diff --git a/gcc/ada/a-stwibo.ads b/gcc/ada/a-stwibo.ads index c5a54d14b14..3d098b3d4d0 100644 --- a/gcc/ada/a-stwibo.ads +++ b/gcc/ada/a-stwibo.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -609,7 +609,7 @@ package Ada.Strings.Wide_Bounded is High : Natural) renames Super_Slice; - function "=" + overriding function "=" (Left : Bounded_Wide_String; Right : Bounded_Wide_String) return Boolean renames Equal; diff --git a/gcc/ada/a-stzbou.ads b/gcc/ada/a-stzbou.ads index 9574802f255..d7d3f52f2e7 100644 --- a/gcc/ada/a-stzbou.ads +++ b/gcc/ada/a-stzbou.ads @@ -6,7 +6,7 @@ -- -- -- S p e c -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2015, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -618,7 +618,7 @@ package Ada.Strings.Wide_Wide_Bounded is High : Natural) renames Super_Slice; - function "=" + overriding function "=" (Left : Bounded_Wide_Wide_String; Right : Bounded_Wide_Wide_String) return Boolean renames Equal; diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb index 94f8e0745ec..bd757cd1040 100644 --- a/gcc/ada/exp_aggr.adb +++ b/gcc/ada/exp_aggr.adb @@ -545,6 +545,8 @@ package body Exp_Aggr is -- 10. No controlled actions need to be generated for components + -- 11. When generating C code, N must be part of a N_Object_Declaration + function Backend_Processing_Possible (N : Node_Id) return Boolean is Typ : constant Entity_Id := Etype (N); -- Typ is the correct constrained array subtype of the aggregate @@ -569,6 +571,17 @@ package body Exp_Aggr is return False; end if; + -- Checks 11: (part of an object declaration) + + if Generate_C_Code + and then Nkind (Parent (N)) /= N_Object_Declaration + and then + (Nkind (Parent (N)) /= N_Qualified_Expression + or else Nkind (Parent (Parent (N))) /= N_Object_Declaration) + then + return False; + end if; + -- Checks on components -- Recurse to check subaggregates, which may appear in qualified diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index aa929bd4428..77909a6f542 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -12286,6 +12286,18 @@ package body Sem_Ch13 is and then Comes_From_Source (T) then + -- A self-referential aspect is illegal if it forces freezing the + -- entity before the corresponding pragma has been analyzed. + + if Nkind_In (N, N_Attribute_Definition_Clause, N_Pragma) + and then From_Aspect_Specification (N) + then + Error_Msg_NE + ("aspect specification causes premature freezing of&", T, N); + Set_Has_Delayed_Freeze (T, False); + return True; + end if; + Too_Late; S := First_Subtype (T); diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb index 22daf491148..c538cafa837 100644 --- a/gcc/ada/sem_prag.adb +++ b/gcc/ada/sem_prag.adb @@ -12504,9 +12504,10 @@ package body Sem_Prag is else declare - Arg : Node_Id; - Argx : Node_Id; - LocP : Source_Ptr; + Arg : Node_Id; + Argx : Node_Id; + LocP : Source_Ptr; + New_P : Node_Id; begin Arg := Arg1; @@ -12526,7 +12527,7 @@ package body Sem_Prag is -- Construct equivalent old form syntax Check_Policy -- pragma and insert it to get remaining checks. - Insert_Action (N, + New_P := Make_Pragma (LocP, Chars => Name_Check_Policy, Pragma_Argument_Associations => New_List ( @@ -12534,9 +12535,20 @@ package body Sem_Prag is Expression => Make_Identifier (LocP, Chars (Arg))), Make_Pragma_Argument_Association (Sloc (Argx), - Expression => Argx)))); + Expression => Argx))); Arg := Next (Arg); + + -- For a configuration pragma, insert old form in + -- the corresponding file. + + if Is_Configuration_Pragma then + Insert_After (N, New_P); + Analyze (New_P); + + else + Insert_Action (N, New_P); + end if; end loop; -- Rewrite original Check_Policy pragma to null, since we