OSDN Git Service

* gcc-interface/utils.c: Include diagnostic.h.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Jun 2011 10:00:32 +0000 (10:00 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 6 Jun 2011 10:00:32 +0000 (10:00 +0000)
(gnat_write_global_declarations): Output debug information for all
global type declarations before finalizing the compilation unit.
* gcc-interface/Make-lang.in (ada/utils.o): Add dependency.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@174687 138bc75d-0d04-0410-961f-82ee72b054a4

14 files changed:
gcc/ada/ChangeLog
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gcc-interface/utils.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/taft_type1.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/taft_type1_pkg1.adb [moved from gcc/testsuite/gnat.dg/tamdt.adb with 62% similarity]
gcc/testsuite/gnat.dg/taft_type1_pkg1.ads [moved from gcc/testsuite/gnat.dg/tamdt.ads with 73% similarity]
gcc/testsuite/gnat.dg/taft_type1_pkg2.ads [moved from gcc/testsuite/gnat.dg/tamdt_aux.ads with 65% similarity]
gcc/testsuite/gnat.dg/taft_type2.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/taft_type2.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/taft_type2_pkg.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/taft_type3.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/taft_type3_pkg.ads [new file with mode: 0644]
gcc/testsuite/gnat.dg/test_tamdt.adb [deleted file]

index 0af991d..1ea386b 100644 (file)
@@ -1,3 +1,10 @@
+2011-06-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/utils.c: Include diagnostic.h.
+       (gnat_write_global_declarations): Output debug information for all
+       global type declarations before finalizing the compilation unit.
+       * gcc-interface/Make-lang.in (ada/utils.o): Add dependency.
+
 2011-05-25  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc-interface/utils.c (def_fn_type): Remove extra va_end.
index dbd1f08..53f9f8d 100644 (file)
@@ -1237,7 +1237,7 @@ ada/trans.o : ada/gcc-interface/trans.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
 
 ada/utils.o : ada/gcc-interface/utils.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
    $(TM_H) $(TREE_H) $(FLAGS_H) toplev.h $(RTL_H) output.h debug.h convert.h \
-   $(TARGET_H) function.h langhooks.h $(CGRAPH_H) \
+   $(TARGET_H) function.h langhooks.h $(CGRAPH_H) $(DIAGNOSTIC_H) \
    $(TREE_DUMP_H) $(TREE_INLINE_H) tree-iterator.h \
    ada/gcc-interface/ada.h ada/types.h ada/atree.h ada/elists.h ada/namet.h \
    ada/nlists.h ada/stringt.h ada/uintp.h ada/fe.h ada/sinfo.h ada/einfo.h \
index ad2ff2a..0f2a331 100644 (file)
@@ -38,6 +38,7 @@
 #include "target.h"
 #include "langhooks.h"
 #include "cgraph.h"
+#include "diagnostic.h"
 #include "tree-dump.h"
 #include "tree-inline.h"
 #include "tree-iterator.h"
@@ -4756,6 +4757,9 @@ static GTY (()) tree dummy_global;
 void
 gnat_write_global_declarations (void)
 {
+  unsigned int i;
+  tree iter;
+
   /* If we have declared types as used at the global level, insert them in
      the global hash table.  We use a dummy variable for this purpose.  */
   if (!VEC_empty (tree, types_used_by_cur_var_decl))
@@ -4773,13 +4777,28 @@ gnat_write_global_declarations (void)
        }
     }
 
+  /* Output debug information for all global type declarations first.  This
+     ensures that global types whose compilation hasn't been finalized yet,
+     for example pointers to Taft amendment types, have their compilation
+     finalized in the right context.  */
+  FOR_EACH_VEC_ELT (tree, global_decls, i, iter)
+    if (TREE_CODE (iter) == TYPE_DECL)
+      debug_hooks->global_decl (iter);
+
   /* Proceed to optimize and emit assembly.
      FIXME: shouldn't be the front end's responsibility to call this.  */
   cgraph_finalize_compilation_unit ();
 
