2
0
mirror of git://gcc.gnu.org/git/gcc.git synced 2025-04-09 15:31:07 +08:00

[multiple changes]

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_res.adb (Resolve_Entry_Call): Check whether a protected
	operation is subject to a pragma Eliminate.

2017-09-06  Ed Schonberg  <schonberg@adacore.com>

	* sem_elim.ads, exp_ch4.adb: Minor reformatting.

2017-09-06  Eric Botcazou  <ebotcazou@adacore.com>

	* fe.h (Eliminate_Error_Msg): Remove.

From-SVN: r251755
This commit is contained in:
Arnaud Charlet 2017-09-06 11:22:50 +02:00
parent 3581d5dbf0
commit c7a494c99b
5 changed files with 68 additions and 56 deletions

@ -1,3 +1,17 @@
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* sem_res.adb (Resolve_Entry_Call): Check whether a protected
operation is subject to a pragma Eliminate.
2017-09-06 Ed Schonberg <schonberg@adacore.com>
* sem_elim.ads, exp_ch4.adb: Minor reformatting.
2017-09-06 Eric Botcazou <ebotcazou@adacore.com>
* fe.h (Eliminate_Error_Msg): Remove.
2017-09-05 Richard Sandiford <richard.sandiford@linaro.org>
* gcc-interface/utils.c (make_packable_type): Update call to

@ -128,10 +128,10 @@ package body Exp_Ch4 is
-- Common expansion processing for Boolean operators (And, Or, Xor) for the
-- case of array type arguments.
procedure Expand_Non_Binary_Modular_Op (N : Node_Id);
-- Generating C code convert non-binary modular arithmetic operations into
-- code that relies on the frontend expansion of operator Mod. No expansion
-- is performed if N is not a non-binary modular operand.
procedure Expand_Nonbinary_Modular_Op (N : Node_Id);
-- When generating C code, convert nonbinary modular arithmetic operations
-- into code that relies on the front-end expansion of operator Mod. No
-- expansion is performed if N is not a nonbinary modular operand.
procedure Expand_Short_Circuit_Operator (N : Node_Id);
-- Common expansion processing for short-circuit boolean operators
@ -3962,23 +3962,23 @@ package body Exp_Ch4 is
end if;
end Expand_Membership_Minimize_Eliminate_Overflow;
----------------------------------
-- Expand_Non_Binary_Modular_Op --
----------------------------------
---------------------------------
-- Expand_Nonbinary_Modular_Op --
---------------------------------
procedure Expand_Non_Binary_Modular_Op (N : Node_Id) is
procedure Expand_Nonbinary_Modular_Op (N : Node_Id) is
Loc : constant Source_Ptr := Sloc (N);
Typ : constant Entity_Id := Etype (N);
procedure Expand_Modular_Addition;
-- Expand the modular addition handling the special case of adding a
-- Expand the modular addition, handling the special case of adding a
-- constant.
procedure Expand_Modular_Op;
-- Compute the general rule: (lhs OP rhs) mod Modulus
procedure Expand_Modular_Subtraction;
-- Expand the modular addition handling the special case of subtracting
-- Expand the modular addition, handling the special case of subtracting
-- a constant.
-----------------------------
@ -4048,10 +4048,9 @@ package body Exp_Ch4 is
Mod_Expr : constant Node_Id := New_Op_Node (N_Op_Mod, Loc);
begin
-- Convert non-binary modular type operands into integer or integer
-- values. Thus we avoid never-ending loops expanding them, and we
-- also ensure that the backend never receives non-binary modular
-- type expressions.
-- Convert nonbinary modular type operands into integer values. Thus
-- we avoid never-ending loops expanding them, and we also ensure
-- the back end never receives nonbinary modular type expressions.
if Nkind_In (Nkind (N), N_Op_And, N_Op_Or) then
Set_Left_Opnd (Op_Expr,
@ -4138,10 +4137,10 @@ package body Exp_Ch4 is
end if;
end Expand_Modular_Subtraction;
-- Start of processing for Expand_Non_Binary_Modular_Op
-- Start of processing for Expand_Nonbinary_Modular_Op
begin
-- No action needed if we are not generating C code for a non-binary
-- No action needed if we are not generating C code for a nonbinary
-- modular operand.
if not Modify_Tree_For_C
@ -4171,7 +4170,7 @@ package body Exp_Ch4 is
end case;
Analyze_And_Resolve (N, Typ);
end Expand_Non_Binary_Modular_Op;
end Expand_Nonbinary_Modular_Op;
------------------------
-- Expand_N_Allocator --
@ -6112,7 +6111,7 @@ package body Exp_Ch4 is
if Is_Tagged_Type (Typ) then
-- No expansion will be performed for VM targets, as the VM
-- back-ends will handle the membership tests directly.
-- back ends will handle the membership tests directly.
if Tagged_Type_Expansion then
Tagged_Membership (N, SCIL_Node, New_N);
@ -6370,7 +6369,7 @@ package body Exp_Ch4 is
Right_Opnd => Make_Null (Loc))));
-- No expansion will be performed for VM targets, as
-- the VM back-ends will handle the membership tests
-- the VM back ends will handle the membership tests
-- directly.
if Tagged_Type_Expansion then
@ -6736,7 +6735,7 @@ package body Exp_Ch4 is
-- is an access to protected subprogram, or a subtype thereof. We represent
-- such access values as a record, and so we must replace the occurrence of
-- null by the equivalent record (with a null address and a null pointer in
-- it), so that the backend creates the proper value.
-- it), so that the back end creates the proper value.
procedure Expand_N_Null (N : Node_Id) is
Loc : constant Source_Ptr := Sloc (N);
@ -6856,11 +6855,11 @@ package body Exp_Ch4 is
Check_Float_Op_Overflow (N);
-- Generating C code convert non-binary modular additions into code that
-- relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular additions into code
-- that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Add;
@ -6887,11 +6886,11 @@ package body Exp_Ch4 is
Expand_Intrinsic_Call (N, Entity (N));
end if;
-- Generating C code convert non-binary modular operators into code that
-- relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular operators into code
-- that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_And;
@ -7134,11 +7133,11 @@ package body Exp_Ch4 is
Check_Float_Op_Overflow (N);
-- Generating C code convert non-binary modular divisions into code that
-- relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular divisions into code
-- that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Divide;
@ -7844,7 +7843,7 @@ package body Exp_Ch4 is
-- Otherwise expand the component by component equality. Note that
-- we never use block-bit comparisons for records, because of the
-- problems with gaps. The backend will often be able to recombine
-- problems with gaps. The back end will often be able to recombine
-- the separate comparisons that we generate here.
else
@ -8643,11 +8642,11 @@ package body Exp_Ch4 is
Analyze_And_Resolve (N, Typ);
end if;
-- Generating C code convert non-binary modular minus into code that
-- relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular minus into code
-- that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Minus;
@ -9126,11 +9125,11 @@ package body Exp_Ch4 is
Check_Float_Op_Overflow (N);
-- Generating C code convert non-binary modular multiplications into
-- code that relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular multiplications
-- into code that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Multiply;
@ -9443,11 +9442,11 @@ package body Exp_Ch4 is
Expand_Intrinsic_Call (N, Entity (N));
end if;
-- Generating C code convert non-binary modular operators into code that
-- relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular operators into code
-- that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Or;
@ -9882,11 +9881,11 @@ package body Exp_Ch4 is
Check_Float_Op_Overflow (N);
-- Generating C code convert non-binary modular subtractions into code
-- that relies on the frontend expansion of operator Mod.
-- When generating C code, convert nonbinary modular subtractions into
-- code that relies on the front-end expansion of operator Mod.
if Modify_Tree_For_C then
Expand_Non_Binary_Modular_Op (N);
Expand_Nonbinary_Modular_Op (N);
end if;
end Expand_N_Op_Subtract;
@ -10441,7 +10440,7 @@ package body Exp_Ch4 is
procedure Make_Temporary_For_Slice;
-- Create a named variable for the value of the slice, in cases where
-- the back-end cannot handle it properly, e.g. when packed types or
-- the back end cannot handle it properly, e.g. when packed types or
-- unaligned slices are involved.
-------------------------
@ -11808,7 +11807,7 @@ package body Exp_Ch4 is
-- and then ...
-- and then Lhs.Cmpn = Rhs.Cmpn
-- The expression is folded by the back-end for adjacent fields. This
-- The expression is folded by the back end for adjacent fields. This
-- function is called for tagged record in only one occasion: for imple-
-- menting predefined primitive equality (see Predefined_Primitives_Bodies)
-- otherwise the primitive "=" is used directly.

