From 4405d067adffd5b0d5e0099596fa33e5506d68c8 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 12 Jul 2018 12:32:30 +0000 Subject: [PATCH] re PR debug/86462 (Quite huge debug info size increase introduced in r262511) 2018-07-12 Richard Biener PR debug/86462 * dwarf2out.c (gen_block_die): Only output blocks when they have at least one !DECL_IGNORED_P variable. From-SVN: r262583 --- gcc/ChangeLog | 6 ++++++ gcc/dwarf2out.c | 30 ++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a337db44850..6332f29c8bc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-07-12 Richard Biener + + PR debug/86462 + * dwarf2out.c (gen_block_die): Only output blocks when they have + at least one !DECL_IGNORED_P variable. + 2018-07-12 Richard Biener PR target/84829 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 1127713cbaf..c2422e29658 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -25627,22 +25627,28 @@ gen_block_die (tree stmt, dw_die_ref context_die) we might have pruned all BLOCK_VARS as optimized out but we still want to generate high/low PC attributes so output it. */ must_output_die = 1; - else + else if (TREE_USED (stmt) + || TREE_ASM_WRITTEN (stmt) + || BLOCK_ABSTRACT (stmt)) { /* Determine if this block directly contains any "significant" local declarations which we will need to output DIEs for. */ if (debug_info_level > DINFO_LEVEL_TERSE) - /* We are not in terse mode so *any* local declaration counts - as being a "significant" one. */ - must_output_die = ((BLOCK_VARS (stmt) != NULL - || BLOCK_NUM_NONLOCALIZED_VARS (stmt)) - && (TREE_USED (stmt) - || TREE_ASM_WRITTEN (stmt) - || BLOCK_ABSTRACT (stmt))); - else if ((TREE_USED (stmt) - || TREE_ASM_WRITTEN (stmt) - || BLOCK_ABSTRACT (stmt)) - && !dwarf2out_ignore_block (stmt)) + { + /* We are not in terse mode so any local declaration that + is not ignored for debug purposes counts as being a + "significant" one. */ + if (BLOCK_NUM_NONLOCALIZED_VARS (stmt)) + must_output_die = 1; + else + for (tree var = BLOCK_VARS (stmt); var; var = DECL_CHAIN (var)) + if (!DECL_IGNORED_P (var)) + { + must_output_die = 1; + break; + } + } + else if (!dwarf2out_ignore_block (stmt)) must_output_die = 1; } -- 2.30.2