aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2009-09-22 15:22:15 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2009-09-22 15:22:15 +0200
commit65f753a01e7359246def8d277016a0e4ebab4e7b (patch)
tree31d77ddbb19c09cb2be27291d30f6ee0eb49451c /gcc
parent9190e0a99ca2d2b729e80dca8109c93605fe82ce (diff)
downloadgcc-65f753a01e7359246def8d277016a0e4ebab4e7b.zip
gcc-65f753a01e7359246def8d277016a0e4ebab4e7b.tar.gz
gcc-65f753a01e7359246def8d277016a0e4ebab4e7b.tar.bz2
re PR bootstrap/41405 (Bootstrap fails on *-apple-darwin* due to revision 151815)
PR bootstrap/41405 * dwarf2out.c (base_type_die, record_type_tag, gen_subprogram_die, add_call_src_coords_attributes, add_high_low_attributes, gen_compile_unit_die, gen_type_die_with_usage force_decl_die, gen_decl_die, dwarf2out_imported_module_or_decl_1, dwarf2out_finish, dwarf2out_imported_module_or_decl): Avoid using DWARF3 additions when -gdwarf-2 -gstrict-dwarf. (loc_list_from_tree): Likewise. Avoid using DWARF4 additions when -gdwarf-[23] -gstrict-dwarf. (address_of_int_loc_descriptor, loc_descriptor, loc_list_for_address_of_addr_expr_of_indirect_ref): Avoid using DWARF4 additions when -gdwarf-[23] -gstrict-dwarf. * common.opt (gno-strict-dwarf, gstrict-dwarf): New options. * gfortran.dg/debug/pr37738.f: Add -gno-strict-dwarf to dg-options. * gfortran.dg/debug/pr35154-dwarf2.f: Likewise. * g++.dg/debug/dwarf2/explicit-constructor.C: Likewise. * g++.dg/debug/dwarf2/imported-module-2.C: Likewise. * g++.dg/debug/dwarf2/imported-module-3.C: Likewise. * g++.dg/debug/dwarf2/imported-module-4.C: Likewise. * g++.dg/debug/dwarf2/namespace-1.C: Likewise. * objc.dg/dwarf-2.m: Likewise. From-SVN: r151978
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/common.opt8
-rw-r--r--gcc/dwarf2out.c106
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C2
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C2
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C2
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C2
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C2
-rw-r--r--gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f2
-rw-r--r--gcc/testsuite/gfortran.dg/debug/pr37738.f2
-rw-r--r--gcc/testsuite/objc.dg/dwarf-2.m2
12 files changed, 113 insertions, 41 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9b0302c..115042b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -6,6 +6,20 @@
* reload1.c (reload): Call wrap_constant when substituting
reg for equiv inside of DEBUG_INSNs.
+ PR bootstrap/41405
+ * dwarf2out.c (base_type_die, record_type_tag, gen_subprogram_die,
+ add_call_src_coords_attributes, add_high_low_attributes,
+ gen_compile_unit_die, gen_type_die_with_usage force_decl_die,
+ gen_decl_die, dwarf2out_imported_module_or_decl_1, dwarf2out_finish,
+ dwarf2out_imported_module_or_decl): Avoid using DWARF3 additions
+ when -gdwarf-2 -gstrict-dwarf.
+ (loc_list_from_tree): Likewise. Avoid using DWARF4 additions when
+ -gdwarf-[23] -gstrict-dwarf.
+ (address_of_int_loc_descriptor, loc_descriptor,
+ loc_list_for_address_of_addr_expr_of_indirect_ref): Avoid using
+ DWARF4 additions when -gdwarf-[23] -gstrict-dwarf.
+ * common.opt (gno-strict-dwarf, gstrict-dwarf): New options.
+
2009-09-22 Richard Guenther <rguenther@suse.de>
PR tree-optimization/41428
diff --git a/gcc/common.opt b/gcc/common.opt
index 0befadd..42da2d5 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -1472,6 +1472,14 @@ gstabs+
Common JoinedOrMissing Negative(gvms)
Generate debug information in extended STABS format
+gno-strict-dwarf
+Common RejectNegative Var(dwarf_strict,0)
+Emit DWARF additions beyond selected version
+
+gstrict-dwarf
+Common Report RejectNegative Var(dwarf_strict,1) VarExists
+Don't emit DWARF additions beyond selected version
+
gtoggle
Common Report Var(flag_gtoggle)
Toggle debug information generation
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 1748cc4..9c128f1 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -10232,13 +10232,20 @@ base_type_die (tree type)
case REAL_TYPE:
if (DECIMAL_FLOAT_MODE_P (TYPE_MODE (type)))
- encoding = DW_ATE_decimal_float;
+ {
+ if (dwarf_version >= 3 || !dwarf_strict)
+ encoding = DW_ATE_decimal_float;
+ else
+ encoding = DW_ATE_lo_user;
+ }
else
encoding = DW_ATE_float;
break;
case FIXED_POINT_TYPE:
- if (TYPE_UNSIGNED (type))
+ if (!(dwarf_version >= 3 || !dwarf_strict))
+ encoding = DW_ATE_lo_user;
+ else if (TYPE_UNSIGNED (type))
encoding = DW_ATE_unsigned_fixed;
else
encoding = DW_ATE_signed_fixed;
@@ -10894,6 +10901,9 @@ address_of_int_loc_descriptor (int size, HOST_WIDE_INT i)
int litsize;
dw_loc_descr_ref loc_result = NULL;
+ if (!(dwarf_version >= 4 || !dwarf_strict))
+ return NULL;
+
if (i >= 0)
{
if (i <= 31)
@@ -11842,7 +11852,7 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
break;
case CONST_DOUBLE:
- if (mode != VOIDmode)
+ if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
{
/* Note that a CONST_DOUBLE rtx could represent either an integer
or a floating-point constant. A CONST_DOUBLE is used whenever
@@ -11873,7 +11883,7 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
break;
case CONST_VECTOR:
- if (mode != VOIDmode)
+ if (mode != VOIDmode && (dwarf_version >= 4 || !dwarf_strict))
{
unsigned int elt_size = GET_MODE_UNIT_SIZE (GET_MODE (rtl));
unsigned int length = CONST_VECTOR_NUNITS (rtl);
@@ -11961,7 +11971,8 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
&& SYMBOL_REF_TLS_MODEL (rtl) != TLS_MODEL_NONE)
break;
case LABEL_REF:
- if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE)
+ if (mode != VOIDmode && GET_MODE_SIZE (mode) == DWARF2_ADDR_SIZE
+ && (dwarf_version >= 4 || !dwarf_strict))
{
loc_result = new_loc_descr (DW_OP_implicit_value,
DWARF2_ADDR_SIZE, 0);
@@ -11973,7 +11984,8 @@ loc_descriptor (rtx rtl, enum machine_mode mode,
default:
if (GET_MODE_CLASS (mode) == MODE_INT && GET_MODE (rtl) == mode
- && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE)
+ && GET_MODE_SIZE (GET_MODE (rtl)) <= DWARF2_ADDR_SIZE
+ && (dwarf_version >= 4 || !dwarf_strict))
{
/* Value expression. */
loc_result = mem_loc_descriptor (rtl, VOIDmode, initialized);
@@ -12345,7 +12357,8 @@ loc_list_for_address_of_addr_expr_of_indirect_ref (tree loc, bool toplev)
if (!offset && !bitpos)
list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), toplev ? 2 : 1);
else if (toplev
- && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE)
+ && int_size_in_bytes (TREE_TYPE (loc)) <= DWARF2_ADDR_SIZE
+ && (dwarf_version >= 4 || !dwarf_strict))
{
list_ret = loc_list_from_tree (TREE_OPERAND (obj, 0), 0);
if (!list_ret)
@@ -12481,7 +12494,8 @@ loc_list_from_tree (tree loc, int want_address)
}
else
{
- if (!targetm.emutls.debug_form_tls_address)
+ if (!targetm.emutls.debug_form_tls_address
+ || !(dwarf_version >= 3 || !dwarf_strict))
return 0;
loc = emutls_decl (loc);
first_op = DW_OP_addr;
@@ -12884,7 +12898,8 @@ loc_list_from_tree (tree loc, int want_address)
if (!ret && !list_ret)
return 0;
- if (want_address == 2 && !have_address)
+ if (want_address == 2 && !have_address
+ && (dwarf_version >= 4 || !dwarf_strict))
{
if (int_size_in_bytes (TREE_TYPE (loc)) > DWARF2_ADDR_SIZE)
{
@@ -15274,7 +15289,9 @@ record_type_tag (tree type)
return DW_TAG_class_type;
case RECORD_IS_INTERFACE:
- return DW_TAG_interface_type;
+ if (dwarf_version >= 3 || !dwarf_strict)
+ return DW_TAG_interface_type;
+ return DW_TAG_structure_type;
default:
gcc_unreachable ();
@@ -15733,7 +15750,8 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
/* If this is an explicit function declaration then generate
a DW_AT_explicit attribute. */
- if (lang_hooks.decls.function_decl_explicit_p (decl))
+ if (lang_hooks.decls.function_decl_explicit_p (decl)
+ && (dwarf_version >= 3 || !dwarf_strict))
add_AT_flag (subr_die, DW_AT_explicit, 1);
/* The first time we see a member function, it is in the context of
@@ -16281,8 +16299,11 @@ add_call_src_coords_attributes (tree stmt, dw_die_ref die)
{
expanded_location s = expand_location (BLOCK_SOURCE_LOCATION (stmt));
- add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
- add_AT_unsigned (die, DW_AT_call_line, s.line);
+ if (dwarf_version >= 3 || !dwarf_strict)
+ {
+ add_AT_file (die, DW_AT_call_file, lookup_filename (s.file));
+ add_AT_unsigned (die, DW_AT_call_line, s.line);
+ }
}
@@ -16294,7 +16315,8 @@ add_high_low_attributes (tree stmt, dw_die_ref die)
{
char label[MAX_ARTIFICIAL_LABEL_BYTES];
- if (BLOCK_FRAGMENT_CHAIN (stmt))
+ if (BLOCK_FRAGMENT_CHAIN (stmt)
+ && (dwarf_version >= 3 || !dwarf_strict))
{
tree chain;
@@ -16496,24 +16518,26 @@ gen_compile_unit_die (const char *filename)
add_AT_string (die, DW_AT_producer, producer);
+ language = DW_LANG_C89;
if (strcmp (language_string, "GNU C++") == 0)
language = DW_LANG_C_plus_plus;
- else if (strcmp (language_string, "GNU Ada") == 0)
- language = DW_LANG_Ada95;
else if (strcmp (language_string, "GNU F77") == 0)
language = DW_LANG_Fortran77;
- else if (strcmp (language_string, "GNU Fortran") == 0)
- language = DW_LANG_Fortran95;
else if (strcmp (language_string, "GNU Pascal") == 0)
language = DW_LANG_Pascal83;
- else if (strcmp (language_string, "GNU Java") == 0)
- language = DW_LANG_Java;
- else if (strcmp (language_string, "GNU Objective-C") == 0)
- language = DW_LANG_ObjC;
- else if (strcmp (language_string, "GNU Objective-C++") == 0)
- language = DW_LANG_ObjC_plus_plus;
- else
- language = DW_LANG_C89;
+ else if (dwarf_version >= 3 || !dwarf_strict)
+ {
+ if (strcmp (language_string, "GNU Ada") == 0)
+ language = DW_LANG_Ada95;
+ else if (strcmp (language_string, "GNU Fortran") == 0)
+ language = DW_LANG_Fortran95;
+ else if (strcmp (language_string, "GNU Java") == 0)
+ language = DW_LANG_Java;
+ else if (strcmp (language_string, "GNU Objective-C") == 0)
+ language = DW_LANG_ObjC;
+ else if (strcmp (language_string, "GNU Objective-C++") == 0)
+ language = DW_LANG_ObjC_plus_plus;
+ }
add_AT_unsigned (die, DW_AT_language, language);
return die;
@@ -16793,7 +16817,8 @@ gen_type_die_with_usage (tree type, dw_die_ref context_die,
/* If this is an array type with hidden descriptor, handle it first. */
if (!TREE_ASM_WRITTEN (type)
&& lang_hooks.types.get_array_descr_info
- && lang_hooks.types.get_array_descr_info (type, &info))
+ && lang_hooks.types.get_array_descr_info (type, &info)
+ && (dwarf_version >= 3 || !dwarf_strict))
{
gen_descr_array_type_die (type, &info, context_die);
TREE_ASM_WRITTEN (type) = 1;
@@ -17177,7 +17202,11 @@ force_decl_die (tree decl)
break;
case NAMESPACE_DECL:
- dwarf2out_decl (decl);
+ if (dwarf_version >= 3 || !dwarf_strict)
+ dwarf2out_decl (decl);
+ else
+ /* DWARF2 has neither DW_TAG_module, nor DW_TAG_namespace. */
+ decl_die = comp_unit_die;
break;
default:
@@ -17487,7 +17516,8 @@ gen_decl_die (tree decl, tree origin, dw_die_ref context_die)
case NAMESPACE_DECL:
case IMPORTED_DECL:
- gen_namespace_die (decl, context_die);
+ if (dwarf_version >= 3 || !dwarf_strict)
+ gen_namespace_die (decl, context_die);
break;
default:
@@ -17585,9 +17615,14 @@ dwarf2out_imported_module_or_decl_1 (tree decl,
}
if (TREE_CODE (decl) == NAMESPACE_DECL)
- imported_die = new_die (DW_TAG_imported_module,
- lexical_block_die,
- lexical_block);
+ {
+ if (dwarf_version >= 3 || !dwarf_strict)
+ imported_die = new_die (DW_TAG_imported_module,
+ lexical_block_die,
+ lexical_block);
+ else
+ return;
+ }
else
imported_die = new_die (DW_TAG_imported_declaration,
lexical_block_die,
@@ -17628,6 +17663,10 @@ dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
&& TYPE_P (context)
&& !should_emit_struct_debug (context, DINFO_USAGE_DIR_USE))
return;
+
+ if (!(dwarf_version >= 3 || !dwarf_strict))
+ return;
+
scope_die = get_context_die (context);
if (child)
@@ -18856,7 +18895,8 @@ dwarf2out_finish (const char *filename)
/* We can only use the low/high_pc attributes if all of the code was
in .text. */
- if (!have_multiple_function_sections)
+ if (!have_multiple_function_sections
+ || !(dwarf_version >= 3 || !dwarf_strict))
{
add_AT_lbl_id (comp_unit_die, DW_AT_low_pc, text_section_label);
add_AT_lbl_id (comp_unit_die, DW_AT_high_pc, text_end_label);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eb4005a..7fc7523 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,6 +2,16 @@
* gcc.dg/20090922-1.c: New test.
+ PR bootstrap/41405
+ * gfortran.dg/debug/pr37738.f: Add -gno-strict-dwarf to dg-options.
+ * gfortran.dg/debug/pr35154-dwarf2.f: Likewise.
+ * g++.dg/debug/dwarf2/explicit-constructor.C: Likewise.
+ * g++.dg/debug/dwarf2/imported-module-2.C: Likewise.
+ * g++.dg/debug/dwarf2/imported-module-3.C: Likewise.
+ * g++.dg/debug/dwarf2/imported-module-4.C: Likewise.
+ * g++.dg/debug/dwarf2/namespace-1.C: Likewise.
+ * objc.dg/dwarf-2.m: Likewise.
+
2009-09-22 Richard Guenther <rguenther@suse.de>
PR tree-optimization/41428
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
index 42fd264..32d205d 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/explicit-constructor.C
@@ -1,7 +1,7 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin: PR c++
// { dg-do compile }
-// { dg-options "-O -g -dA" }
+// { dg-options "-O -g -dA -gno-strict-dwarf" }
// { dg-final { scan-assembler-times "DW_AT_explicit" 2 } }
struct Foo
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C
index 9a4821a..65141d7 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-2.C
@@ -1,7 +1,7 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin: PR debug/38390
// { dg-do compile }
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf" }
// { dg-final { scan-assembler "DW_TAG_imported_module" } }
namespace A
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C
index 9559bcb..6c56375 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C
@@ -1,6 +1,6 @@
// PR debug/39379
// { dg-do compile }
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf" }
// { dg-final { scan-assembler "DW_TAG_imported_module" } }
namespace A
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C
index 7ac6bab..a325ce2 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C
@@ -1,6 +1,6 @@
// PR debug/39379
// { dg-do compile }
-// { dg-options "-g -dA" }
+// { dg-options "-g -dA -gno-strict-dwarf" }
// { dg-final { scan-assembler "DW_TAG_imported_module" } }
namespace A
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C
index d3f26f1..9b00453 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/namespace-1.C
@@ -1,6 +1,6 @@
// Contributed by Dodji Seketeli <dodji@redhat.com>
// Origin PR debug/41170
-// { dg-options "-g -dA -fno-merge-debug-strings" }
+// { dg-options "-g -dA -fno-merge-debug-strings -gno-strict-dwarf" }
//
// We want to test that there is a DW_TAG_namespace DIE DW_AT_name is set
// to "not_emitted". That namespace die has a child DW_TAG_typedef DIE
diff --git a/gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f b/gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f
index bfd215d..40c13a4 100644
--- a/gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f
+++ b/gcc/testsuite/gfortran.dg/debug/pr35154-dwarf2.f
@@ -2,7 +2,7 @@ C Test program for common block debugging. G. Helffrich 11 July 2004.
C { dg-do compile }
C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "*" } { "-gdwarf-2" } }
C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "-g1" } { "" } }
-C { dg-options "-dA" }
+C { dg-options "-dA -gno-strict-dwarf" }
common i,j
common /label/l,m
i = 1
diff --git a/gcc/testsuite/gfortran.dg/debug/pr37738.f b/gcc/testsuite/gfortran.dg/debug/pr37738.f
index 48e1884..fddc44c 100644
--- a/gcc/testsuite/gfortran.dg/debug/pr37738.f
+++ b/gcc/testsuite/gfortran.dg/debug/pr37738.f
@@ -2,7 +2,7 @@ C PR debug/37738
C { dg-do compile }
C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "*" } { "-gdwarf-2" } }
C { dg-skip-if "DWARF-2 only" { "*-*-*" } { "-g1" } { "" } }
-C { dg-options "-dA" }
+C { dg-options "-dA -gno-strict-dwarf" }
subroutine a
integer*4 a_i, c_i
diff --git a/gcc/testsuite/objc.dg/dwarf-2.m b/gcc/testsuite/objc.dg/dwarf-2.m
index f85a750..967f515 100644
--- a/gcc/testsuite/objc.dg/dwarf-2.m
+++ b/gcc/testsuite/objc.dg/dwarf-2.m
@@ -1,4 +1,4 @@
-/* { dg-options "-gdwarf-2 -dA" } */
+/* { dg-options "-gdwarf-2 -dA -gno-strict-dwarf" } */
/* { dg-final { scan-assembler "0x10\[^0-9a-f\].*DW_AT_language" } } */
/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */
int x;