@ -242,12 +242,6 @@ extern Entity_Id First_Subtype (Entity_Id);
extern Boolean Is_By_Reference_Type (Entity_Id);
extern Boolean Is_Derived_Type (Entity_Id);
/* sem_elim: */
#define Eliminate_Error_Msg sem_elim__eliminate_error_msg
extern void Eliminate_Error_Msg (Node_Id, Entity_Id);
/* sem_eval: */
#define Compile_Time_Known_Value sem_eval__compile_time_known_value

@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
-- Copyright (C) 1997-2008, Free Software Foundation, Inc. --
-- Copyright (C) 1997-2017, 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- --
@ -60,9 +60,9 @@ package Sem_Elim is
-- error will be posted on N.
procedure Eliminate_Error_Msg (N : Node_Id; E : Entity_Id);
-- Called by the front-end and back-end on encountering a reference to an
-- eliminated subprogram. N is the node for the reference (such as occurs
-- in a call or attribute), and E is the entity of the subprogram that has
-- been eliminated.
-- Called by the front-end on encountering a reference to an eliminated
-- subprogram. N is the node for the reference (such as occurs in a call,
-- a protected call or an attribute), and E is the entity of the
-- subprogram that has been eliminated.
end Sem_Elim;

@ -7519,10 +7519,15 @@ package body Sem_Res is
if Nkind (Entry_Name) = N_Selected_Component then
-- Simple entry call
-- Simple entry or protected operation call
Nam := Entity (Selector_Name (Entry_Name));
Obj := Prefix (Entry_Name);
if Is_Subprogram (Nam) then
Check_For_Eliminated_Subprogram (Entry_Name, Nam);
end if;
Was_Over := Is_Overloaded (Selector_Name (Entry_Name));
else pragma Assert (Nkind (Entry_Name) = N_Indexed_Component);