Commit 3b445b24 by Jakub Jelinek Committed by Jakub Jelinek

re PR gcov-profile/64634 (gcov reports catch(...) as not executed)

	PR gcov-profile/64634
	* tree-eh.c (frob_into_branch_around): Fix up typos
	in function comment.
	(lower_catch): Put eh_seq resulting from EH lowering of
	the cleanup sequence after the cleanup rather than before
	it.

	* g++.dg/gcov/gcov-15.C: New test.

From-SVN: r220801
parent 98ce9490
2015-02-18 Jakub Jelinek <jakub@redhat.com>
PR gcov-profile/64634
* tree-eh.c (frob_into_branch_around): Fix up typos
in function comment.
(lower_catch): Put eh_seq resulting from EH lowering of
the cleanup sequence after the cleanup rather than before
it.
2015-02-18 Tom de Vries <tom@codesourcery.com>
* common.opt (fstdarg-opt): New option.
......
2015-02-18 Jakub Jelinek <jakub@redhat.com>
PR gcov-profile/64634
* g++.dg/gcov/gcov-15.C: New test.
2015-02-18 Tom de Vries <tom@codesourcery.com>
* gfortran.dg/coarray_35a.f90: Add missing cleanup-modules.
......
// PR gcov-profile/64634
// { dg-options "-fprofile-arcs -ftest-coverage" }
// { dg-do run { target native } }
void catchEx () // count(1)
{
__builtin_exit (0); // count(1)
try
{}
catch (int)
{}
}
int main () // count(1)
{
try
{
throw 5; // count(1)
}
catch (...) // count(1)
{
catchEx (); // count(1)
}
}
// { dg-final { run-gcov gcov-15.C } }
......@@ -884,10 +884,10 @@ eh_region_may_contain_throw (eh_region r)
/* We want to transform
try { body; } catch { stuff; }
to
normal_seqence:
normal_sequence:
body;
over:
eh_seqence:
eh_sequence:
landing_pad:
stuff;
goto over;
......@@ -1813,6 +1813,12 @@ lower_catch (struct leh_state *state, gtry *tp)
this_state.cur_region = state->cur_region;
this_state.ehp_region = try_region;
/* Add eh_seq from lowering EH in the cleanup sequence after the cleanup
itself, so that e.g. for coverage purposes the nested cleanups don't
appear before the cleanup body. See PR64634 for details. */
gimple_seq old_eh_seq = eh_seq;
eh_seq = NULL;
out_label = NULL;
cleanup = gimple_try_cleanup (tp);
for (gsi = gsi_start (cleanup);
......@@ -1849,7 +1855,11 @@ lower_catch (struct leh_state *state, gtry *tp)
gimple_try_set_cleanup (tp, new_seq);
return frob_into_branch_around (tp, try_region, out_label);
gimple_seq new_eh_seq = eh_seq;
eh_seq = old_eh_seq;
gimple_seq ret_seq = frob_into_branch_around (tp, try_region, out_label);
gimple_seq_add_seq (&eh_seq, new_eh_seq);
return ret_seq;
}
/* A subroutine of lower_eh_constructs_1. Lower a GIMPLE_TRY with a
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment