[Ada] Do not rewrite argument of pragma Entry_Queue_Length in analysis
authorPiotr Trojanek <trojanek@adacore.com>
Wed, 21 Aug 2019 08:29:56 +0000 (08:29 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 21 Aug 2019 08:29:56 +0000 (08:29 +0000)
It was unusual for the analysis phase of compiler to rewrite static
expression of pragma Entry_Queue_Length with its value. This typically
happens when expanding the AST and only if needed for a given backend.
In particular, GNATprove doesn't need such an expansion and actually
needs the unrewritten AST to detect references to constants declared
with SPARK_Mode => Off within a code with SPARK_Mode => On.

This change has no impact on compilation, so no frontend test is
provided.

2019-08-21  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_prag.adb (Max_Entry_Queue_Length): Do not substitute
expression of the pragma argument with its value during
analysis.
* sem_util.adb (Get_Max_Queue_Length): Compute value of the
pragma argument when needed.

From-SVN: r274781

gcc/ada/ChangeLog
gcc/ada/sem_prag.adb
gcc/ada/sem_util.adb

index e422ee771da008e0733174191e787eaf76572926..1a2ccbc65a971bbc0809efdc948aa781a9b99354 100644 (file)
@@ -1,3 +1,11 @@
+2019-08-21  Piotr Trojanek  <trojanek@adacore.com>
+
+       * sem_prag.adb (Max_Entry_Queue_Length): Do not substitute
+       expression of the pragma argument with its value during
+       analysis.
+       * sem_util.adb (Get_Max_Queue_Length): Compute value of the
+       pragma argument when needed.
+
 2019-08-21  Yannick Moy  <moy@adacore.com>
 
        * checks.adb (Install_Null_Excluding_Check): Do not install
index 4ec8611fccfff8ff79f7626bf30551ec8d4bc89c..5a561ea64b2b3187309f9ccc1a14b86bf751ef8b 100644 (file)
@@ -19599,15 +19599,6 @@ package body Sem_Prag is
 
             end if;
 
-            --  Manually substitute the expression value of the pragma argument
-            --  if it's not an integer literal because this is not taken care
-            --  of automatically elsewhere.
-
-            if Nkind (Arg) /= N_Integer_Literal then
-               Rewrite (Arg, Make_Integer_Literal (Sloc (Arg), Val));
-               Set_Etype (Arg, Etype (Original_Node (Arg)));
-            end if;
-
             Record_Rep_Item (Entry_Id, N);
          end Max_Entry_Queue_Length;
 
index 58b7b0864ee9cb1109db578aecf9fa93cafb2d5d..86ae740b686a464ed81992764b93527b7f587f4c 100644 (file)
@@ -9763,7 +9763,8 @@ package body Sem_Util is
          return Uint_0;
       end if;
 
-      Max := Intval (Expression (First (Pragma_Argument_Associations (Prag))));
+      Max := Expr_Value
+        (Expression (First (Pragma_Argument_Associations (Prag))));
 
       --  Since -1 and 0 are equivalent, return 0 for instances of -1 for
       --  uniformity.