svn commit: r245494 - head/bin/pwait

Bruce Evans brde at optusnet.com.au
Thu Jan 17 02:07:57 UTC 2013


On Wed, 16 Jan 2013, Eitan Adler wrote:

> On 16 January 2013 13:11, Xin Li <delphij at delphij.net> wrote:
>
>> Yes I did.  Using exit(3) tells clang that this is the final exit and
>> thus eliminates the warning.
>>
>> It sounds like a bug (or arguably a feature) that clang does not
>> recognize return in main()s...
>
> It is not a bug: see

Of course it is a bug.

> http://clang-developers.42468.n3.nabble.com/Static-analyzer-possible-memory-leak-false-positive-td4026706.html

Not much signal there.

C99 requires main() to be handled specially in hosted environments.
(In freestanding environments(), neither main() nor malloc() is special.
Now the compiler could warn about main(), but it cannot know what
malloc() does so it cannot warn about not freeing memory on return
from main().)  It requires that, if the return type of main() is
compatible with int (and thus not void), then a return from the
_initial_ call to main() is equivalent to calling exit() with an arg
equal to the return value (and that if main() doesn't explicitly return
or exit, but falls through to the closing brace, then this is equivalent
to 'return (0);'.

It seems to be permitted to call malloc() recursively (otherwise C99
w.  The warning is useful if main() is called recursively.  But few
programs call main() recursively.  pwait(1) obviously doesn't.  The
the bug is quality of implementation one.  The static analyzer is too
stupid to see that main() isn't called recursively.

Bruce


More information about the svn-src-all mailing list