aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog29
-rw-r--r--gcc/ada/atree.ads2
-rw-r--r--gcc/ada/gnat1drv.adb10
-rw-r--r--gcc/ada/impunit.adb98
-rw-r--r--gcc/ada/impunit.ads7
-rw-r--r--gcc/ada/opt.ads5
-rw-r--r--gcc/ada/sem_ch6.adb1
-rw-r--r--gcc/ada/sem_ch8.adb21
-rw-r--r--gcc/ada/sinfo.adb16
-rw-r--r--gcc/ada/sinfo.ads17
-rw-r--r--gcc/ada/sinput.ads2
-rw-r--r--gcc/ada/usage.adb5
12 files changed, 149 insertions, 64 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 52b839b..2931059 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,32 @@
+2015-11-12 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_ch8.adb (Find_Selected_Component): In a synchronized
+ body, a reference to an operation of an object of the same
+ synchronized type was always interpreted as a reference to the
+ current instance. This is not always the case, as the prefix of
+ the reference may designate an object of the same type declared
+ in the enclosing context prior to the body.
+
+2015-11-12 Arnaud Charlet <charlet@adacore.com>
+
+ * impunit.ads, impunit.adb (Get_Kind_Of_File): New. Cleaned up
+ implementation from previous Get_Kind_Of_Unit.
+ (Get_Kind_Of_Unit): Reimplemented using Get_Kind_Of_File.
+ * debug.adb: Remove d.4 switch, no longer used.
+ * opt.ads: Update doc on Debugger_Level.
+ * gnat1drv.adb: Code clean ups.
+ * sinput.ads: minor fix in comment
+
+2015-11-12 Bob Duff <duff@adacore.com>
+
+ * sinfo.adb, sinfo.ads, sem_ch6.adb, atree.ads: Add
+ Was_Expression_Function flag, which is set in sem_ch6.adb when
+ converting an Expression_Function into a Subprogram_Body.
+
+2015-11-12 Pascal Obry <obry@adacore.com>
+
+ * usage.adb: Update overflow checking documentation.
+
2015-11-12 Tristan Gingold <gingold@adacore.com>
* snames.ads-tmpl: Name_Gnat_Extended_Ravenscar: New identifier.
diff --git a/gcc/ada/atree.ads b/gcc/ada/atree.ads
index 56763c7..08ea277 100644
--- a/gcc/ada/atree.ads
+++ b/gcc/ada/atree.ads
@@ -181,7 +181,7 @@ package Atree is
-- Flag10
-- Flag11 Note that Flag0-3 are stored separately in the Flags
-- Flag12 table, but that's a detail of the implementation which
- -- Flag13 is entirely hidden by the funcitonal interface.
+ -- Flag13 is entirely hidden by the functional interface.
-- Flag14
-- Flag15
-- Flag16
diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb
index 586844d..e84719a 100644
--- a/gcc/ada/gnat1drv.adb
+++ b/gcc/ada/gnat1drv.adb
@@ -148,12 +148,16 @@ procedure Gnat1drv is
Generate_C_Code := True;
Modify_Tree_For_C := True;
Unnest_Subprogram_Mode := True;
- Back_Annotate_Rep_Info := True;
-- Set operating mode to Generate_Code to benefit from full front-end
-- expansion (e.g. generics).
Operating_Mode := Generate_Code;
+
+ -- Suppress alignment checks since we do not have access to alignment
+ -- info on the target
+
+ Suppress_Options.Suppress (Alignment_Check) := False;
end if;
-- -gnatd.E sets Error_To_Warning mode, causing selected error messages
@@ -1346,8 +1350,8 @@ begin
Back_End.Call_Back_End (Back_End_Mode);
-- Once the backend is complete, we unlock the names table. This call
- -- allows a few extra entries, needed for example for the file name for
- -- the library file output.
+ -- allows a few extra entries, needed for example for the file name
+ -- for the library file output.
Namet.Unlock;
diff --git a/gcc/ada/impunit.adb b/gcc/ada/impunit.adb
index 6f6c9ba..5fea99d 100644
--- a/gcc/ada/impunit.adb
+++ b/gcc/ada/impunit.adb
@@ -635,23 +635,22 @@ package body Impunit is
("utf_32", Sutf_32'Access));
----------------------
- -- Get_Kind_Of_Unit --
+ -- Get_Kind_Of_File --
----------------------
- function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit is
- Fname : constant File_Name_Type := Unit_File_Name (U);
+ function Get_Kind_Of_File (File : String) return Kind_Of_Unit is
+ pragma Assert (File'First = 1);
+
+ Buffer : String (1 .. 8);
begin
Error_Msg_Strlen := 0;
- Get_Name_String (Fname);
-- Ada/System/Interfaces are all Ada 95 units
- if (Name_Len = 7 and then Name_Buffer (1 .. 7) = "ada.ads")
- or else
- (Name_Len = 10 and then Name_Buffer (1 .. 10) = "system.ads")
- or else
- (Name_Len = 12 and then Name_Buffer (1 .. 12) = "interfac.ads")
+ if File = "ada.ads"
+ or else File = "system.ads"
+ or else File = "interfac.ads"
then
return Ada_95_Unit;
end if;
@@ -659,21 +658,19 @@ package body Impunit is
-- If length of file name is greater than 12, not predefined. The value
-- 12 here is an 8 char name with extension .ads.
- if Name_Len > 12 then
+ if File'Length > 12 then
return Not_Predefined_Unit;
end if;
-- Not predefined if file name does not start with a- g- s- i-
- if Name_Len < 3
- or else Name_Buffer (2) /= '-'
- or else (Name_Buffer (1) /= 'a'
- and then
- Name_Buffer (1) /= 'g'
- and then
- Name_Buffer (1) /= 'i'
- and then
- Name_Buffer (1) /= 's')
+ if File'Length < 3
+ or else File (2) /= '-'
+ or else
+ (File (1) /= 'a'
+ and then File (1) /= 'g'
+ and then File (1) /= 'i'
+ and then File (1) /= 's')
then
return Not_Predefined_Unit;
end if;
@@ -687,25 +684,25 @@ package body Impunit is
-- this routine to detect when a construct comes from an instance of
-- a generic defined in a predefined unit.
- if Name_Buffer (Name_Len - 3 .. Name_Len) /= ".ads"
+ if File (File'Last - 3 .. File'Last) /= ".ads"
and then
- Name_Buffer (Name_Len - 3 .. Name_Len) /= ".adb"
+ File (File'Last - 3 .. File'Last) /= ".adb"
then
return Not_Predefined_Unit;
end if;
-- Otherwise normalize file name to 8 characters
- Name_Len := Name_Len - 4;
- while Name_Len < 8 loop
- Name_Len := Name_Len + 1;
- Name_Buffer (Name_Len) := ' ';
+ Buffer (1 .. File'Length - 4) := File (1 .. File'Length - 4);
+
+ for J in File'Length - 3 .. 8 loop
+ Buffer (J) := ' ';
end loop;
-- See if name is in 95 list
for J in Non_Imp_File_Names_95'Range loop
- if Name_Buffer (1 .. 8) = Non_Imp_File_Names_95 (J).Fname then
+ if Buffer = Non_Imp_File_Names_95 (J).Fname then
return Ada_95_Unit;
end if;
end loop;
@@ -713,7 +710,7 @@ package body Impunit is
-- See if name is in 2005 list
for J in Non_Imp_File_Names_05'Range loop
- if Name_Buffer (1 .. 8) = Non_Imp_File_Names_05 (J).Fname then
+ if Buffer = Non_Imp_File_Names_05 (J).Fname then
return Ada_2005_Unit;
end if;
end loop;
@@ -721,7 +718,7 @@ package body Impunit is
-- See if name is in 2012 list
for J in Non_Imp_File_Names_12'Range loop
- if Name_Buffer (1 .. 8) = Non_Imp_File_Names_12 (J).Fname then
+ if Buffer = Non_Imp_File_Names_12 (J).Fname then
return Ada_2012_Unit;
end if;
end loop;
@@ -729,22 +726,9 @@ package body Impunit is
-- Only remaining special possibilities are children of System.RPC and
-- System.Garlic and special files of the form System.Aux...
- Get_Name_String (Unit_Name (U));
-
- if Name_Len > 12
- and then Name_Buffer (1 .. 11) = "system.rpc."
- then
- return Ada_95_Unit;
- end if;
-
- if Name_Len > 15
- and then Name_Buffer (1 .. 14) = "system.garlic."
- then
- return Ada_95_Unit;
- end if;
-
- if Name_Len > 11
- and then Name_Buffer (1 .. 10) = "system.aux"
+ if File (1 .. 5) = "s-rpc"
+ or else File (1 .. 5) = "s-gar"
+ or else File (1 .. 5) = "s-aux"
then
return Ada_95_Unit;
end if;
@@ -752,18 +736,16 @@ package body Impunit is
-- All tests failed, this is definitely an implementation unit. See if
-- we have an alternative name.
- Get_Name_String (Fname);
-
- if Name_Len in 11 .. 12
- and then Name_Buffer (1 .. 2) = "s-"
- and then Name_Buffer (Name_Len - 3 .. Name_Len) = ".ads"
+ if File'Length in 11 .. 12
+ and then File (1 .. 2) = "s-"
+ and then File (File'Last - 3 .. File'Last) = ".ads"
then
for J in Map_Array'Range loop
- if (Name_Len = 12 and then
- Name_Buffer (3 .. 8) = Map_Array (J).Fname)
+ if (File'Length = 12 and then
+ File (3 .. 8) = Map_Array (J).Fname)
or else
- (Name_Len = 11 and then
- Name_Buffer (3 .. 7) = Map_Array (J).Fname (1 .. 5))
+ (File'Length = 11 and then
+ File (3 .. 7) = Map_Array (J).Fname (1 .. 5))
then
Error_Msg_Strlen := Map_Array (J).Aname'Length;
Error_Msg_String (1 .. Error_Msg_Strlen) :=
@@ -773,6 +755,16 @@ package body Impunit is
end if;
return Implementation_Unit;
+ end Get_Kind_Of_File;
+
+ ----------------------
+ -- Get_Kind_Of_Unit --
+ ----------------------
+
+ function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit is
+ begin
+ Get_Name_String (Unit_File_Name (U));
+ return Get_Kind_Of_File (Name_Buffer (1 .. Name_Len));
end Get_Kind_Of_Unit;
-------------------
diff --git a/gcc/ada/impunit.ads b/gcc/ada/impunit.ads
index be3e8d3..f4a1157 100644
--- a/gcc/ada/impunit.ads
+++ b/gcc/ada/impunit.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000-2011, Free Software Foundation, Inc. --
+-- Copyright (C) 2000-2015, 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- --
@@ -62,11 +62,14 @@ package Impunit is
function Get_Kind_Of_Unit (U : Unit_Number_Type) return Kind_Of_Unit;
-- Given the unit number of a unit, this function determines the type
-- of the unit, as defined above. If the result is Implementation_Unit,
- -- then the name of a possible atlernative equivalent unit is placed in
+ -- then the name of a possible alternative equivalent unit is placed in
-- Error_Msg_String/Slen on return. If there is no alternative name, or if
-- the result is not Implementation_Unit, then Error_Msg_Slen is zero on
-- return, indicating that no alternative name was found.
+ function Get_Kind_Of_File (File : String) return Kind_Of_Unit;
+ -- Same as Get_Kind_Of_Unit, for a given filename
+
function Is_Known_Unit (Nam : Node_Id) return Boolean;
-- Nam is the possible name of a child unit, represented as a selected
-- component node. This function determines whether the name matches one of
diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads
index e99c6b7..60aeb28 100644
--- a/gcc/ada/opt.ads
+++ b/gcc/ada/opt.ads
@@ -422,8 +422,9 @@ package Opt is
subtype Debug_Level_Value is Nat range 0 .. 3;
Debugger_Level : Debug_Level_Value := 0;
-- The value given to the -g parameter. The default value for -g with
- -- no value is 2. This is not currently used but is retained for possible
- -- future use.
+ -- no value is 2. If no -g is specified, defaults to 0.
+ -- Note that the generated code should never depend on this variable,
+ -- since we want debug info to be non intrusive on the generate code.
Default_Exit_Status : Int := 0;
-- GNATBIND
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 91e41e2..a40baa5 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -334,6 +334,7 @@ package body Sem_Ch6 is
Handled_Statement_Sequence =>
Make_Handled_Sequence_Of_Statements (LocX,
Statements => New_List (Ret)));
+ Set_Was_Expression_Function (New_Body);
-- If the expression completes a generic subprogram, we must create a
-- separate node for the body, because at instantiation the original
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index d448712..9e581e0 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -6774,7 +6774,26 @@ package body Sem_Ch8 is
-- Prefix denotes an enclosing loop, block, or task, i.e. an
-- enclosing construct that is not a subprogram or accept.
- Find_Expanded_Name (N);
+ -- A special case: a protected body may call an operation
+ -- on an external object of the same type, in which case it
+ -- is not an expanded name. If the prefix is the type itself,
+ -- or the context is a single synchronized object it can only
+ -- be interpreted as an expanded name.
+
+ if Is_Concurrent_Type (Etype (P_Name)) then
+ if Is_Type (P_Name)
+ or else Present (Anonymous_Object (Etype (P_Name)))
+ then
+ Find_Expanded_Name (N);
+
+ else
+ Analyze_Selected_Component (N);
+ return;
+ end if;
+
+ else
+ Find_Expanded_Name (N);
+ end if;
elsif Ekind (P_Name) = E_Package then
Find_Expanded_Name (N);
diff --git a/gcc/ada/sinfo.adb b/gcc/ada/sinfo.adb
index 5f57e8c..b97fa58 100644
--- a/gcc/ada/sinfo.adb
+++ b/gcc/ada/sinfo.adb
@@ -3286,6 +3286,14 @@ package body Sinfo is
return Elist5 (N);
end Used_Operations;
+ function Was_Expression_Function
+ (N : Node_Id) return Boolean is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Subprogram_Body);
+ return Flag18 (N);
+ end Was_Expression_Function;
+
function Was_Originally_Stub
(N : Node_Id) return Boolean is
begin
@@ -6525,6 +6533,14 @@ package body Sinfo is
Set_Elist5 (N, Val);
end Set_Used_Operations;
+ procedure Set_Was_Expression_Function
+ (N : Node_Id; Val : Boolean := True) is
+ begin
+ pragma Assert (False
+ or else NT (N).Nkind = N_Subprogram_Body);
+ Set_Flag18 (N, Val);
+ end Set_Was_Expression_Function;
+
procedure Set_Was_Originally_Stub
(N : Node_Id; Val : Boolean := True) is
begin
diff --git a/gcc/ada/sinfo.ads b/gcc/ada/sinfo.ads
index ab76d2c..4b18de9 100644
--- a/gcc/ada/sinfo.ads
+++ b/gcc/ada/sinfo.ads
@@ -2220,6 +2220,14 @@ package Sinfo is
-- on exit from the scope of the use_type_clause, in particular in the
-- case of Use_All_Type, when those operations several scopes.
+ -- Was_Expression_Function (Flag18-Sem)
+ -- Present in N_Subprogram_Body. True if the original source had an
+ -- N_Expression_Function, which was converted to the N_Subprogram_Body
+ -- by Analyze_Expression_Function. This is needed by ASIS to correctly
+ -- recreate the expression function (for the instance body) when the
+ -- completion of a generic function declaration is an expression
+ -- function.
+
-- Was_Originally_Stub (Flag13-Sem)
-- This flag is set in the node for a proper body that replaces stub.
-- During the analysis procedure, stubs in some situations get rewritten
@@ -5212,6 +5220,7 @@ package Sinfo is
-- Is_Task_Master (Flag5-Sem)
-- Was_Originally_Stub (Flag13-Sem)
-- Has_Relative_Deadline_Pragma (Flag9-Sem)
+ -- Was_Expression_Function (Flag18-Sem)
-------------------------
-- Expression Function --
@@ -9795,6 +9804,9 @@ package Sinfo is
function Used_Operations
(N : Node_Id) return Elist_Id; -- Elist5
+ function Was_Expression_Function
+ (N : Node_Id) return Boolean; -- Flag18
+
function Was_Originally_Stub
(N : Node_Id) return Boolean; -- Flag13
@@ -10830,6 +10842,9 @@ package Sinfo is
procedure Set_Used_Operations
(N : Node_Id; Val : Elist_Id); -- Elist5
+ procedure Set_Was_Expression_Function
+ (N : Node_Id; Val : Boolean := True); -- Flag18
+
procedure Set_Was_Originally_Stub
(N : Node_Id; Val : Boolean := True); -- Flag13
@@ -12938,6 +12953,7 @@ package Sinfo is
pragma Inline (Variants);
pragma Inline (Visible_Declarations);
pragma Inline (Used_Operations);
+ pragma Inline (Was_Expression_Function);
pragma Inline (Was_Originally_Stub);
pragma Inline (Withed_Body);
@@ -13277,6 +13293,7 @@ package Sinfo is
pragma Inline (Set_Variant_Part);
pragma Inline (Set_Variants);
pragma Inline (Set_Visible_Declarations);
+ pragma Inline (Set_Was_Expression_Function);
pragma Inline (Set_Was_Originally_Stub);
pragma Inline (Set_Withed_Body);
diff --git a/gcc/ada/sinput.ads b/gcc/ada/sinput.ads
index 76ff651..f1a2724 100644
--- a/gcc/ada/sinput.ads
+++ b/gcc/ada/sinput.ads
@@ -608,7 +608,7 @@ package Sinput is
function Num_Source_Lines (S : Source_File_Index) return Nat;
-- Returns the number of source lines (this is equivalent to reading
-- the value of Last_Source_Line, but returns Nat rather than a
- -- physical line number.
+ -- physical line number).
procedure Register_Source_Ref_Pragma
(File_Name : File_Name_Type;
diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb
index ae0981f..99edf94 100644
--- a/gcc/ada/usage.adb
+++ b/gcc/ada/usage.adb
@@ -360,8 +360,11 @@ begin
-- Line for -gnato switch
+ Write_Switch_Char ("o0");
+ Write_Line ("Disable overflow checking (on by default)");
+
Write_Switch_Char ("o");
- Write_Line ("Enable overflow checking mode to CHECKED (off by default)");
+ Write_Line ("Enable overflow checking in STRICT (-gnato1) mode (default)");
-- Lines for -gnato? switches