aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2017-04-25 10:29:46 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2017-04-25 10:29:46 +0200
commitb03d3f7390b5744c5fdf54a73fec6a28a8849a1b (patch)
tree691d77965f13f8c705799f5af8dff2f0c25fc955 /gcc
parent18e829474cbb8624570a9836ceee1d8544b0ace7 (diff)
downloadgcc-b03d3f7390b5744c5fdf54a73fec6a28a8849a1b.zip
gcc-b03d3f7390b5744c5fdf54a73fec6a28a8849a1b.tar.gz
gcc-b03d3f7390b5744c5fdf54a73fec6a28a8849a1b.tar.bz2
[multiple changes]
2017-04-25 Javier Miranda <miranda@adacore.com> * exp_ch3.adb (Build_Initialization_Call): Handle subtypes of private types when searching for the underlying full view of a private type. 2017-04-25 Javier Miranda <miranda@adacore.com> * sem_res.adb (Set_Mixed_Mode_Operand): A universal real conditional expression can appear in a fixed-type context and must be resolved with that context to facilitate the code generation to the backend. 2017-04-25 Ed Schonberg <schonberg@adacore.com> * einfo.adb, einfo.ads (Body_Needed_For_Inlining): New flag, to indicate whether during inline processing, when some unit U1 appears in the context of a unit U2 compiled for instantiation or inlining purposes, the body of U1 needs to be compiled as well. * sem_prag.adb (Process_Inline): Set Body_Needed_For_Inlining if context is a package declaration. * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration, Analyze_Generic_Package_Declaration): ditto. * inline.adb (Analyze_Inlined_Bodies): Check Body_Needed_For_Inlining. 2017-04-25 Ed Schonberg <schonberg@adacore.com> * par.adb (Current_Assign_Node): Global variable use to record the presence of a target_name in the right hand side of the assignment being parsed. * par-ch4.adb (P_Name): If the name is a target_name, mark the enclosing assignment node accordingly. * par-ch5.adb (P_Assignment_Statement): Set Current_Assign_Node appropriately. * sem_ch5.adb (Analyze_Assignment): Disable expansion before analyzing RHS if the statement has target_names. * sem_aggr.adb (Resolve_Iterated_Component_Association): Handle properly choices that are subtype marks. * exp_ch5.adb: Code cleanup. 2017-04-25 Bob Duff <duff@adacore.com> * s-memory.adb: Add a comment regarding efficiency. * atree.adb: Fix the assertion, and combine 2 assertions into one, "the source has an extension if and only if the destination does." * sem_ch3.adb, sem_ch13.adb: Address ??? comments. 2017-04-25 Arnaud Charlet <charlet@adacore.com trojanek> * a-tasatt.adb (Set_Value): Fix handling of 32bits -> 64bits conversion. 2017-04-25 Doug Rupp <rupp@adacore.com> * init.c (__gnat_error_handler) [vxworks]: Turn on sigtramp handling for ppc64-vx7. * sigtramp-vxworks-target.inc [SIGTRAMP_BODY]: Add section for ppc64-vx7. From-SVN: r247146
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog60
-rw-r--r--gcc/ada/a-tasatt.adb6
-rw-r--r--gcc/ada/atree.adb8
-rw-r--r--gcc/ada/einfo.adb16
-rw-r--r--gcc/ada/einfo.ads13
-rw-r--r--gcc/ada/exp_ch3.adb6
-rw-r--r--gcc/ada/exp_ch5.adb8
-rw-r--r--gcc/ada/init.c2
-rw-r--r--gcc/ada/inline.adb10
-rw-r--r--gcc/ada/par-ch4.adb4
-rw-r--r--gcc/ada/par-ch5.adb2
-rw-r--r--gcc/ada/par.adb6
-rw-r--r--gcc/ada/s-memory.adb2
-rw-r--r--gcc/ada/sem_aggr.adb16
-rw-r--r--gcc/ada/sem_ch12.adb20
-rw-r--r--gcc/ada/sem_ch13.adb2
-rw-r--r--gcc/ada/sem_ch3.adb2
-rw-r--r--gcc/ada/sem_ch5.adb13
-rw-r--r--gcc/ada/sem_prag.adb11
-rw-r--r--gcc/ada/sem_res.adb10
-rw-r--r--gcc/ada/sigtramp-vxworks-target.inc32
21 files changed, 224 insertions, 25 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d74dfff..ee46f95 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,63 @@
+2017-04-25 Javier Miranda <miranda@adacore.com>
+
+ * exp_ch3.adb (Build_Initialization_Call): Handle
+ subtypes of private types when searching for the underlying full
+ view of a private type.
+
+2017-04-25 Javier Miranda <miranda@adacore.com>
+
+ * sem_res.adb (Set_Mixed_Mode_Operand): A universal
+ real conditional expression can appear in a fixed-type context
+ and must be resolved with that context to facilitate the code
+ generation to the backend.
+
+2017-04-25 Ed Schonberg <schonberg@adacore.com>
+
+ * einfo.adb, einfo.ads (Body_Needed_For_Inlining): New flag,
+ to indicate whether during inline processing, when some unit U1
+ appears in the context of a unit U2 compiled for instantiation
+ or inlining purposes, the body of U1 needs to be compiled as well.
+ * sem_prag.adb (Process_Inline): Set Body_Needed_For_Inlining if
+ context is a package declaration.
+ * sem_ch12.adb (Analyze_Generic_Subprogram_Declaration,
+ Analyze_Generic_Package_Declaration): ditto.
+ * inline.adb (Analyze_Inlined_Bodies): Check
+ Body_Needed_For_Inlining.
+
+2017-04-25 Ed Schonberg <schonberg@adacore.com>
+
+ * par.adb (Current_Assign_Node): Global variable use to record
+ the presence of a target_name in the right hand side of the
+ assignment being parsed.
+ * par-ch4.adb (P_Name): If the name is a target_name, mark the
+ enclosing assignment node accordingly.
+ * par-ch5.adb (P_Assignment_Statement): Set Current_Assign_Node
+ appropriately.
+ * sem_ch5.adb (Analyze_Assignment): Disable expansion before
+ analyzing RHS if the statement has target_names.
+ * sem_aggr.adb (Resolve_Iterated_Component_Association): Handle
+ properly choices that are subtype marks.
+ * exp_ch5.adb: Code cleanup.
+
+2017-04-25 Bob Duff <duff@adacore.com>
+
+ * s-memory.adb: Add a comment regarding efficiency.
+ * atree.adb: Fix the assertion, and combine 2 assertions into one,
+ "the source has an extension if and only if the destination does."
+ * sem_ch3.adb, sem_ch13.adb: Address ??? comments.
+
+2017-04-25 Arnaud Charlet <charlet@adacore.com trojanek>
+
+ * a-tasatt.adb (Set_Value): Fix handling of 32bits -> 64bits
+ conversion.
+
+2017-04-25 Doug Rupp <rupp@adacore.com>
+
+ * init.c (__gnat_error_handler) [vxworks]: Turn on sigtramp
+ handling for ppc64-vx7.
+ * sigtramp-vxworks-target.inc
+ [SIGTRAMP_BODY]: Add section for ppc64-vx7.
+
2017-04-25 Arnaud Charlet <charlet@adacore.com>
* ada_get_targ.adb: New file.
diff --git a/gcc/ada/a-tasatt.adb b/gcc/ada/a-tasatt.adb
index 1eb7d59..703d140 100644
--- a/gcc/ada/a-tasatt.adb
+++ b/gcc/ada/a-tasatt.adb
@@ -302,7 +302,11 @@ package body Ada.Task_Attributes is
-- No finalization needed, simply set to Val
- TT.Attributes (Index) := To_Address (Val);
+ if Attribute'Size = Integer'Size then
+ TT.Attributes (Index) := Atomic_Address (To_Int (Val));
+ else
+ TT.Attributes (Index) := To_Address (Val);
+ end if;
else
Self_Id := STPO.Self;
diff --git a/gcc/ada/atree.adb b/gcc/ada/atree.adb
index 29251c2..9137602 100644
--- a/gcc/ada/atree.adb
+++ b/gcc/ada/atree.adb
@@ -767,16 +767,12 @@ package body Atree is
-- Deal with copying extension nodes if present. No need to copy flags
-- table entries, since they are always zero for extending components.
- if Has_Extension (Source) then
- pragma Assert (Has_Extension (Destination));
+ pragma Assert (Has_Extension (Source) = Has_Extension (Destination));
+ if Has_Extension (Source) then
for J in 1 .. Num_Extension_Nodes loop
Nodes.Table (Destination + J) := Nodes.Table (Source + J);
end loop;
-
- else
- pragma Assert (not Has_Extension (Source));
- null;
end if;
end Copy_Node;
diff --git a/gcc/ada/einfo.adb b/gcc/ada/einfo.adb
index e97d147..e01abdd 100644
--- a/gcc/ada/einfo.adb
+++ b/gcc/ada/einfo.adb
@@ -615,10 +615,9 @@ package body Einfo is
-- Has_Partial_Visible_Refinement Flag296
-- Is_Entry_Wrapper Flag297
-- Is_Underlying_Full_View Flag298
+ -- Body_Needed_For_Inlining Flag299
- -- (unused) Flag299
-- (unused) Flag300
-
-- (unused) Flag301
-- (unused) Flag302
-- (unused) Flag303
@@ -829,6 +828,12 @@ package body Einfo is
return Node19 (Id);
end Body_Entity;
+ function Body_Needed_For_Inlining (Id : E) return B is
+ begin
+ pragma Assert (Ekind (Id) = E_Package);
+ return Flag299 (Id);
+ end Body_Needed_For_Inlining;
+
function Body_Needed_For_SAL (Id : E) return B is
begin
pragma Assert
@@ -3861,6 +3866,12 @@ package body Einfo is
Set_Node19 (Id, V);
end Set_Body_Entity;
+ procedure Set_Body_Needed_For_Inlining (Id : E; V : B := True) is
+ begin
+ pragma Assert (Ekind (Id) = E_Package);
+ Set_Flag299 (Id, V);
+ end Set_Body_Needed_For_Inlining;
+
procedure Set_Body_Needed_For_SAL (Id : E; V : B := True) is
begin
pragma Assert
@@ -9252,6 +9263,7 @@ package body Einfo is
W ("Address_Taken", Flag104 (Id));
W ("Body_Needed_For_SAL", Flag40 (Id));
+ W ("Body_Needed_For_Inlining", Flag299 (Id));
W ("C_Pass_By_Copy", Flag125 (Id));
W ("Can_Never_Be_Null", Flag38 (Id));
W ("Checks_May_Be_Suppressed", Flag31 (Id));
diff --git a/gcc/ada/einfo.ads b/gcc/ada/einfo.ads
index 5a762abc..a08d5d2 100644
--- a/gcc/ada/einfo.ads
+++ b/gcc/ada/einfo.ads
@@ -529,6 +529,14 @@ package Einfo is
-- units. Indicates that the source for the body must be included
-- when the unit is part of a standalone library.
+-- Body_Needed_For_Inlining (Flag299)
+-- Defined in package entities that are compilation units. Used to
+-- determine whether the body unit needs to be compiled when the
+-- package declaration appears in the list of units to inline. A body
+-- is needed for inline processing if the unit declaration contains
+-- functions that carry pragma Inline or Inline_Always, or if it
+-- contains a generic unit that requires a body.
+--
-- Body_References (Elist16)
-- Defined in abstract state entities. Contains an element list of
-- references (identifiers) that appear in a package body whose spec
@@ -6238,6 +6246,7 @@ package Einfo is
-- SPARK_Pragma (Node40)
-- SPARK_Aux_Pragma (Node41)
-- Delay_Subprogram_Descriptors (Flag50)
+ -- Body_Needed_For_Inlining (Flag299)
-- Body_Needed_For_SAL (Flag40)
-- Contains_Ignored_Ghost_Code (Flag279)
-- Discard_Names (Flag88)
@@ -6880,6 +6889,7 @@ package Einfo is
function Block_Node (Id : E) return N;
function Body_Entity (Id : E) return E;
function Body_Needed_For_SAL (Id : E) return B;
+ function Body_Needed_For_Inlining (Id : E) return B;
function Body_References (Id : E) return L;
function C_Pass_By_Copy (Id : E) return B;
function Can_Never_Be_Null (Id : E) return B;
@@ -7563,6 +7573,7 @@ package Einfo is
procedure Set_BIP_Initialization_Call (Id : E; V : N);
procedure Set_Block_Node (Id : E; V : N);
procedure Set_Body_Entity (Id : E; V : E);
+ procedure Set_Body_Needed_For_Inlining (Id : E; V : B := True);
procedure Set_Body_Needed_For_SAL (Id : E; V : B := True);
procedure Set_Body_References (Id : E; V : L);
procedure Set_C_Pass_By_Copy (Id : E; V : B := True);
@@ -8365,6 +8376,7 @@ package Einfo is
pragma Inline (BIP_Initialization_Call);
pragma Inline (Block_Node);
pragma Inline (Body_Entity);
+ pragma Inline (Body_Needed_For_Inlining);
pragma Inline (Body_Needed_For_SAL);
pragma Inline (Body_References);
pragma Inline (C_Pass_By_Copy);
@@ -8886,6 +8898,7 @@ package Einfo is
pragma Inline (Set_BIP_Initialization_Call);
pragma Inline (Set_Block_Node);
pragma Inline (Set_Body_Entity);
+ pragma Inline (Set_Body_Needed_For_Inlining);
pragma Inline (Set_Body_Needed_For_SAL);
pragma Inline (Set_Body_References);
pragma Inline (Set_C_Pass_By_Copy);
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 788cf7f..2033179 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -1451,6 +1451,12 @@ package body Exp_Ch3 is
elsif Is_Generic_Actual_Type (Full_Type) then
Full_Type := Base_Type (Full_Type);
+ elsif Ekind (Full_Type) = E_Private_Subtype
+ and then (not Has_Discriminants (Full_Type)
+ or else No (Discriminant_Constraint (Full_Type)))
+ then
+ Full_Type := Etype (Full_Type);
+
-- The loop has recovered the [underlying] full view, stop the
-- traversal.
diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
index 6a808a3..cd555b4 100644
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -1638,6 +1638,14 @@ package body Exp_Ch5 is
begin
if Nkind (N) = N_Target_Name then
Rewrite (N, New_Occurrence_Of (Ent, Sloc (N)));
+
+ -- The expression will be reanalyzed when the enclosing assignment
+ -- is reanalyzed, so reset the entity, which may be a temporary
+ -- created during analysis, e.g. a loop variable for an iterated
+ -- component association.
+
+ elsif Is_Entity_Name (N) then
+ Set_Entity (N, Empty);
end if;
Set_Analyzed (N, False);
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 07155f0..e180f3c 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -2005,7 +2005,7 @@ __gnat_error_handler (int sig, siginfo_t *si, void *sc)
sigdelset (&mask, sig);
sigprocmask (SIG_SETMASK, &mask, NULL);
-#if defined (__ARMEL__) || (defined (__PPC__) && !defined (__PPC64__)) || defined (__i386__) || defined (__x86_64__)
+#if defined (__ARMEL__) || defined (__PPC__) || defined (__i386__) || defined (__x86_64__)
/* On certain targets, kernel mode, we process signals through a Call Frame
Info trampoline, voiding the need for myriads of fallback_frame_state
variants in the ZCX runtime. We have no simple way to distinguish ZCX
diff --git a/gcc/ada/inline.adb b/gcc/ada/inline.adb
index 78d921a..c20a2df 100644
--- a/gcc/ada/inline.adb
+++ b/gcc/ada/inline.adb
@@ -744,14 +744,18 @@ package body Inline is
Comp_Unit := Parent (Comp_Unit);
end loop;
- -- Load the body, unless it is the main unit, or is an instance
- -- whose body has already been analyzed.
+ -- Load the body if it exists and contains inlineable entities,
+ -- unless it is the main unit, or is an instance whose body has
+ -- already been analyzed.
if Present (Comp_Unit)
and then Comp_Unit /= Cunit (Main_Unit)
and then Body_Required (Comp_Unit)
and then (Nkind (Unit (Comp_Unit)) /= N_Package_Declaration
- or else No (Corresponding_Body (Unit (Comp_Unit))))
+ or else
+ (No (Corresponding_Body (Unit (Comp_Unit)))
+ and then Body_Needed_For_Inlining
+ (Defining_Entity (Unit (Comp_Unit)))))
then
declare
Bname : constant Unit_Name_Type :=
diff --git a/gcc/ada/par-ch4.adb b/gcc/ada/par-ch4.adb
index 4e6c8a7..d500e58 100644
--- a/gcc/ada/par-ch4.adb
+++ b/gcc/ada/par-ch4.adb
@@ -235,6 +235,10 @@ package body Ch4 is
if Token = Tok_At_Sign then
Scan_Reserved_Identifier (Force_Msg => False);
+
+ if Present (Current_Assign_Node) then
+ Set_Has_Target_Names (Current_Assign_Node);
+ end if;
end if;
Name_Node := Token_Node;
diff --git a/gcc/ada/par-ch5.adb b/gcc/ada/par-ch5.adb
index 5d8b45c..2d975ef 100644
--- a/gcc/ada/par-ch5.adb
+++ b/gcc/ada/par-ch5.adb
@@ -1067,9 +1067,11 @@ package body Ch5 is
begin
Assign_Node := New_Node (N_Assignment_Statement, Prev_Token_Ptr);
+ Current_Assign_Node := Assign_Node;
Set_Name (Assign_Node, LHS);
Set_Expression (Assign_Node, P_Expression_No_Right_Paren);
TF_Semicolon;
+ Current_Assign_Node := Empty;
return Assign_Node;
end P_Assignment_Statement;
diff --git a/gcc/ada/par.adb b/gcc/ada/par.adb
index d3c069a..6c39e33 100644
--- a/gcc/ada/par.adb
+++ b/gcc/ada/par.adb
@@ -595,6 +595,12 @@ function Par (Configuration_Pragmas : Boolean) return List_Id is
-- this may not be worth the effort. Also we could deal with the same
-- situation for EXIT with a label, but for now don't bother with that.
+ Current_Assign_Node : Node_Id := Empty;
+ -- This is the node of the current assignment statement being compiled.
+ -- It is used to record the presence of target_names on its RHS. This
+ -- context-dependent trick simplifies the analysis of such nodes, where
+ -- the RHS must first be analyzed with expansion disabled.
+
---------------------------------
-- Parsing Routines by Chapter --
---------------------------------
diff --git a/gcc/ada/s-memory.adb b/gcc/ada/s-memory.adb
index f419b47..870b68a 100644
--- a/gcc/ada/s-memory.adb
+++ b/gcc/ada/s-memory.adb
@@ -73,6 +73,8 @@ package body System.Memory is
-- return Null_Address, and then we can check for that special value.
-- However, that doesn't work on VxWorks, because malloc(size_t'Last)
-- prints an unwanted warning message before returning Null_Address.
+ -- Note that the branch is correctly predicted on modern hardware, so
+ -- there is negligible overhead.
if Size = size_t'Last then
raise Storage_Error with "object too large";
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index efa5d60..223a59f 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -1664,7 +1664,19 @@ package body Sem_Aggr is
Others_Present := True;
else
- Analyze_And_Resolve (Choice, Index_Typ);
+ Analyze (Choice);
+
+ -- Choice can be a subtype name, a range, or an expression.
+
+ if Is_Entity_Name (Choice)
+ and then Is_Type (Entity (Choice))
+ and then Base_Type (Entity (Choice)) = Base_Type (Index_Typ)
+ then
+ null;
+
+ else
+ Analyze_And_Resolve (Choice, Index_Typ);
+ end if;
end if;
Next (Choice);
@@ -1681,6 +1693,8 @@ package body Sem_Aggr is
-- Decorate the index variable in the current scope. The association
-- may have several choices, each one leading to a loop, so we create
-- this variable only once to prevent homonyms in this scope.
+ -- The expression has to be analyzed once the index variable is
+ -- directly visible.
if No (Scope (Id)) then
Enter_Name (Id);
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index c435336..bc82410 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -3374,6 +3374,14 @@ package body Sem_Ch12 is
End_Package_Scope (Id);
Exit_Generic_Scope (Id);
+ -- If the generic appears within a package unit, the body of that unit
+ -- has to be present for instantiation and inlining.
+
+ if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration then
+ Set_Body_Needed_For_Inlining
+ (Defining_Entity (Unit (Cunit (Current_Sem_Unit))));
+ end if;
+
if Nkind (Parent (N)) /= N_Compilation_Unit then
Move_Freeze_Nodes (Id, N, Visible_Declarations (Specification (N)));
Move_Freeze_Nodes (Id, N, Private_Declarations (Specification (N)));
@@ -3552,6 +3560,16 @@ package body Sem_Ch12 is
Set_Body_Required (Parent (N), Unit_Requires_Body (Id));
end if;
+ -- If the generic appears within a package unit, the body of that unit
+ -- has to be present for instantiation and inlining.
+
+ if Nkind (Unit (Cunit (Current_Sem_Unit))) = N_Package_Declaration
+ and then Unit_Requires_Body (Id)
+ then
+ Set_Body_Needed_For_Inlining
+ (Defining_Entity (Unit (Cunit (Current_Sem_Unit))));
+ end if;
+
Set_Categorization_From_Pragmas (N);
Validate_Categorization_Dependency (N, Id);
@@ -3724,6 +3742,8 @@ package body Sem_Ch12 is
-- Turn off style checking in instances. If the check is enabled on the
-- generic unit, a warning in an instance would just be noise. If not
-- enabled on the generic, then a warning in an instance is just wrong.
+ -- This must be done after analyzing the actuals, which do come from
+ -- source and are subject to style checking.
Style_Check := False;
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index e796ab3..ce47fd8 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/gcc/ada/sem_ch13.adb
@@ -12754,7 +12754,7 @@ package body Sem_Ch13 is
elsif Nkind (N) = N_Identifier and then Chars (N) /= Chars (E) then
Find_Direct_Name (N);
- if True or else not ASIS_Mode then -- ????
+ if not ASIS_Mode then
Set_Entity (N, Empty);
end if;
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index cc06b92..ed385dd 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -2574,7 +2574,7 @@ package body Sem_Ch3 is
-- rejected. Pending notification we restrict this call to
-- ASIS mode.
- if False and then ASIS_Mode then -- ????
+ if ASIS_Mode then
Resolve_Aspects;
end if;
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index c5f4732..8babb8a 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -300,6 +300,10 @@ package body Sem_Ch5 is
-- Ghost entity. Set the mode now to ensure that any nodes generated
-- during analysis and expansion are properly marked as Ghost.
+ if Has_Target_Names (N) then
+ Expander_Mode_Save_And_Set (False);
+ end if;
+
Mark_And_Set_Ghost_Assignment (N, Mode);
Analyze (Rhs);
@@ -3546,15 +3550,6 @@ package body Sem_Ch5 is
else
Set_Has_Target_Names (Parent (Current_LHS));
Set_Etype (N, Etype (Current_LHS));
-
- -- Disable expansion for the rest of the analysis of the current
- -- right-hand side. The enclosing assignment statement will be
- -- rewritten during expansion, together with occurrences of the
- -- target name.
-
- if Expander_Active then
- Expander_Mode_Save_And_Set (False);
- end if;
end if;
end Analyze_Target_Name;
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index 3889d004b..e9c9419 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -9112,6 +9112,17 @@ package body Sem_Prag is
Next (Assoc);
end loop;
+
+ -- If the context is a package declaration, the pragma indicates
+ -- that inlining will require the presence of the corresponding
+ -- body. (this may be further refined).
+
+ if not In_Instance
+ and then Nkind (Unit (Cunit (Current_Sem_Unit)))
+ = N_Package_Declaration
+ then
+ Set_Body_Needed_For_Inlining (Cunit_Entity (Current_Sem_Unit));
+ end if;
end Process_Inline;
----------------------------
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 3d6c395..337b122 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -5353,6 +5353,16 @@ package body Sem_Res is
Resolve (Op2, T2);
end;
+ -- A universal real conditional expression can appear in a fixed-type
+ -- context and must be resolved with that context to facilitate the
+ -- code generation to the backend.
+
+ elsif Nkind_In (N, N_Case_Expression, N_If_Expression)
+ and then Etype (N) = Universal_Real
+ and then Is_Fixed_Point_Type (B_Typ)
+ then
+ Resolve (N, B_Typ);
+
else
Resolve (N);
end if;
diff --git a/gcc/ada/sigtramp-vxworks-target.inc b/gcc/ada/sigtramp-vxworks-target.inc
index 722dd31..8eacfd8 100644
--- a/gcc/ada/sigtramp-vxworks-target.inc
+++ b/gcc/ada/sigtramp-vxworks-target.inc
@@ -274,6 +274,7 @@ TCR(".cfi_return_column " S(REGNO_PC))
/* Trampoline body block
--------------------- */
+#if !defined (__PPC64__)
#define SIGTRAMP_BODY \
CR("") \
TCR("# Allocate frame and save the non-volatile") \
@@ -298,6 +299,37 @@ TCR("mtlr %r0") \
TCR("") \
TCR("addi %r1,%r1,16") \
TCR("blr")
+#else
+#define SIGTRAMP_BODY \
+CR("") \
+TCR("0:") \
+TCR("addis 2,12,.TOC.-0@ha") \
+TCR("addi 2,2,.TOC.-0@l") \
+TCR("# Allocate frame and save the non-volatile") \
+TCR("# registers we're going to modify") \
+TCR("mflr %r0") \
+TCR("std %r0,16(%r1)") \
+TCR("stdu %r1,-32(%r1)") \
+TCR("std %r2,24(%r1)") \
+TCR("std %r" S(CFA_REG) ",8(%r1)") \
+TCR("") \
+TCR("# Setup CFA_REG = context, which we'll retrieve as our CFA value") \
+TCR("mr %r" S(CFA_REG) ", %r7") \
+TCR("") \
+TCR("# Call the real handler. The signo, siginfo and sigcontext") \
+TCR("# arguments are the same as those we received in r3, r4 and r5") \
+TCR("mr %r12,%r6") \
+TCR("mtctr %r6") \
+TCR("bctrl") \
+TCR("") \
+TCR("# Restore our callee-saved items, release our frame and return") \
+TCR("ld %r" S(CFA_REG) ",8(%r1)") \
+TCR("ld %r2,24(%r1)") \
+TCR("addi %r1,%r1,32") \
+TCR("ld %r0,16(%r1)") \
+TCR("mtlr %r0") \
+TCR("blr")
+#endif
#elif defined (__ARMEL__)