sem_ch3.adb (Analyze_Object_Declaration): Do not consider internally generated expres...
authorHristian Kirtchev <kirtchev@adacore.com>
Mon, 18 Apr 2016 10:27:19 +0000 (10:27 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 18 Apr 2016 10:27:19 +0000 (12:27 +0200)
2016-04-18  Hristian Kirtchev  <kirtchev@adacore.com>

* sem_ch3.adb (Analyze_Object_Declaration): Do not consider
internally generated expressions when trying to determine whether
a formal parameter of a tagged type subject to Extensions_Visible
False is used to initialize an object.
* sem_ch4.adb (Analyze_Type_Conversion): Do not consider
internally generated expressions when trying to determine whether
a formal parameter of a tagged type subject to Extensions_Visible
False is used in a type conversion.

From-SVN: r235117

gcc/ada/ChangeLog
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch4.adb

index fd8d79ada7678b4786a8519f6cbd32d6baa7ad9e..11833965241fb157de3141206a13e98a00dee4d9 100644 (file)
@@ -1,3 +1,14 @@
+2016-04-18  Hristian Kirtchev  <kirtchev@adacore.com>
+
+       * sem_ch3.adb (Analyze_Object_Declaration): Do not consider
+       internally generated expressions when trying to determine whether
+       a formal parameter of a tagged type subject to Extensions_Visible
+       False is used to initialize an object.
+       * sem_ch4.adb (Analyze_Type_Conversion): Do not consider
+       internally generated expressions when trying to determine whether
+       a formal parameter of a tagged type subject to Extensions_Visible
+       False is used in a type conversion.
+
 2016-04-18  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * sem_res.adb (Is_Protected_Operation_Call):
index d401bd181a3dfb3eaf433a44de9414007d53d252..56e8a74f2bff9c7040b387d6076a4816eaf961c9 100644 (file)
@@ -3776,9 +3776,13 @@ package body Sem_Ch3 is
          --  A formal parameter of a specific tagged type whose related
          --  subprogram is subject to pragma Extensions_Visible with value
          --  "False" cannot be implicitly converted to a class-wide type by
-         --  means of an initialization expression (SPARK RM 6.1.7(3)).
+         --  means of an initialization expression (SPARK RM 6.1.7(3)). Do
+         --  not consider internally generated expressions.
 
-         if Is_Class_Wide_Type (T) and then Is_EVF_Expression (E) then
+         if Is_Class_Wide_Type (T)
+           and then Comes_From_Source (E)
+           and then Is_EVF_Expression (E)
+         then
             Error_Msg_N
               ("formal parameter with Extensions_Visible False cannot be "
                & "implicitly converted to class-wide type", E);
index d84ef6638db39084065045084ea7fb07eff7832d..bdcf0e112e15c708f108da4d7c1356db50334632 100644 (file)
@@ -5158,9 +5158,13 @@ package body Sem_Ch4 is
 
       --  A formal parameter of a specific tagged type whose related subprogram
       --  is subject to pragma Extensions_Visible with value "False" cannot
-      --  appear in a class-wide conversion (SPARK RM 6.1.7(3)).
+      --  appear in a class-wide conversion (SPARK RM 6.1.7(3)). Do not check
+      --  internally generated expressions.
 
-      if Is_Class_Wide_Type (Typ) and then Is_EVF_Expression (Expr) then
+      if Is_Class_Wide_Type (Typ)
+        and then Comes_From_Source (Expr)
+        and then Is_EVF_Expression (Expr)
+      then
          Error_Msg_N
            ("formal parameter with Extensions_Visible False cannot be "
             & "converted to class-wide type", Expr);
@@ -6602,7 +6606,7 @@ package body Sem_Ch4 is
             --  Boolean, then we know that the other operand cannot resolve to
             --  Boolean (since we got no interpretations), but in that case we
             --  pretty much know that the other operand should be Boolean, so
-            --  resolve it that way (generating an error)
+            --  resolve it that way (generating an error).
 
             elsif Nkind_In (N, N_Op_And, N_Op_Or, N_Op_Xor) then
                if Etype (L) = Standard_Boolean then