problems with "clobbered" warnings
Zack Weinberg
zack@wolery.cumb.org
Thu Jun 22 15:12:00 GMT 2000
On Thu, Jun 22, 2000 at 05:19:00PM -0400, Michael Richardson wrote:
>
> I am attempting to get some code to compile with -Wall -Werror. I have just
> introduced a setjmp() to catch errors...
>
> I get warnings like:
>
> paxas.c:211: warning: variable `infilename' might be clobbered by `longjmp' or `vfork'
...
>
> Is there someone who can offer a better description of when a variable may
> be considered to be clobbered, or a workaround that permits me to shut up
> just that test without giving up on the uninitialized warning?
The compiler generates those warnings for just about every variable in
a function that calls setjmp or vfork.
Your best option is not to use setjmp() at all. Have a
cleanup_and_exit() that cleans up and calls exit; mark it noreturn;
and call it directly whenever you would have called longjmp.
If that's not feasible for some reason, you may be able to structure
your code like this:
jmp_buf env;
int
main(void)
{
if(setjmp(env))
{
cleanup();
return 1;
}
do_all_the_real_work();
return 0;
}
- the key being to have no actual code in the routine that calls
setjmp, just function calls.
zw
More information about the Gcc-bugs
mailing list