diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 1a8766ae8645f25a6e12f6223c62678a971e75f8..1a9ab72b66a54f114758d2245561b0253d78a7c8 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -4962,8 +4962,9 @@ package body Sem_Res is
          --  We apply the same conversion in the case one of the operands is
          --  a private subtype of the type of the other.
 
-         if Ekind (T) =  E_Anonymous_Access_Type
-           or else Is_Private_Type (T)
+         if Expander_Active
+           and then (Ekind (T) =  E_Anonymous_Access_Type
+                       or else Is_Private_Type (T))
          then
             if Etype (L) /= T then
                Rewrite (L,
@@ -6747,45 +6748,31 @@ package body Sem_Res is
                Opnd_Type := Directly_Designated_Type (Opnd_Type);
             end if;
 
-            declare
-               Save_Typ : constant Entity_Id := Opnd_Type;
-
-            begin
-               if Is_Class_Wide_Type (Opnd_Type) then
-                  Opnd_Type := Etype (Opnd_Type);
-               end if;
-
-               --  Handle subtypes
+            if Is_Class_Wide_Type (Opnd_Type) then
+               Opnd_Type := Etype (Opnd_Type);
+            end if;
 
-               if Ekind (Opnd_Type) = E_Protected_Subtype
-                 or else Ekind (Opnd_Type) = E_Task_Subtype
-               then
-                  Opnd_Type := Etype (Opnd_Type);
-               end if;
+            --  Handle subtypes
 
-               if not Interface_Present_In_Ancestor
-                        (Typ   => Opnd_Type,
-                         Iface => Target_Type)
-               then
-                  --  The static analysis is not enough to know if the
-                  --  interface is implemented or not. Hence we must pass the
-                  --  work to the expander to generate the required code to
-                  --  evaluate the conversion at run-time.
+            if Ekind (Opnd_Type) = E_Protected_Subtype
+              or else Ekind (Opnd_Type) = E_Task_Subtype
+            then
+               Opnd_Type := Etype (Opnd_Type);
+            end if;
 
-                  if Is_Class_Wide_Type (Save_Typ)
-                    and then Is_Interface (Save_Typ)
-                  then
-                     Expand_Interface_Conversion (N, Is_Static => False);
-                  else
-                     Error_Msg_NE
-                       ("(Ada 2005) does not implement interface }",
-                        Operand, Target_Type);
-                  end if;
+            if not Interface_Present_In_Ancestor
+                     (Typ   => Opnd_Type,
+                      Iface => Target_Type)
+            then
+               --  The static analysis is not enough to know if the interface
+               --  is implemented or not. Hence we must pass the work to the
+               --  expander to generate the required code to evaluate the
+               --  conversion at run-time.
 
-               else
-                  Expand_Interface_Conversion (N);
-               end if;
-            end;
+               Expand_Interface_Conversion (N, Is_Static => False);
+            else
+               Expand_Interface_Conversion (N);
+            end if;
          end if;
       end if;
    end Resolve_Type_Conversion;