From 170b298986d2a6f9b9069a43db89b273640ffd31 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 3 Aug 2011 11:51:09 +0200 Subject: [PATCH] [multiple changes] 2011-08-03 Robert Dewar * exp_ch4.adb: Minor code cleanup. 2011-08-03 Thomas Quinot * exp_dist.adb: Do not generate distribution stubs if serious errors have been diagnosed. 2011-08-03 Ed Schonberg * sem_ch4.adb (Try_Primitive_Operation): when checking the validity of the first formal of a primitive operation, go to the base type to handle properly an access to a derived type with constrained discriminants. * sem_type.adb (Disambiguate): an immediately visible operator hides a user-defined function that is only use-visible. * inline.adb: init procs are inlineable. From-SVN: r177253 --- gcc/ada/ChangeLog | 19 +++++++++++++++++++ gcc/ada/exp_ch4.adb | 5 ++--- gcc/ada/exp_dist.adb | 15 ++++++++++++++- gcc/ada/inline.adb | 1 + gcc/ada/sem_ch4.adb | 3 ++- gcc/ada/sem_type.adb | 21 ++++++++++++++++++++- 6 files changed, 58 insertions(+), 6 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 5cd400aea4d..530d52bd82c 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,22 @@ +2011-08-03 Robert Dewar + + * exp_ch4.adb: Minor code cleanup. + +2011-08-03 Thomas Quinot + + * exp_dist.adb: Do not generate distribution stubs if serious errors + have been diagnosed. + +2011-08-03 Ed Schonberg + + * sem_ch4.adb (Try_Primitive_Operation): when checking the validity of + the first formal of a primitive operation, go to the base type to + handle properly an access to a derived type with constrained + discriminants. + * sem_type.adb (Disambiguate): an immediately visible operator hides a + user-defined function that is only use-visible. + * inline.adb: init procs are inlineable. + 2011-08-03 Robert Dewar * sem_aggr.adb, sem_ch3.adb, lib.ads, gnatcmd.adb, prj-proc.adb, diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 27e6279764e..1487f770abd 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -7764,9 +7764,8 @@ package body Exp_Ch4 is if Disc = Entity (Selector_Name (N)) and then (Is_Entity_Name (Dval) - or else Nkind (Dval) = N_Integer_Literal - or else Is_Subtype_Declaration - or else Is_Static_Expression (Dval)) + or else Compile_Time_Known_Value (Dval) + or else Is_Subtype_Declaration) then -- Here we have the matching discriminant. Check for -- the case of a discriminant of a component that is diff --git a/gcc/ada/exp_dist.adb b/gcc/ada/exp_dist.adb index 82d5898bd8d..51cf49a98bd 100644 --- a/gcc/ada/exp_dist.adb +++ b/gcc/ada/exp_dist.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -26,6 +26,7 @@ with Atree; use Atree; with Einfo; use Einfo; with Elists; use Elists; +with Errout; use Errout; with Exp_Atag; use Exp_Atag; with Exp_Disp; use Exp_Disp; with Exp_Strm; use Exp_Strm; @@ -1029,6 +1030,10 @@ package body Exp_Dist is pragma Warnings (Off, Subp_Str); begin + if Serious_Errors_Detected /= 0 then + return; + end if; + Assign_Subprogram_Identifier (Defining_Unit_Name (Spec), Current_Subprogram_Number, Subp_Str); @@ -3836,6 +3841,10 @@ package body Exp_Dist is pragma Warnings (Off, Subp_Val); begin + if Serious_Errors_Detected /= 0 then + return; + end if; + -- Build receiving stub Current_Stubs := @@ -6840,6 +6849,10 @@ package body Exp_Dist is Proxy_Obj_Addr : Entity_Id; begin + if Serious_Errors_Detected /= 0 then + return; + end if; + -- Build receiving stub Current_Stubs := diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb index d85e0866a48..c508ef4bb96 100644 --- a/gcc/ada/inline.adb +++ b/gcc/ada/inline.adb @@ -344,6 +344,7 @@ package body Inline is elsif not Is_Inlined (Pack) and then (not Has_Completion (E) + or else Is_Init_Proc (E) or else Is_Expression_Function (E)) then Set_Is_Inlined (Pack); diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index 82a6161533d..912e09b643d 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -7260,7 +7260,8 @@ package body Sem_Ch4 is or else (Ekind (Typ) = E_Anonymous_Access_Type - and then Designated_Type (Typ) = Base_Type (Corr_Type)); + and then + Base_Type (Designated_Type (Typ)) = Base_Type (Corr_Type)); end Valid_First_Argument_Of; -- Start of processing for Try_Primitive_Operation diff --git a/gcc/ada/sem_type.adb b/gcc/ada/sem_type.adb index dc98cc168f3..7f43699d84e 100644 --- a/gcc/ada/sem_type.adb +++ b/gcc/ada/sem_type.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -1908,6 +1908,25 @@ package body Sem_Type is end if; end; + -- An immediately visible operator hides a use-visible user- + -- defined operation. This disambiguation cannot take place + -- earlier because the visibility of the predefined operator + -- can only be established when operand types are known. + + elsif Ekind (User_Subp) = E_Function + and then Ekind (Predef_Subp) = E_Operator + and then Nkind (N) in N_Op + and then not Is_Overloaded (Right_Opnd (N)) + and then + Is_Immediately_Visible (Base_Type (Etype (Right_Opnd (N)))) + and then Is_Potentially_Use_Visible (User_Subp) + then + if It2.Nam = Predef_Subp then + return It1; + else + return It2; + end if; + else return No_Interp; end if;