OSDN Git Service

* decl2.c (maybe_emit_vtables): Produce same comdat group when outputting
[pf3gnuchains/gcc-fork.git] / gcc / ada / put_scos.adb
index d7667b8..39b6288 100644 (file)
@@ -37,21 +37,26 @@ begin
          Stop  : Nat;
 
       begin
-         Write_Info_Initiate ('C');
-         Write_Info_Char (' ');
-         Write_Info_Nat (SUT.Dep_Num);
-         Write_Info_Char (' ');
+         Start := SUT.From;
+         Stop  := SUT.To;
 
-         for N in SUT.File_Name'Range loop
-            Write_Info_Char (SUT.File_Name (N));
-         end loop;
+         --  Write unit header (omitted if no SCOs are generated for this unit)
+
+         if Start <= Stop then
+            Write_Info_Initiate ('C');
+            Write_Info_Char (' ');
+            Write_Info_Nat (SUT.Dep_Num);
+            Write_Info_Char (' ');
 
-         Write_Info_Terminate;
+            for N in SUT.File_Name'Range loop
+               Write_Info_Char (SUT.File_Name (N));
+            end loop;
+
+            Write_Info_Terminate;
+         end if;
 
          --  Loop through SCO entries for this unit
 
-         Start := SUT.From;
-         Stop  := SUT.To;
          loop
             exit when Start = Stop + 1;
             pragma Assert (Start <= Stop);
@@ -85,15 +90,32 @@ begin
 
                case T.C1 is
 
-                  --  Statements, exit
+                  --  Statements
+
+                  when 'S' =>
+                     loop
+                        Write_Info_Char (' ');
+
+                        if SCO_Table.Table (Start).C2 /= ' ' then
+                           Write_Info_Char (SCO_Table.Table (Start).C2);
+                        end if;
+
+                        Output_Range (SCO_Table.Table (Start));
+                        exit when SCO_Table.Table (Start).Last;
+
+                        Start := Start + 1;
+                        pragma Assert (SCO_Table.Table (Start).C1 = 's');
+                     end loop;
 
-                  when 'S' | 'T' =>
-                     Write_Info_Char (' ');
-                     Output_Range (T);
+                  --  Statement continuations should not occur since they
+                  --  are supposed to have been handled in the loop above.
+
+                  when 's' =>
+                     raise Program_Error;
 
-                     --  Decision
+                  --  Decision
 
-                  when 'I' | 'E' | 'W' | 'X' =>
+                  when 'I' | 'E' | 'P' | 'W' | 'X' =>
                      if T.C2 = ' ' then
                         Start := Start + 1;
                      end if;