sem_res.adb (Resolve_Call): Use base type to determine whether a dereference is neede...
authorEd Schonberg <schonberg@adacore.com>
Wed, 6 Aug 2008 08:52:36 +0000 (10:52 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Wed, 6 Aug 2008 08:52:36 +0000 (10:52 +0200)
2008-08-06  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Resolve_Call): Use base type to determine whether a
dereference is needed because a subtype of an access_to_subprogram is
simply an access-subtype

From-SVN: r138779

gcc/ada/sem_res.adb

index b0d46ae72b024c263d77492d9833c8922a94881a..d2e74c27dd62d598501011a67460545e6f2c3c69 100644 (file)
@@ -4696,14 +4696,15 @@ package body Sem_Res is
          end loop;
       end if;
 
-      if Ekind (Etype (Nam)) = E_Access_Subprogram_Type
-         and then Ekind (Typ) /= E_Access_Subprogram_Type
+      if Is_Access_Subprogram_Type (Base_Type (Etype (Nam)))
+         and then not Is_Access_Subprogram_Type (Base_Type (Typ))
          and then Nkind (Subp) /= N_Explicit_Dereference
          and then Present (Parameter_Associations (N))
       then
          --  The prefix is a parameterless function call that returns an
          --  access to subprogram. If parameters are present in the current
-         --  call  add an explicit dereference.
+         --  call  add an explicit dereference. We use the base type here
+         --  because within an instance these may be subtypes.
 
          --  The dereference is added either in Analyze_Call or here. Should
          --  be consolidated ???