gnat1drv.adb (Adjust_Global_Switches): Adjust settings.
authorArnaud Charlet <charlet@adacore.com>
Fri, 23 Oct 2015 10:46:27 +0000 (10:46 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 23 Oct 2015 10:46:27 +0000 (12:46 +0200)
2015-10-23  Arnaud Charlet  <charlet@adacore.com>

* gnat1drv.adb (Adjust_Global_Switches): Adjust settings.
* sem.adb (Semantics): Remove special case.

From-SVN: r229230

gcc/ada/ChangeLog
gcc/ada/gnat1drv.adb
gcc/ada/restrict.adb
gcc/ada/sem.adb

index 5235631e0693440bf96769d1eebae4374b78179b..b66d29ff12b7639c5539c7498fd026aadfebf05a 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-23  Arnaud Charlet  <charlet@adacore.com>
+
+       * gnat1drv.adb (Adjust_Global_Switches): Adjust settings.
+       * sem.adb (Semantics): Remove special case.
+
 2015-10-23  Gary Dismukes  <dismukes@adacore.com>
 
        * bindgen.adb, restrict.adb: Minor spelling/grammar fixes.
index bd3af2ef2714f642b205d6421cfd014c3048ec12..88cc9c0b8b0b2d44492d0086cf8cb0c5e0f1262e 100644 (file)
@@ -136,17 +136,34 @@ procedure Gnat1drv is
          Unnest_Subprogram_Mode := True;
       end if;
 
-      --  -gnatd.V or -gnatd.u enables special C expansion mode
+      --  -gnatd.u enables special C expansion mode
 
-      if Debug_Flag_Dot_VV or Debug_Flag_Dot_U then
+      if Debug_Flag_Dot_U then
          Modify_Tree_For_C := True;
       end if;
 
-      --  Other flags set if we are generating C code
+      --  Set all flags required when generating C code (-gnatd.V)
 
       if Debug_Flag_Dot_VV then
          Generate_C_Code := True;
+         Modify_Tree_For_C := True;
          Unnest_Subprogram_Mode := True;
+
+         --  Enable some restrictions systematically to simplify the generated
+         --  code. Note that restriction checks are also disabled in C mode,
+         --  see Restrict.Check_Restriction.
+
+         Restrict.Restrictions.Set   (No_Exception_Registration)       := True;
+         Restrict.Restrictions.Set   (No_Initialize_Scalars)           := True;
+         Restrict.Restrictions.Set   (No_Task_Hierarchy)               := True;
+         Restrict.Restrictions.Set   (No_Abort_Statements)             := True;
+         Restrict.Restrictions.Set   (Max_Asynchronous_Select_Nesting) := True;
+         Restrict.Restrictions.Value (Max_Asynchronous_Select_Nesting) := 0;
+
+         --  Set operating mode to Generate_Code to benefit from full front-end
+         --  expansion (e.g. generics).
+
+         Operating_Mode := Generate_Code;
       end if;
 
       --  -gnatd.E sets Error_To_Warning mode, causing selected error messages
@@ -229,6 +246,7 @@ procedure Gnat1drv is
          --  user specified Restrictions pragmas are ignored, see
          --  Sem_Prag.Process_Restrictions_Or_Restriction_Warnings.
 
+         Restrict.Restrictions.Set   (No_Exception_Registration)       := True;
          Restrict.Restrictions.Set   (No_Initialize_Scalars)           := True;
          Restrict.Restrictions.Set   (No_Task_Hierarchy)               := True;
          Restrict.Restrictions.Set   (No_Abort_Statements)             := True;
index b63b426d0967aea8253b129b70c2d099ded1f6cf..aaaaf40bb0af80473cda356367adc0a648eab6a7 100644 (file)
@@ -505,16 +505,14 @@ package body Restrict is
       --  In GNATprove mode restrictions are checked, except for
       --  No_Initialize_Scalars, which is implicitly set in gnat1drv.adb.
 
-      --  Just checking, SPARK does not allow restrictions to be set ???
-
       if CodePeer_Mode
         or else (GNATprove_Mode and then R = No_Initialize_Scalars)
       then
          return;
       end if;
 
-      --  In SPARK mode, issue an error for any use of class-wide, even if the
-      --  No_Dispatch restriction is not set.
+      --  In SPARK 05 mode, issue an error for any use of class-wide, even if
+      --  the No_Dispatch restriction is not set.
 
       if R = No_Dispatch then
          Check_SPARK_05_Restriction ("class-wide is not allowed", N);
index a6f1be13b3b448128ded25662414b9eb699cc2be..819bcd5d959261b75d7f56cb625f5229034f253c 100644 (file)
@@ -1446,10 +1446,6 @@ package body Sem is
 
              or else Debug_Flag_X
 
-             --  Or if we are generating C code
-
-             or else Generate_C_Code
-
              --  Or if in configuration run-time mode. We do this so we get
              --  error messages about missing entities in the run-time even
              --  if we are compiling in -gnatc (no code generation) mode.