aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2015-02-21 00:27:05 +0000
committerAldy Hernandez <aldyh@gcc.gnu.org>2015-02-21 00:27:05 +0000
commit220d905f7c53b81c4572450f9caf6197b2cc6c02 (patch)
treeae75ab12d5884f08dfac4774b542d49dad9ee896
parente1f217ad105cde2a7a34297fc7027655a93e75ac (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/gimplify.c6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/debug/dwarf2/deallocator.C6
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov-2.C2
-rw-r--r--gcc/testsuite/g++.dg/pr58123.C18
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" } }