From ee0ee7e2c1fd52af141b14c0230dcf6cd50c2b35 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 5 Mar 2009 13:50:36 +0100 Subject: [PATCH] re PR debug/39379 (DW_TAG_imported* no longer emitted) PR debug/39379 * tree-cfg.c (remove_useless_stmts_bind): Don't remove GIMPLE_BINDs with blocks containing IMPORTED_DECLs in BLOCK_VARS. * g++.dg/debug/dwarf2/imported-module-3.C: New test. * g++.dg/debug/dwarf2/imported-module-4.C: New test. From-SVN: r144640 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 6 ++++++ .../g++.dg/debug/dwarf2/imported-module-3.C | 17 +++++++++++++++ .../g++.dg/debug/dwarf2/imported-module-4.C | 21 +++++++++++++++++++ gcc/tree-cfg.c | 18 +++++++++++++--- 5 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C create mode 100644 gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d2629d61ddfd..a0ff5c863f2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-03-05 Jakub Jelinek + + PR debug/39379 + * tree-cfg.c (remove_useless_stmts_bind): Don't remove GIMPLE_BINDs + with blocks containing IMPORTED_DECLs in BLOCK_VARS. + 2009-03-05 Uros Bizjak * config/i386/i386.md (R8_REG, R9_REG): New constants. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fc15129ffc63..f71de1c30e9b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2009-03-05 Jakub Jelinek + + PR debug/39379 + * g++.dg/debug/dwarf2/imported-module-3.C: New test. + * g++.dg/debug/dwarf2/imported-module-4.C: New test. + 2009-03-04 Jason Merrill PR c++/13549 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C new file mode 100644 index 000000000000..d62a506f49b9 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-3.C @@ -0,0 +1,17 @@ +// PR debug/39379 +// { dg-do compile } +// { dg-options "-g -dA" } +// { dg-final { scan-assembler "DW_TAG_imported" } } + +namespace A +{ + int v; +} + +int +main () +{ + using namespace A; + v++; + return v - 1; +} diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C new file mode 100644 index 000000000000..6e9b52e1f193 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/dwarf2/imported-module-4.C @@ -0,0 +1,21 @@ +// PR debug/39379 +// { dg-do compile } +// { dg-options "-g -dA" } +// { dg-final { scan-assembler "DW_TAG_imported" } } + +namespace A +{ + int v; +} + +int +f () +{ + int i; + { + using namespace A; + v++; + i = v - 1; + } + return i; +} diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 5632a8930bcc..440aa9368269 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -1796,9 +1796,21 @@ remove_useless_stmts_bind (gimple_stmt_iterator *gsi, struct rus_data *data ATTR || (TREE_CODE (BLOCK_ABSTRACT_ORIGIN (block)) != FUNCTION_DECL))) { - gsi_insert_seq_before (gsi, body_seq, GSI_SAME_STMT); - gsi_remove (gsi, false); - data->repeat = true; + tree var = NULL_TREE; + /* Even if there are no gimple_bind_vars, there might be other + decls in BLOCK_VARS rendering the GIMPLE_BIND not useless. */ + if (block) + for (var = BLOCK_VARS (block); var; var = TREE_CHAIN (var)) + if (TREE_CODE (var) == IMPORTED_DECL) + break; + if (var) + gsi_next (gsi); + else + { + gsi_insert_seq_before (gsi, body_seq, GSI_SAME_STMT); + gsi_remove (gsi, false); + data->repeat = true; + } } else gsi_next (gsi); -- 2.47.2