Message ID | 20130403144030.GA24873@redhat.com |
---|---|
State | New |
Headers | show |
On Wed, Apr 03, 2013 at 04:40:30PM +0200, Marek Polacek wrote: > In this PR we ICEd because instrument_func_exit checked that > the last stmt of predecessors of EXIT_BLOCK_PTR is GIMPLE_RETURN, > but here we should allow BUILT_IN_RETURN function as well, as > it's basically the same as return. > > I'm not sure about the testcase, but we don't have tsan testsuite > yet ... > > Regtested on x86_64-linux, ok for trunk? Ok for trunk/4.8. > 2013-04-03 Marek Polacek <polacek@redhat.com> > > PR sanitizer/55702 > * tsan.c (instrument_func_exit): Allow BUILT_IN_RETURN > functions. > > * gcc.dg/pr55702.c: New test. Jakub
--- gcc/tsan.c.mp 2013-04-03 15:20:20.525933474 +0200 +++ gcc/tsan.c 2013-04-03 16:06:36.482160964 +0200 @@ -681,7 +681,8 @@ instrument_func_exit (void) { gsi = gsi_last_bb (e->src); stmt = gsi_stmt (gsi); - gcc_assert (gimple_code (stmt) == GIMPLE_RETURN); + gcc_assert (gimple_code (stmt) == GIMPLE_RETURN + || gimple_call_builtin_p (stmt, BUILT_IN_RETURN)); loc = gimple_location (stmt); builtin_decl = builtin_decl_implicit (BUILT_IN_TSAN_FUNC_EXIT); g = gimple_build_call (builtin_decl, 0); --- gcc/testsuite/gcc.dg/pr55702.c.mp 2013-04-03 16:06:02.650055814 +0200 +++ gcc/testsuite/gcc.dg/pr55702.c 2013-04-03 16:05:33.984962743 +0200 @@ -0,0 +1,9 @@ +/* PR sanitizer/55702 */ +/* { dg-do compile { target { x86_64-*-linux* && lp64 } } } */ +/* { dg-options "-fsanitize=thread" } */ + +void +foo () +{ + __builtin_return (0); +}