]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before loading the main...
authorVincent Celier <celier@adacore.com>
Mon, 4 Oct 2010 13:27:57 +0000 (13:27 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Oct 2010 13:27:57 +0000 (15:27 +0200)
2010-10-04  Vincent Celier  <celier@adacore.com>

* frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before
loading the main source, so that if it is preprocessed and -gnateG is
used, the preprocessed file is written.
* lib.ads (Analysing_Subunit_Of_Main): New global variable to indicate
if a subunit is from the main unit when it is loaded.
* sem_ch10.adb (Analyze_Proper_Body): Set Lib.Analysing_Subunit_Of_Main
to True before loading a subunit.
* sem_ch12.adb (Copy_Generic_Node): Set Lib.Analysing_Subunit_Of_Main
to True when the main is a generic unit before loading one of its
subunits.
* sinput-l.adb (Load_File): If -gnateG is used, write the preprocessed
file only for the main unit (spec, body and subunits).

From-SVN: r164934

gcc/ada/ChangeLog
gcc/ada/frontend.adb
gcc/ada/lib.ads
gcc/ada/sem_ch10.adb
gcc/ada/sem_ch12.adb
gcc/ada/sinput-l.adb

index 8596df4fb290e3ad47618e06763b4340d54fc969..0c292b9e5d102e21761ee46b09d39d3915b75487 100644 (file)
@@ -1,3 +1,18 @@
+2010-10-04  Vincent Celier  <celier@adacore.com>
+
+       * frontend.adb: Set Lib.Parsing_Main_Extended_Source to True before
+       loading the main source, so that if it is preprocessed and -gnateG is
+       used, the preprocessed file is written.
+       * lib.ads (Analysing_Subunit_Of_Main): New global variable to indicate
+       if a subunit is from the main unit when it is loaded.
+       * sem_ch10.adb (Analyze_Proper_Body): Set Lib.Analysing_Subunit_Of_Main
+       to True before loading a subunit.
+       * sem_ch12.adb (Copy_Generic_Node): Set Lib.Analysing_Subunit_Of_Main
+       to True when the main is a generic unit before loading one of its
+       subunits.
+       * sinput-l.adb (Load_File): If -gnateG is used, write the preprocessed
+       file only for the main unit (spec, body and subunits).
+
 2010-10-04  Vincent Celier  <celier@adacore.com>
 
        * sinput-l.adb (Load_File): Do not fail when switch -gnateG is
index 31c8feaa9c1657df9b6a23ffa637858e26e6cbd9..fd83b5d5b5c802228d89ff4c69fe4196d3991290 100644 (file)
@@ -116,6 +116,11 @@ begin
       Prepcomp.Check_Symbols;
    end if;
 
+   --  We set Parsing_Main_Extended_Source true here to cover processing of all
+   --  the configuration pragma files, as well as the main source unit itself.
+
+   Parsing_Main_Extended_Source := True;
+
    --  Now that the preprocessing situation is established, we are able to
    --  load the main source (this is no longer done by Lib.Load.Initialize).
 
@@ -127,11 +132,6 @@ begin
       return;
    end if;
 
-   --  We set Parsing_Main_Extended_Source true here to cover processing of all
-   --  the configuration pragma files, as well as the main source unit itself.
-
-   Parsing_Main_Extended_Source := True;
-
    --  Read and process configuration pragma files if present
 
    declare
index 0aac6f04da40c15023a380a000e4e6ce7692baf5..28e2ec064cdcc27a1a7eebbf16de8beebcdfe853 100644 (file)
@@ -49,6 +49,11 @@ package Lib is
    --  extended source (the main unit, its spec, or one of its subunits). This
    --  flag to implement In_Extended_Main_Source_Unit.
 
+   Analysing_Subunit_Of_Main : Boolean := False;
+   --  Set to True when analyzing a subunit of the main source. When True, if
+   --  the subunit is preprocessed and -gnateG is specified, then the
+   --  preprocessed file (.prep) is written.
+
    --------------------------------------------
    -- General Approach to Library Management --
    --------------------------------------------
index 7623b8231eaf88bcfa5fc6a1429319e88dac5ab8..f38503d00dac9cc46d48e5d4d405d116ccc60402 100644 (file)
@@ -1739,12 +1739,17 @@ package body Sem_Ch10 is
          --  Otherwise we must load the subunit and link to it
 
          else
+            --  Make sure that, if the subunit is preprocessed and -gnateG is
+            --  specified, the preprocessed file will be written.
+
+            Lib.Analysing_Subunit_Of_Main := True;
             Unum :=
               Load_Unit
                 (Load_Name  => Subunit_Name,
                  Required   => False,
                  Subunit    => True,
                  Error_Node => N);
+            Lib.Analysing_Subunit_Of_Main := False;
 
             --  Give message if we did not get the unit Emit warning even if
             --  missing subunit is not within main unit, to simplify debugging.
@@ -1822,11 +1827,11 @@ package body Sem_Ch10 is
             end if;
          end if;
 
-         --  The remaining case is when the subunit is not already loaded and
-         --  we are not generating code. In this case we are just performing
-         --  semantic analysis on the parent, and we are not interested in
-         --  the subunit. For subprograms, analyze the stub as a body. For
-         --  other entities the stub has already been marked as completed.
+      --  The remaining case is when the subunit is not already loaded and we
+      --  are not generating code. In this case we are just performing semantic
+      --  analysis on the parent, and we are not interested in the subunit. For
+      --  subprograms, analyze the stub as a body. For other entities the stub
+      --  has already been marked as completed.
 
       else
          Optional_Subunit;
index b325ccbe89c7f015c9b1c98eb009c02f1d2ffd59..5f258f23d681ba2b8504a2cd8751ec00624b53a0 100644 (file)
@@ -5906,12 +5906,19 @@ package body Sem_Ch12 is
                New_Body     : Node_Id;
 
             begin
+               --  Make sure that, if it is a subunit of the main unit that is
+               --  preprocessed and if -gnateG is specified, the preprocessed
+               --  file will be written.
+
+               Lib.Analysing_Subunit_Of_Main :=
+                 Lib.In_Extended_Main_Source_Unit (N);
                Unum :=
                  Load_Unit
                    (Load_Name  => Subunit_Name,
                     Required   => False,
                     Subunit    => True,
                     Error_Node => N);
+               Lib.Analysing_Subunit_Of_Main := False;
 
                --  If the proper body is not found, a warning message will be
                --  emitted when analyzing the stub, or later at the point
index 98ad104d020e2e915939b3b02a9f193fc4091151..8d952b2cd04246c76f6256a54f9165325907800c 100644 (file)
@@ -30,6 +30,7 @@ with Einfo;    use Einfo;
 with Errout;   use Errout;
 with Fname;    use Fname;
 with Hostparm;
+with Lib;      use Lib;
 with Opt;      use Opt;
 with Osint;    use Osint;
 with Output;   use Output;
@@ -552,9 +553,17 @@ package body Sinput.L is
 
                else
                   --  Output the result of the preprocessing, if requested and
-                  --  the source has been modified by the preprocessing.
-
-                  if Generate_Processed_File and then Modified then
+                  --  the source has been modified by the preprocessing. Only
+                  --  do that for the main unit (spec, body and subunits).
+
+                  if Generate_Processed_File and then
+                     Modified and then
+                     ((Compiler_State = Parsing
+                       and then Parsing_Main_Extended_Source)
+                      or else
+                       (Compiler_State = Analyzing
+                        and then Analysing_Subunit_Of_Main))
+                  then
                      declare
                         FD     : File_Descriptor;
                         NB     : Integer;