diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-01-02 10:31:07 +0100 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-01-02 10:31:07 +0100 |
commit | 1824c168768592a20fcf9fe41634f9ebecabb52c (patch) | |
tree | d260c536f19e9090be2316aa878f77e6b69f7fa1 /gcc/ada | |
parent | db318f46594d4080931db7f56ccb30c7f6f1f949 (diff) | |
download | gcc-1824c168768592a20fcf9fe41634f9ebecabb52c.zip gcc-1824c168768592a20fcf9fe41634f9ebecabb52c.tar.gz gcc-1824c168768592a20fcf9fe41634f9ebecabb52c.tar.bz2 |
[multiple changes]
2013-01-02 Vincent Celier <celier@adacore.com>
* switch-m.adb (Normalize_Compiler_Switches): Record the
complete switch -fstack-check=specific instead of its shorter
alias -fstack-check.
2013-01-02 Ed Schonberg <schonberg@adacore.com>
* sem_ch3.adb (Derive_Subprogram): Enforce RM 6.3.1 (8):
if the derived type is a tagged generic formal type with
unknown discriminants, the inherited operation has convention
Intrinsic. As such, the 'Access attribute cannot be applied to it.
2013-01-02 Thomas Quinot <quinot@adacore.com>
* sem_attr.adb: Minor reformatting.
From-SVN: r194780
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/ChangeLog | 17 | ||||
-rw-r--r-- | gcc/ada/sem_attr.adb | 6 | ||||
-rw-r--r-- | gcc/ada/sem_ch3.adb | 59 | ||||
-rw-r--r-- | gcc/ada/switch-m.adb | 6 |
4 files changed, 64 insertions, 24 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 29f7a83..66c03a0 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,20 @@ +2013-01-02 Vincent Celier <celier@adacore.com> + + * switch-m.adb (Normalize_Compiler_Switches): Record the + complete switch -fstack-check=specific instead of its shorter + alias -fstack-check. + +2013-01-02 Ed Schonberg <schonberg@adacore.com> + + * sem_ch3.adb (Derive_Subprogram): Enforce RM 6.3.1 (8): + if the derived type is a tagged generic formal type with + unknown discriminants, the inherited operation has convention + Intrinsic. As such, the 'Access attribute cannot be applied to it. + +2013-01-02 Thomas Quinot <quinot@adacore.com> + + * sem_attr.adb: Minor reformatting. + 2013-01-02 Thomas Quinot <quinot@adacore.com> * par_sco.adb: Add SCO generation for S of protected types and diff --git a/gcc/ada/sem_attr.adb b/gcc/ada/sem_attr.adb index 94cbd9e..963a19f 100644 --- a/gcc/ada/sem_attr.adb +++ b/gcc/ada/sem_attr.adb @@ -4251,9 +4251,9 @@ package body Sem_Attr is Prag := N; while not Nkind_In (Prag, N_Pragma, - N_Function_Specification, - N_Procedure_Specification, - N_Subprogram_Body) + N_Function_Specification, + N_Procedure_Specification, + N_Subprogram_Body) loop Prag := Parent (Prag); end loop; diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 5745746..451873a 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -13320,8 +13320,29 @@ package body Sem_Ch3 is -- of the parent subprogram (a requirement of AI-117). Derived -- subprograms of untagged types simply get convention Ada by default. + -- If the derived type is a tagged generic formal type with unknown + -- discriminants, its convention is intrinsic (RM 6.3.1 (8)). + + -- However, if the type is derived from a generic formal, the further + -- inherited subprogram has the convention of the non-generic ancestor. + -- Otherwise there would be no way to override the operation. + -- (This is subject to forthcoming ARG discussions). + if Is_Tagged_Type (Derived_Type) then - Set_Convention (New_Subp, Convention (Parent_Subp)); + if Is_Generic_Type (Derived_Type) + and then Has_Unknown_Discriminants (Derived_Type) + then + Set_Convention (New_Subp, Convention_Intrinsic); + + else + if Is_Generic_Type (Parent_Type) + and then Has_Unknown_Discriminants (Parent_Type) + then + Set_Convention (New_Subp, Convention (Alias (Parent_Subp))); + else + Set_Convention (New_Subp, Convention (Parent_Subp)); + end if; + end if; end if; -- Predefined controlled operations retain their name even if the parent @@ -13333,9 +13354,9 @@ package body Sem_Ch3 is if Is_Controlled (Parent_Type) and then - (Chars (Parent_Subp) = Name_Initialize - or else Chars (Parent_Subp) = Name_Adjust - or else Chars (Parent_Subp) = Name_Finalize) + (Chars (Parent_Subp) = Name_Initialize or else + Chars (Parent_Subp) = Name_Adjust or else + Chars (Parent_Subp) = Name_Finalize) and then Is_Hidden (Parent_Subp) and then not Is_Visibly_Controlled (Parent_Type) then @@ -13377,14 +13398,14 @@ package body Sem_Ch3 is elsif Ada_Version >= Ada_2005 and then (Is_Abstract_Subprogram (Alias (New_Subp)) or else (Is_Tagged_Type (Derived_Type) - and then Etype (New_Subp) = Derived_Type - and then not Is_Null_Extension (Derived_Type)) + and then Etype (New_Subp) = Derived_Type + and then not Is_Null_Extension (Derived_Type)) or else (Is_Tagged_Type (Derived_Type) - and then Ekind (Etype (New_Subp)) = + and then Ekind (Etype (New_Subp)) = E_Anonymous_Access_Type - and then Designated_Type (Etype (New_Subp)) = - Derived_Type - and then not Is_Null_Extension (Derived_Type))) + and then Designated_Type (Etype (New_Subp)) = + Derived_Type + and then not Is_Null_Extension (Derived_Type))) and then No (Actual_Subp) then if not Is_Tagged_Type (Derived_Type) @@ -13509,9 +13530,7 @@ package body Sem_Ch3 is -- an incomplete type whose full-view is derived type E := First_Entity (Scope (Derived_Type)); - while Present (E) - and then E /= Derived_Type - loop + while Present (E) and then E /= Derived_Type loop if Ekind (E) = E_Incomplete_Type and then Present (Full_View (E)) and then Full_View (E) = Derived_Type @@ -13648,8 +13667,7 @@ package body Sem_Ch3 is if not Is_Tagged_Type (Derived_Type) or else (not Has_Interfaces (Derived_Type) and then not (Present (Generic_Actual) - and then - Has_Interfaces (Generic_Actual))) + and then Has_Interfaces (Generic_Actual))) then Elmt := First_Elmt (Op_List); while Present (Elmt) loop @@ -13673,9 +13691,10 @@ package body Sem_Ch3 is else pragma Assert (No (Node (Act_Elmt)) or else (Primitive_Names_Match (Subp, Node (Act_Elmt)) - and then - Type_Conformant (Subp, Node (Act_Elmt), - Skip_Controlling_Formals => True))); + and then + Type_Conformant + (Subp, Node (Act_Elmt), + Skip_Controlling_Formals => True))); Derive_Subprogram (New_Subp, Subp, Derived_Type, Parent_Base, Node (Act_Elmt)); @@ -14722,9 +14741,7 @@ package body Sem_Ch3 is -- Set Discard_Names if configuration pragma set, or if there is -- a parameterless pragma in the current declarative region - if Global_Discard_Names - or else Discard_Names (Scope (T)) - then + if Global_Discard_Names or else Discard_Names (Scope (T)) then Set_Discard_Names (T); end if; diff --git a/gcc/ada/switch-m.adb b/gcc/ada/switch-m.adb index 0d769dc..4f18ec1 100644 --- a/gcc/ada/switch-m.adb +++ b/gcc/ada/switch-m.adb @@ -214,6 +214,12 @@ package body Switch.M is then Add_Switch_Component (Switch_Chars); + -- Special case for -fstack-check (alias for + -- -fstack-check=specific) + + elsif Switch_Chars = "-fstack-check" then + Add_Switch_Component ("-fstack-check=specific"); + -- Take only into account switches that are transmitted to -- gnat1 by the gcc driver and stored by gnat1 in the ALI file. |