OSDN Git Service

2005-03-08 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Mar 2005 16:14:07 +0000 (16:14 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 15 Mar 2005 16:14:07 +0000 (16:14 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@96505 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/sem_ch4.adb

index 17d9993..21b962c 100644 (file)
@@ -216,8 +216,8 @@ package body Sem_Ch4 is
      (E : Entity_Id;
       P : Node_Id);
    --  Called when P is the prefix of an implicit dereference, denoting an
-   --  object E. If in semantics only mode (-gnatc), record that is a
-   --  reference to E. Normally, such a reference is generated only when the
+   --  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
    --  implicit dereference is expanded into an explicit one. E may be empty,
    --  in which case this procedure does nothing.
 
@@ -1015,10 +1015,19 @@ package body Sem_Ch4 is
          end if;
 
       else
-         Op_Id  := Get_Name_Entity_Id (Name_Op_Concat);
+         Op_Id := Get_Name_Entity_Id (Name_Op_Concat);
          while Present (Op_Id) loop
             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
                Analyze_User_Defined_Binary_Op (N, Op_Id);
             end if;
@@ -4422,8 +4431,9 @@ package body Sem_Ch4 is
       Ref : Node_Id;
 
    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
          --  is not considered as part of an assignment (an implicit
          --  dereference can never assign to its prefix). The Comes_From_Source