aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/exp_ch7.adb38
-rw-r--r--gcc/ada/exp_ch7.ads6
-rw-r--r--gcc/ada/libgnat/i-c.ads19
-rw-r--r--gcc/ada/opt.ads4
-rw-r--r--gcc/ada/scng.adb5
-rw-r--r--gcc/ada/sem_ch10.adb3
6 files changed, 12 insertions, 63 deletions
diff --git a/gcc/ada/exp_ch7.adb b/gcc/ada/exp_ch7.adb
index fdacf1c..993c13c 100644
--- a/gcc/ada/exp_ch7.adb
+++ b/gcc/ada/exp_ch7.adb
@@ -965,12 +965,6 @@ package body Exp_Ch7 is
if Restriction_Active (No_Finalization) then
return False;
- -- The System.Finalization_Primitives unit must have been preloaded if
- -- finalization is really required.
-
- elsif not RTU_Loaded (System_Finalization_Primitives) then
- return False;
-
-- Do not consider C and C++ types since it is assumed that the non-Ada
-- side will handle their cleanup.
@@ -8630,38 +8624,6 @@ package body Exp_Ch7 is
return Scope_Stack.Table (Scope_Stack.Last).Node_To_Be_Wrapped;
end Node_To_Be_Wrapped;
- --------------------------------------
- -- Preload_Finalization_Collection --
- --------------------------------------
-
- procedure Preload_Finalization_Collection (Compilation_Unit : Node_Id) is
- begin
- -- We can't call RTE (Finalization_Collection) for at least some
- -- predefined units, because it would introduce cyclic dependences,
- -- as the type is itself a controlled type.
- --
- -- It's only needed when finalization is involved in the unit, which
- -- requires the presence of controlled or class-wide types in the unit
- -- (see the Sem_Util.Needs_Finalization predicate for the rationale).
- -- But controlled types are tagged or contain tagged (sub)components
- -- so it is sufficient for the parser to detect the "interface" and
- -- "tagged" keywords.
- --
- -- Don't do it if Finalization_Collection is unavailable in the runtime
-
- if not In_Predefined_Unit (Compilation_Unit)
- and then (Interface_Seen or else Tagged_Seen)
- and then not No_Run_Time_Mode
- and then RTE_Available (RE_Finalization_Collection)
- then
- declare
- Ignore : constant Entity_Id := RTE (RE_Finalization_Collection);
- begin
- null;
- end;
- end if;
- end Preload_Finalization_Collection;
-
----------------------------
-- Store_Actions_In_Scope --
----------------------------
diff --git a/gcc/ada/exp_ch7.ads b/gcc/ada/exp_ch7.ads
index 386a02b..712671a 100644
--- a/gcc/ada/exp_ch7.ads
+++ b/gcc/ada/exp_ch7.ads
@@ -257,12 +257,6 @@ package Exp_Ch7 is
-- Build a call to suppress the finalization of the object Obj, only after
-- creating the Master_Node of Obj if it does not already exist.
- procedure Preload_Finalization_Collection (Compilation_Unit : Node_Id);
- -- Call RTE (RE_Finalization_Collection) if necessary to load the packages
- -- involved in finalization support. We need to do this explicitly, fairly
- -- early during compilation, because otherwise it happens during freezing,
- -- which triggers visibility bugs in generic instantiations.
-
--------------------------------------------
-- Task and Protected Object finalization --
--------------------------------------------
diff --git a/gcc/ada/libgnat/i-c.ads b/gcc/ada/libgnat/i-c.ads
index fe87fba..f9f9f75 100644
--- a/gcc/ada/libgnat/i-c.ads
+++ b/gcc/ada/libgnat/i-c.ads
@@ -24,6 +24,9 @@ pragma Assertion_Policy (Pre => Ignore,
Contract_Cases => Ignore,
Ghost => Ignore);
+-- Pre/postconditions use a fully qualified name for the standard "+" operator
+-- in order to work around an internal limitation of the compiler.
+
with System;
with System.Parameters;
@@ -146,7 +149,7 @@ is
Pre => not (Append_Nul = False and then Item'Length = 0),
Post => To_C'Result'First = 0
and then To_C'Result'Length =
- (if Append_Nul then Item'Length + 1 else Item'Length)
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length)
and then (for all J in Item'Range =>
To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
and then (if Append_Nul then To_C'Result (To_C'Result'Last) = nul);
@@ -190,7 +193,7 @@ is
with
Relaxed_Initialization => Target,
Pre => Target'Length >=
- (if Append_Nul then Item'Length + 1 else Item'Length),
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length),
Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
and then
(if Count /= 0 then
@@ -287,7 +290,7 @@ is
Pre => not (Append_Nul = False and then Item'Length = 0),
Post => To_C'Result'First = 0
and then To_C'Result'Length =
- (if Append_Nul then Item'Length + 1 else Item'Length)
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length)
and then (for all J in Item'Range =>
To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
and then (if Append_Nul then To_C'Result (To_C'Result'Last) = wide_nul);
@@ -316,7 +319,7 @@ is
with
Relaxed_Initialization => Target,
Pre => Target'Length >=
- (if Append_Nul then Item'Length + 1 else Item'Length),
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length),
Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
and then
(if Count /= 0 then
@@ -408,7 +411,7 @@ is
Pre => not (Append_Nul = False and then Item'Length = 0),
Post => To_C'Result'First = 0
and then To_C'Result'Length =
- (if Append_Nul then Item'Length + 1 else Item'Length)
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length)
and then (for all J in Item'Range =>
To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
and then
@@ -440,7 +443,7 @@ is
with
Relaxed_Initialization => Target,
Pre => Target'Length >=
- (if Append_Nul then Item'Length + 1 else Item'Length),
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length),
Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
and then
(if Count /= 0 then
@@ -528,7 +531,7 @@ is
Pre => not (Append_Nul = False and then Item'Length = 0),
Post => To_C'Result'First = 0
and then To_C'Result'Length =
- (if Append_Nul then Item'Length + 1 else Item'Length)
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length)
and then (for all J in Item'Range =>
To_C'Result (size_t (J - Item'First)) = To_C (Item (J)))
and then
@@ -560,7 +563,7 @@ is
with
Relaxed_Initialization => Target,
Pre => Target'Length >=
- (if Append_Nul then Item'Length + 1 else Item'Length),
+ (if Append_Nul then Standard."+" (Item'Length, 1) else Item'Length),
Post => Count = (if Append_Nul then Item'Length + 1 else Item'Length)
and then
(if Count /= 0 then
diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads
index e56a408..5f402cf 100644
--- a/gcc/ada/opt.ads
+++ b/gcc/ada/opt.ads
@@ -1919,10 +1919,6 @@ package Opt is
-- be in the spec of Expander, but it is referenced by Errout, and it
-- really seems wrong for Errout to depend on Expander.
- Interface_Seen : Boolean := False;
- -- Set True by the parser if the "interface" reserved word is seen. This is
- -- needed in Exp_Ch7 (see that package for documentation).
-
Tagged_Seen : Boolean := False;
-- Set True by the parser if the "tagged" reserved word is seen. This is
-- needed in Exp_Put_Image (see that package for documentation).
diff --git a/gcc/ada/scng.adb b/gcc/ada/scng.adb
index 8b2829f..c9ccc4d 100644
--- a/gcc/ada/scng.adb
+++ b/gcc/ada/scng.adb
@@ -2786,12 +2786,9 @@ package body Scng is
Accumulate_Token_Checksum;
Token := Token_Type'Val (Get_Name_Table_Byte (Token_Name));
- if Token = Tok_Interface then
- Interface_Seen := True;
-
-- See Exp_Put_Image for documentation of Tagged_Seen
- elsif Token = Tok_Tagged then
+ if Token = Tok_Tagged then
Tagged_Seen := True;
end if;
diff --git a/gcc/ada/sem_ch10.adb b/gcc/ada/sem_ch10.adb
index 82b4e1c..73e5388 100644
--- a/gcc/ada/sem_ch10.adb
+++ b/gcc/ada/sem_ch10.adb
@@ -31,7 +31,6 @@ with Einfo; use Einfo;
with Einfo.Entities; use Einfo.Entities;
with Einfo.Utils; use Einfo.Utils;
with Errout; use Errout;
-with Exp_Ch7;
with Exp_Disp; use Exp_Disp;
with Exp_Put_Image;
with Exp_Util; use Exp_Util;
@@ -926,8 +925,6 @@ package body Sem_Ch10 is
Set_Context_Pending (N, False);
- Exp_Ch7.Preload_Finalization_Collection (N);
-
-- If the unit is a package body, the spec is already loaded and must be
-- analyzed first, before we analyze the body.