From 5225a1389d0058ac8f64153efa64c8e07ec13c9a Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 22 Apr 2009 22:01:57 +0000 Subject: [PATCH] utils.c (create_var_decl_1): Do not emit debug info for an external constant whose initializer is not absolute. * 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 | 7 ++++++- gcc/ada/gcc-interface/utils.c | 9 +++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 7628abb53e2d..acdc11cfc851 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,4 +1,9 @@ -2009-04-21 Taras Glek +2009-04-22 Eric Botcazou + + * 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 * gcc-interface/ada-tree.h: Update GTY annotations to new syntax. * gcc-interface/trans.c: Likewise. diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c index 088c83ad23d7..6ea91389f684 100644 --- a/gcc/ada/gcc-interface/utils.c +++ b/gcc/ada/gcc-interface/utils.c @@ -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); -- 2.39.2