Hi David, On Mon, May 18, 2020 at 11:09:18AM -0400, David Malcolm wrote: > On Mon, 2020-05-18 at 16:47 +0200, Mark Wielaard wrote: > > On Mon, May 18, 2020 at 08:45:36AM -0400, David Malcolm wrote: > > > Also, m_unsafe_fndecl is a field of signal_unsafe_call, so we can > > > delay > > > calling replacement_fn until inside signal_unsafe_call::emit, after > > > the > > > warning has been emitted. > > > > > > It could even become a member function of signal_unsafe_call, > > > giving > > > something like this for signal_unsafe_call::emit: > > > > Thanks for all the hints. I adopted all your suggestions and the > > warning plus note now looks like: > > [...] > > bzip2.c:874:4: note: ‘_exit’ is a possible signal-safe alternative > > for ‘exit’ > > 874 | exit(exitValue); > > | ^~~~~~~~~~~~~~~ > > | _exit > > > > I also added a testcase. How about the attached? > > Overall, I like it, but it looks like there's a problem with the > location of the fix-it hint: it looks like it might be replacing the > whole of the underlined section of the call, argument, parentheses and > all, with "_exit", rather than just the "exit" token. I wonder if the > location of that token is still available in the middle-end by the time > the analyzer runs. > > What does -fdiagnostics-generate-patch emit?
--- bzip2.c +++ bzip2.c @@ -871,7 +871,7 @@ terribly wrong. Trying to clean up might fail spectacularly. */ if (opMode == OM_Z) setExit(3); else setExit(2); - exit(exitValue); + _exit; } Hmmm, back to the drawing board it seems. Thanks, Mark