sem_util.adb (Wrong_Type): In any instance...
authorEd Schonberg <schonberg@adacore.com>
Thu, 28 May 2015 10:48:29 +0000 (10:48 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 28 May 2015 10:48:29 +0000 (12:48 +0200)
2015-05-28  Ed Schonberg  <schonberg@adacore.com>

* sem_util.adb (Wrong_Type): In any instance, do not emit error
if type of expression is the partial view of the expected type.

2015-05-28  Ed Schonberg  <schonberg@adacore.com>

* sem_res.adb (Resolve_Actuals): a)  The replacement of formal
names in named associations only needs to be done within an
instance, on a call to a primitive of a formal derived type,
where the actual subprogram may have different formal names than
those of the primitive operation of the formal type.
b) Defaulted parameters must be taken into account when obtaining
the names of the formals of the actual subprogram being called.

From-SVN: r223804

gcc/ada/ChangeLog
gcc/ada/sem_res.adb
gcc/ada/sem_util.adb

index c9f142ff7132b9ee1c32f0a86e1c74404295a928..c618018346cc3dbfed8a9520588a304538b70a66 100644 (file)
@@ -1,3 +1,18 @@
+2015-05-28  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_util.adb (Wrong_Type): In any instance, do not emit error
+       if type of expression is the partial view of the expected type.
+
+2015-05-28  Ed Schonberg  <schonberg@adacore.com>
+
+       * sem_res.adb (Resolve_Actuals): a)  The replacement of formal
+       names in named associations only needs to be done within an
+       instance, on a call to a primitive of a formal derived type,
+       where the actual subprogram may have different formal names than
+       those of the primitive operation of the formal type.
+       b) Defaulted parameters must be taken into account when obtaining
+       the names of the formals of the actual subprogram being called.
+
 2015-05-28  Robert Dewar  <dewar@adacore.com>
 
        * sem_ch13.adb, sem_disp.ads: Minor reformatting.
index 0e92867dcc68c97e49bf5042c5668c890ffad981..9492fff6b0d354cca3f1d9a741cbb46156111783 100644 (file)
@@ -3053,11 +3053,12 @@ package body Sem_Res is
       Real_F : Entity_Id;
 
       Real_Subp : Entity_Id;
-      --  If the subprogram being called is an overridden operation,
-      --  Real_Subp is the subprogram that will be called. It may have
-      --  different formal names than the overridden operation, so after
-      --  actual is resolved, the name of the actual in a named association
-      --  must carry the name of the actual of the subprogram being called.
+      --  If the subprogram being called is an inherited operation for
+      --  a formal derived type in an instance, Real_Subp is the subprogram
+      --  that will be called. It may have different formal names than the
+      --  operation of the formal in the generic, so after actual is resolved
+      --  the name of the actual in a named association must carry the name
+      --  of the actual of the subprogram being called.
 
       procedure Check_Aliased_Parameter;
       --  Check rules on aliased parameters and related accessibility rules
@@ -3569,6 +3570,7 @@ package body Sem_Res is
 
       if Is_Overloadable (Nam)
         and then Is_Inherited_Operation (Nam)
+        and then In_Instance
         and then Present (Alias (Nam))
         and then Present (Overridden_Operation (Alias (Nam)))
       then
@@ -4534,10 +4536,6 @@ package body Sem_Res is
 
             Next_Actual (A);
 
-            if Present (Real_Subp) then
-               Next_Formal (Real_F);
-            end if;
-
          --  Case where actual is not present
 
          else
@@ -4545,6 +4543,10 @@ package body Sem_Res is
          end if;
 
          Next_Formal (F);
+
+         if Present (Real_Subp) then
+            Next_Formal (Real_F);
+         end if;
       end loop;
    end Resolve_Actuals;
 
index d749ea1c5fe43bac16a5c6c182643292411dbc50..3fe6d67787bd767aa586be28ad6f2ba5f5121bf2 100644 (file)
@@ -19027,6 +19027,15 @@ package body Sem_Util is
            and then Covers (Full_View (Expected_Type), Etype (Expr))
          then
             return;
+
+         --  Conversely, type of expression may be the private one.
+
+         elsif Is_Private_Type (Base_Type (Etype (Expr)))
+           and then Full_View (Base_Type (Etype (Expr))) =
+             Expected_Type
+         then
+            return;
+
          end if;
       end if;