sem_ch4.adb (Analyze_Concatenation): Do not consider operators marked Eliminated as candidates for resolution.

2005-03-08  Ed Schonberg  <schonberg@adacore.com>

	* sem_ch4.adb (Analyze_Concatenation): Do not consider operators marked
	Eliminated as candidates for resolution. Both efficient, and avoids
	anomalies with operators declared in deleted code.
	(Process_Implicit_Dereference_Prefix): Use this procedure whenever
	expansion is disabled (as when compiling a generic) to prevent spurious
	warnings on prefixes of selected components.

From-SVN: r96505
This commit is contained in:
Ed Schonberg 2005-03-15 17:14:07 +01:00 committed by Arnaud Charlet
parent 482a63fb77
commit 1a8fae9978
1 changed files with 16 additions and 6 deletions

View File

@ -216,8 +216,8 @@ package body Sem_Ch4 is
(E : Entity_Id; (E : Entity_Id;
P : Node_Id); P : Node_Id);
-- Called when P is the prefix of an implicit dereference, denoting an -- Called when P is the prefix of an implicit dereference, denoting an
-- object E. If in semantics only mode (-gnatc), record that is a -- object E. If in semantics only mode (-gnatc or generic), record that is
-- reference to E. Normally, such a reference is generated only when the -- a reference to E. Normally, such a reference is generated only when the
-- implicit dereference is expanded into an explicit one. E may be empty, -- implicit dereference is expanded into an explicit one. E may be empty,
-- in which case this procedure does nothing. -- in which case this procedure does nothing.
@ -1015,10 +1015,19 @@ package body Sem_Ch4 is
end if; end if;
else else
Op_Id := Get_Name_Entity_Id (Name_Op_Concat); Op_Id := Get_Name_Entity_Id (Name_Op_Concat);
while Present (Op_Id) loop while Present (Op_Id) loop
if Ekind (Op_Id) = E_Operator then if Ekind (Op_Id) = E_Operator then
Find_Concatenation_Types (L, R, Op_Id, N);
-- Do not consider operators declared in dead code, they can
-- not be part of the resolution.
if Is_Eliminated (Op_Id) then
null;
else
Find_Concatenation_Types (L, R, Op_Id, N);
end if;
else else
Analyze_User_Defined_Binary_Op (N, Op_Id); Analyze_User_Defined_Binary_Op (N, Op_Id);
end if; end if;
@ -4422,8 +4431,9 @@ package body Sem_Ch4 is
Ref : Node_Id; Ref : Node_Id;
begin begin
if Operating_Mode = Check_Semantics and then Present (E) then if Present (E)
and then (Operating_Mode = Check_Semantics or else not Expander_Active)
then
-- We create a dummy reference to E to ensure that the reference -- We create a dummy reference to E to ensure that the reference
-- is not considered as part of an assignment (an implicit -- is not considered as part of an assignment (an implicit
-- dereference can never assign to its prefix). The Comes_From_Source -- dereference can never assign to its prefix). The Comes_From_Source