[Ada] Do not erase precise type on fixed-point real literal
authorYannick Moy <moy@adacore.com>
Mon, 8 Jul 2019 08:13:52 +0000 (08:13 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 8 Jul 2019 08:13:52 +0000 (08:13 +0000)
Real literals of fixed-point type are expected to keep their precise
fixed-point type in GNATprove. This is now correctly enforced.

There is no impact on compilation.

2019-07-08  Yannick Moy  <moy@adacore.com>

gcc/ada/

* expander.adb (Expand): Do not reset Analyzed flag always.
* sem_eval.adb (Fold_Ureal): Mark node as analyzed.

From-SVN: r273211

gcc/ada/ChangeLog
gcc/ada/expander.adb
gcc/ada/sem_eval.adb

index 1650732e2d68a389fe7f8524d7812dfaaeafcf31..e278295432c035e14b20e975ecc30aa50af8fdde 100644 (file)
@@ -1,3 +1,8 @@
+2019-07-08  Yannick Moy  <moy@adacore.com>
+
+       * expander.adb (Expand): Do not reset Analyzed flag always.
+       * sem_eval.adb (Fold_Ureal): Mark node as analyzed.
+
 2019-07-08  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch9.adb (Expand_N_Timed_Entry_Call): Do not insert twice
index 11711b95750bd7190c4ac09c7baaeb7632f9813b..aac2e7deae5e69e0151d540263128d92ab1975a7 100644 (file)
@@ -112,7 +112,12 @@ package body Expander is
             Expand_SPARK (N);
          end if;
 
-         Set_Analyzed (N, Full_Analysis);
+         --  Do not reset the Analyzed flag if it has been set on purpose
+         --  during preanalysis.
+
+         if Full_Analysis then
+            Set_Analyzed (N);
+         end if;
 
          --  Regular expansion is normally followed by special handling for
          --  transient scopes for unconstrained results, etc. but this is not
index 4956ef371eaaa644f91b2aff95f941524b84a7bf..ff3359fb0e29789230c5695c762c22168133e76a 100644 (file)
@@ -4611,10 +4611,14 @@ package body Sem_Eval is
       --  will cause semantic errors if it is marked as static), and after
       --  the Resolve step (since Resolve in some cases sets this flag).
 
+      --  We mark the node as analyzed so that its type is not erased by
+      --  calling Analyze_Real_Literal.
+
       Analyze (N);
       Set_Is_Static_Expression (N, Static);
       Set_Etype (N, Typ);
       Resolve (N);
+      Set_Analyzed (N);
       Set_Is_Static_Expression (N, Static);
    end Fold_Ureal;