aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-03 11:51:09 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-03 11:51:09 +0200
commit170b298986d2a6f9b9069a43db89b273640ffd31 (patch)
tree7fe583828bc244e1722fc6eebfbbdbe98b2352ac /gcc
parente917aec294d1a0e602aaf31a70df3a784f7a48b9 (diff)
downloadgcc-170b298986d2a6f9b9069a43db89b273640ffd31.zip
gcc-170b298986d2a6f9b9069a43db89b273640ffd31.tar.gz
gcc-170b298986d2a6f9b9069a43db89b273640ffd31.tar.bz2
[multiple changes]
2011-08-03 Robert Dewar <dewar@adacore.com> * exp_ch4.adb: Minor code cleanup. 2011-08-03 Thomas Quinot <quinot@adacore.com> * exp_dist.adb: Do not generate distribution stubs if serious errors have been diagnosed. 2011-08-03 Ed Schonberg <schonberg@adacore.com> * 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog19
-rw-r--r--gcc/ada/exp_ch4.adb5
-rw-r--r--gcc/ada/exp_dist.adb15
-rw-r--r--gcc/ada/inline.adb1
-rw-r--r--gcc/ada/sem_ch4.adb3
-rw-r--r--gcc/ada/sem_type.adb21
6 files changed, 58 insertions, 6 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 5cd400a..530d52b 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,24 @@
2011-08-03 Robert Dewar <dewar@adacore.com>
+ * exp_ch4.adb: Minor code cleanup.
+
+2011-08-03 Thomas Quinot <quinot@adacore.com>
+
+ * exp_dist.adb: Do not generate distribution stubs if serious errors
+ have been diagnosed.
+
+2011-08-03 Ed Schonberg <schonberg@adacore.com>
+
+ * 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 <dewar@adacore.com>
+
* sem_aggr.adb, sem_ch3.adb, lib.ads, gnatcmd.adb, prj-proc.adb,
make.adb, lib-writ.adb, prj-part.adb, prj-part.ads, prj-ext.adb,
fname-uf.adb, prj-ext.ads, prj.adb, prj.ads, sem_attr.adb, alfa.adb,
diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
index 27e6279..1487f77 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 82d5898..51cf49a 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 d85e086..c508ef4 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 82a6161..912e09b 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 dc98cc1..7f43699 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;