Message ID | CAAHN_R2AiK_uCtc-eSv899=EpCK7RtKTN66XtTgUb=Yni3Ut=Q@mail.gmail.com |
---|---|
State | New |
Headers | show |
On 08/12/2011 03:18 PM, Siddhesh Poyarekar wrote: > When the location for throw() exception specification is not the same > as the function it is written against, it leads gcov to give incorrect > results. See bug 50055 for details of the the same. The following > patch makes sure that the exception specification block (nothrow or > otherwise) is always associated with the function definition line > number. I'm applying this patch, thanks. This patch is small enough not to need it, but for future contributions please file a copyright assignment with the FSF. Send email to assign@gnu.org for more information. Jason
On Tue, Aug 23, 2011 at 10:56:26AM -0400, Jason Merrill wrote: > This patch is small enough not to need it, but for future > contributions please file a copyright assignment with the FSF. Send > email to assign@gnu.org for more information. I think Siddhesh should be covered by the Red Hat assignment (it would help if the patch has been mailed from a redhat.com address to notice that). Jakub
On Tue, Aug 23, 2011 at 8:33 PM, Jakub Jelinek <jakub@redhat.com> wrote: > On Tue, Aug 23, 2011 at 10:56:26AM -0400, Jason Merrill wrote: >> This patch is small enough not to need it, but for future >> contributions please file a copyright assignment with the FSF. Send >> email to assign@gnu.org for more information. > > I think Siddhesh should be covered by the Red Hat assignment (it would help > if the patch has been mailed from a redhat.com address to notice that). > Thanks! I will keep that in mind for future submissions.
Index: gcc/testsuite/g++.dg/gcov/gcov-7.C =================================================================== --- gcc/testsuite/g++.dg/gcov/gcov-7.C (revision 0) +++ gcc/testsuite/g++.dg/gcov/gcov-7.C (revision 0) @@ -0,0 +1,28 @@ +/* Check that Exception handler specification is not + mapped to the curly braces below the function + declaration. */ + +/* { dg-options "-fprofile-arcs -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +struct foo +{ + foo () throw (int) + { /* count (-) */ + throw (1); + } +}; + +int main () +{ + try + { + foo f; + } + catch ( ...) + { + return 0; + } +} + +/* { dg-final { run-gcov gcov-7.C } } */ Index: gcc/cp/except.c =================================================================== --- gcc/cp/except.c (revision 177613) +++ gcc/cp/except.c (working copy) @@ -527,15 +527,17 @@ begin_eh_spec_block (void) { tree r; + location_t spec_location = DECL_SOURCE_LOCATION (current_function_decl); + /* A noexcept specification (or throw() with -fnothrow-opt) is a MUST_NOT_THROW_EXPR. */ if (TYPE_NOEXCEPT_P (TREE_TYPE (current_function_decl))) { - r = build_stmt (input_location, MUST_NOT_THROW_EXPR, NULL_TREE); + r = build_stmt (spec_location, MUST_NOT_THROW_EXPR, NULL_TREE); TREE_SIDE_EFFECTS (r) = 1; } else - r = build_stmt (input_location, EH_SPEC_BLOCK, NULL_TREE, NULL_TREE); + r = build_stmt (spec_location, EH_SPEC_BLOCK, NULL_TREE, NULL_TREE); add_stmt (r); TREE_OPERAND (r, 0) = push_stmt_list (); return r;