This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Do not erase precise type on fixed-point real literal

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.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-07-08  Yannick Moy  <>


	* expander.adb (Expand): Do not reset Analyzed flag always.
	* sem_eval.adb (Fold_Ureal): Mark node as analyzed.
--- gcc/ada/expander.adb
+++ gcc/ada/expander.adb
@@ -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

--- gcc/ada/sem_eval.adb
+++ gcc/ada/sem_eval.adb
@@ -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;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]