-  /* Emit debug info for all global declarations.  */
-  emit_debug_global_declarations (VEC_address (tree, global_decls),
-                                 VEC_length (tree, global_decls));
+  /* After cgraph has had a chance to emit everything that's going to
+     be emitted, output debug information for the rest of globals.  */
+  if (!seen_error ())
+    {
+      timevar_push (TV_SYMOUT);
+      FOR_EACH_VEC_ELT (tree, global_decls, i, iter)
+       if (TREE_CODE (iter) != TYPE_DECL)
+         debug_hooks->global_decl (iter);
+      timevar_pop (TV_SYMOUT);
+    }
 }
 
 /* ************************************************************************
index 9973272..749949f 100644 (file)
@@ -1,3 +1,16 @@
+2011-06-06  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/test_tamdt.adb: Rename to...
+       * gnat.dg/taft_type1.adb: ...this.
+       * gnat.dg/tamdt.ad[sb]: Rename to...
+       * gnat.dg/taft_type1_pkg1.ad[sb]: ...this.
+       * gnat.dg/tamdt_aux.ads: Rename to...
+       * gnat.dg/taft_type1_pkg2.ads: ...this.
+       * gnat.dg/taft_type2.ad[sb]: New test.
+       * gnat.dg/taft_type2_pkg.ads: New helper.
+       * gnat.dg/taft_type3.adb: New test.
+       * gnat.dg/taft_type3_pkg.ads: New helper.
+
 2011-06-05  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/49255
diff --git a/gcc/testsuite/gnat.dg/taft_type1.adb b/gcc/testsuite/gnat.dg/taft_type1.adb
new file mode 100644 (file)
index 0000000..3f3cc3a
--- /dev/null
@@ -0,0 +1,8 @@
+-- { dg-do run }
+
+with Taft_Type1_Pkg1;
+
+procedure Taft_Type1 is
+begin
+   Taft_Type1_Pkg1.Check;
+end;
similarity index 62%
rename from gcc/testsuite/gnat.dg/tamdt.adb
rename to gcc/testsuite/gnat.dg/taft_type1_pkg1.adb
index 81af6ad..7e45670 100644 (file)
@@ -1,9 +1,8 @@
+with Taft_Type1_Pkg2;
 
-with Tamdt_Aux;
-
-package body TAMDT is
-   type TAMT1 is new Tamdt_Aux.Priv (X => 1);
-   type TAMT2 is new Tamdt_Aux.Priv;
+package body Taft_Type1_Pkg1 is
+   type TAMT1 is new Taft_Type1_Pkg2.Priv (X => 1);
+   type TAMT2 is new Taft_Type1_Pkg2.Priv;
 
    procedure Check is
       Ptr1 : TAMT1_Access := new TAMT1;
@@ -16,4 +15,4 @@ package body TAMDT is
          raise Program_Error;
       end if;
    end;
-end;
+end Taft_Type1_Pkg1;
similarity index 73%
rename from gcc/testsuite/gnat.dg/tamdt.ads
rename to gcc/testsuite/gnat.dg/taft_type1_pkg1.ads
index 09d9388..da656f8 100644 (file)
@@ -1,5 +1,4 @@
-
-package TAMDT is
+package Taft_Type1_Pkg1 is
    procedure Check;
 private
    type TAMT1;
@@ -7,4 +6,4 @@ private
 
    type TAMT2;
    type TAMT2_Access is access TAMT2;
-end;
+end Taft_Type1_Pkg1;
similarity index 65%
rename from gcc/testsuite/gnat.dg/tamdt_aux.ads
rename to gcc/testsuite/gnat.dg/taft_type1_pkg2.ads
index d5cca10..4761840 100644 (file)
@@ -1,9 +1,5 @@
-
-package Tamdt_Aux is
+package Taft_Type1_Pkg2 is
    type Priv (X : Integer) is private;
 private
    type Priv (X : Integer) is null record;
-end;
-
-
-
+end Taft_Type1_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/taft_type2.adb b/gcc/testsuite/gnat.dg/taft_type2.adb
new file mode 100644 (file)
index 0000000..c855ab6
--- /dev/null
@@ -0,0 +1,22 @@
+-- { dg-do compile }\r
+-- { dg-options "-g" }\r
+\r
+with Taft_Type2_Pkg; use Taft_Type2_Pkg;\r
+\r
+package body Taft_Type2 is\r
+\r
+   procedure Proc is\r
+      A : T;\r
+\r
+      function F return T is\r
+         My_T : T;\r
+      begin\r
+         My_T := Open;\r
+         return My_T;\r
+      end;\r
+\r
+   begin\r
+      A := F;\r
+   end;\r
+\r
+end Taft_Type2;\r
diff --git a/gcc/testsuite/gnat.dg/taft_type2.ads b/gcc/testsuite/gnat.dg/taft_type2.ads
new file mode 100644 (file)
index 0000000..539c106
--- /dev/null
@@ -0,0 +1,5 @@
+package Taft_Type2 is\r
+\r
+   procedure Proc;\r
+\r
+end Taft_Type2;\r
diff --git a/gcc/testsuite/gnat.dg/taft_type2_pkg.ads b/gcc/testsuite/gnat.dg/taft_type2_pkg.ads
new file mode 100644 (file)
index 0000000..689b3f1
--- /dev/null
@@ -0,0 +1,12 @@
+package Taft_Type2_Pkg  is\r
+\r
+   type T is private;\r
+\r
+   function Open return T;\r
+\r
+private\r
+\r
+   type Buffer_T;\r
+   type T is access Buffer_T;\r
+\r
+end Taft_Type2_Pkg;\r
diff --git a/gcc/testsuite/gnat.dg/taft_type3.adb b/gcc/testsuite/gnat.dg/taft_type3.adb
new file mode 100644 (file)
index 0000000..5693122
--- /dev/null
@@ -0,0 +1,29 @@
+-- { dg-do compile }
+-- { dg-options "-g" }
+
+with Taft_Type3_Pkg; use Taft_Type3_Pkg;
+
+procedure Taft_Type3 is
+
+  subtype S is String (1..32);
+
+  Empty : constant S := (others => ' ');
+
+  procedure Proc (Data : in out T) is begin null; end;
+
+  task type Task_T is
+    entry Send (Data : in out T);
+  end;
+
+  task body Task_T is
+    type List_T is array (1 .. 4) of S;
+    L : List_T := (others => Empty);
+  begin
+    accept Send (Data : in out T) do
+      Proc (Data);
+    end;
+  end;
+
+begin
+  null;
+end;
diff --git a/gcc/testsuite/gnat.dg/taft_type3_pkg.ads b/gcc/testsuite/gnat.dg/taft_type3_pkg.ads
new file mode 100644 (file)
index 0000000..578c518
--- /dev/null
@@ -0,0 +1,10 @@
+package Taft_Type3_Pkg is
+
+  type T is private;
+
+private
+
+  type Buffer_T;
+  type T is access Buffer_T;
+
+end Taft_Type3_Pkg;
diff --git a/gcc/testsuite/gnat.dg/test_tamdt.adb b/gcc/testsuite/gnat.dg/test_tamdt.adb
deleted file mode 100644 (file)
index d0658ec..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
--- { dg-do run }
-
-with Tamdt;
-
-procedure Test_Tamdt is
-begin
-   Tamdt.Check;
-end;