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:
parent
482a63fb77
commit
1a8fae9978
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue