diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2015-02-21 00:27:05 +0000 |
---|---|---|
committer | Aldy Hernandez <aldyh@gcc.gnu.org> | 2015-02-21 00:27:05 +0000 |
commit | 220d905f7c53b81c4572450f9caf6197b2cc6c02 (patch) | |
tree | ae75ab12d5884f08dfac4774b542d49dad9ee896 | |
parent | e1f217ad105cde2a7a34297fc7027655a93e75ac (diff) | |
download | gcc-220d905f7c53b81c4572450f9caf6197b2cc6c02.zip gcc-220d905f7c53b81c4572450f9caf6197b2cc6c02.tar.gz gcc-220d905f7c53b81c4572450f9caf6197b2cc6c02.tar.bz2 |
re PR debug/58123 (debug line not tracked for last autovariable dtor)
PR debug/58123
* gimplify.c (gimplify_expr): Prefer location of TRY_FINALLY_EXPR
over input_location.
From-SVN: r220886
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimplify.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/gcov/gcov-2.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/pr58123.C | 18 |
6 files changed, 38 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9febcbd..ca429c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2015-02-20 Aldy Hernandez <aldyh@redhat.com> + + PR debug/58123 + * gimplify.c (gimplify_expr): Prefer location of TRY_FINALLY_EXPR + over input_location. + 2015-02-20 Bernd Schmidt <bernds@codesourcery.com> * tree-streamer-in.c (unpack_ts_decl_common_value_fields, diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1353ada..d822913 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -8244,10 +8244,10 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, TREE_CODE (*expr_p) == TRY_FINALLY_EXPR ? GIMPLE_TRY_FINALLY : GIMPLE_TRY_CATCH); - if (LOCATION_LOCUS (saved_location) != UNKNOWN_LOCATION) - gimple_set_location (try_, saved_location); - else + if (EXPR_HAS_LOCATION (save_expr)) gimple_set_location (try_, EXPR_LOCATION (save_expr)); + else if (LOCATION_LOCUS (saved_location) != UNKNOWN_LOCATION) + gimple_set_location (try_, saved_location); if (TREE_CODE (*expr_p) == TRY_CATCH_EXPR) gimple_try_set_catch_is_cleanup (try_, TRY_CATCH_IS_CLEANUP (*expr_p)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1efc08d..011e1a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2015-02-20 Aldy Hernandez <aldyh@redhat.com> + + PR debug/58123 + * g++.dg/debug/dwarf2/deallocator.C: Adjust for correct try + location. + * g++.dg/gcov/gcov-2.C: Likewise. + 2015-02-20 Richard Biener <rguenther@suse.de> PR tree-optimization/65136 diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C b/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C index 4057393..0fcd08e 100644 --- a/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C +++ b/gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C @@ -41,6 +41,6 @@ void foo(int i) return; } // { dg-final { scan-assembler "deallocator.C:29" } } -// { dg-final { scan-assembler "deallocator.C:31" } } -// { dg-final { scan-assembler "deallocator.C:38" } } -// { dg-final { scan-assembler "deallocator.C:41" } } +// { dg-final { scan-assembler "deallocator.C:24" } } +// { dg-final { scan-assembler "deallocator.C:34" } } +// { dg-final { scan-assembler "deallocator.C:21" } } diff --git a/gcc/testsuite/g++.dg/gcov/gcov-2.C b/gcc/testsuite/g++.dg/gcov/gcov-2.C index 66d8af3..6d002f5 100644 --- a/gcc/testsuite/g++.dg/gcov/gcov-2.C +++ b/gcc/testsuite/g++.dg/gcov/gcov-2.C @@ -20,7 +20,7 @@ private: void foo() { - C c; /* count(1) */ + C c; /* count(2) */ c.seti (1); /* count(1) */ } diff --git a/gcc/testsuite/g++.dg/pr58123.C b/gcc/testsuite/g++.dg/pr58123.C new file mode 100644 index 0000000..7fe1a27 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr58123.C @@ -0,0 +1,18 @@ +// { dg-do compile } +// { dg-options "-fdump-tree-gimple-lineno" } + +// Test that the TRY block's location is the definition of "C a". + +class C { +public: + C() {} + ~C() {} + int m() { return 0; } +}; +int main() { + C a; + return a.m(); +} + +// { dg-final { scan-tree-dump-times "pr58123.C:13\.6\] try" 1 "gimple" } } +// { dg-final { cleanup-tree-dump "gimple" } } |