From: Jakub Jelinek Date: Thu, 5 Mar 2009 12:50:36 +0000 (+0100) Subject: re PR debug/39379 (DW_TAG_imported* no longer emitted) X-Git-Tag: releases/gcc-4.4.0~348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ee0ee7e2c1fd52af141b14c0230dcf6cd50c2b35;p=thirdparty%2Fgcc.git 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 --- 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);