]> granicus.if.org Git - check/commit
check.h: only mark _ck_assert_failed as noreturn when using fork
authorbrarcher <brarcher@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Tue, 17 Dec 2013 03:28:26 +0000 (03:28 +0000)
committerbrarcher <brarcher@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Tue, 17 Dec 2013 03:28:26 +0000 (03:28 +0000)
commit5f9330466c6b1572210a82846ed3bf63d29eea0c
treeb294f419fa8cfa8ba020b69bbd50991f66db5e59
parenta7d8fe89e0e8285b3e9e2bbaabedf6b1821ab196
check.h: only mark _ck_assert_failed as noreturn when using fork

When fork is used, _ck_assert_failed will call exit() when a
failure occurs. Marking it as noreturn makes sense in this case.

When fork() is not used, longjmp() is called, which is a type of
return. Marking it as noreturn allows the compiler (gcc) to
make assumptions which are not true. Using longjmp causes
the unit testing program to segfault.

For this reason, the function is only marked as noreturn when
using fork(). Any static source code analysis to catch issues
must be done on a system with fork() to avoid possible false
positives.

git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@871 64e312b2-a51f-0410-8e61-82d0ca0eb02a
src/check.h.in