utils.c (create_var_decl_1): Do not emit debug info for an external constant whose...
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 22 Apr 2009 22:01:57 +0000 (22:01 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 22 Apr 2009 22:01:57 +0000 (22:01 +0000)
* gcc-interface/utils.c (create_var_decl_1): Do not emit debug info
for an external constant whose initializer is not absolute.

From-SVN: r146620

gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils.c

index 7628abb..acdc11c 100644 (file)
@@ -1,4 +1,9 @@
-2009-04-21  Taras Glek <tglek@mozilla.com>
+2009-04-22  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/utils.c (create_var_decl_1): Do not emit debug info
+       for an external constant whose initializer is not absolute.
+
+2009-04-22  Taras Glek  <tglek@mozilla.com>
 
        * gcc-interface/ada-tree.h: Update GTY annotations to new syntax.
        * gcc-interface/trans.c: Likewise.
index 088c83a..6ea9138 100644 (file)
@@ -1347,6 +1347,15 @@ create_var_decl_1 (tree var_name, tree asm_name, tree type, tree var_init,
   TREE_STATIC (var_decl)
     = !extern_flag && (public_flag || static_flag || global_bindings_p ());
 
+  /* For an external constant whose initializer is not absolute, do not emit
+     debug info.  In DWARF this would mean a global relocation in a read-only
+     section which runs afoul of the PE-COFF runtime relocation mechanism.  */
+  if (extern_flag
+      && constant_p
+      && initializer_constant_valid_p (var_init, TREE_TYPE (var_init))
+          != null_pointer_node)
+    DECL_IGNORED_P (var_decl) = 1;
+
   if (asm_name && VAR_OR_FUNCTION_DECL_P (var_decl))
     SET_DECL_ASSEMBLER_NAME (var_decl, asm_name);