Message ID | m339cgp3yr.fsf@redhat.com |
---|---|
State | New |
Headers | show |
On Mon, Dec 19, 2011 at 11:54:36PM +0100, Dodji Seketeli wrote: > PR debug/49951 > * g++.dg/gcov/gcov-2.C: New test. This change doesn't look like New test, just an adjustment to it... > diff --git a/gcc/testsuite/g++.dg/gcov/gcov-2.C b/gcc/testsuite/g++.dg/gcov/gcov-2.C > index 6d002f5..66d8af3 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(2) */ > + C c; /* count(1) */ > c.seti (1); /* count(1) */ > } > Jakub
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 0a43fb8..2fc794b 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13805,8 +13805,17 @@ cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain) cleanup = call; } + /* build_delete sets the location of the destructor call to the + current location, even though the destructor is going to be + called later, at the end of the current scope. This can lead to + a "jumpy" behaviour for users of debuggers when they step around + the end of the block. So let's unset the location of the + destructor call instead. */ + if (cleanup != NULL && EXPR_P (cleanup)) + SET_EXPR_LOCATION (cleanup, UNKNOWN_LOCATION); return cleanup; } + /* When a stmt has been parsed, this function is called. */ diff --git a/gcc/testsuite/g++.dg/gcov/gcov-2.C b/gcc/testsuite/g++.dg/gcov/gcov-2.C index 6d002f5..66d8af3 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(2) */ + C c; /* count(1) */ c.seti (1); /* count(1) */ }