This is the mail archive of the gcc-patches@gcc.gnu.org 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] fix gnat_write_global_declarations glitch in LTO mode


The routine uses an anonymous static variable and this breaks in LTO mode 
because a DECL_NAME is expected.

Tested on i586-suse-linux, applied on the mainline and 4.7 branch.


2012-05-20  Eric Botcazou  <ebotcazou@adacore.com>

	* gcc-interface/utils.c (gnat_write_global_declarations): Put a name
	on the dummy global variable.


2012-05-20  Eric Botcazou  <ebotcazou@adacore.com>

	* gnat.dg/lto13.adb: New test.
	* gnat.dg/lto13_pkg.ad[sb]: New helper.


-- 
Eric Botcazou
Index: gcc-interface/utils.c
===================================================================
--- gcc-interface/utils.c	(revision 187691)
+++ gcc-interface/utils.c	(working copy)
@@ -5586,8 +5586,12 @@ gnat_write_global_declarations (void)
   if (!VEC_empty (tree, types_used_by_cur_var_decl))
     {
       struct varpool_node *node;
+      char *label;
+
+      ASM_FORMAT_PRIVATE_NAME (label, first_global_object_name, 0);
       dummy_global
-	= build_decl (BUILTINS_LOCATION, VAR_DECL, NULL_TREE, void_type_node);
+	= build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
+		      void_type_node);
       TREE_STATIC (dummy_global) = 1;
       TREE_ASM_WRITTEN (dummy_global) = 1;
       node = varpool_node (dummy_global);
-- { dg-do link }
-- { dg-options "-g -flto" { target lto } }

with Lto13_Pkg; use Lto13_Pkg;

procedure Lto13 is
begin
  Proc;
end;
package Lto13_Pkg is

  procedure Proc;

private

  type T;

end Lto13_Pkg;
package body Lto13_Pkg is

  procedure Proc is
  begin
    raise Constraint_Error;
  end;

  type T is null record;

end Lto13_Pkg;

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