check: Always mark _ck_assert_failed as noreturn

So that we can use `fail` like `g_assert_not_reached`.

The comment is apparently wrong or outdated, as GCC considers it legal
for noreturn-marked functions to return using longjmp.

See the thread at
https://gitlab.freedesktop.org/gstreamer/gst-plugins-ugly/-/merge_requests/59#note_576422

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/573>
This commit is contained in:
Jan Alexander Steffens (heftig) 2020-07-22 12:44:02 +02:00 committed by GStreamer Merge Bot
parent cb5d31a2fb
commit cd6bc944f9
2 changed files with 3 additions and 14 deletions

View file

@ -384,13 +384,12 @@ _ck_assert_failed (const char *file, int line, const char *expr, ...)
va_end (ap); va_end (ap);
send_failure_info (to_send); send_failure_info (to_send);
if (cur_fork_status () == CK_FORK) {
#if defined(HAVE_FORK) && HAVE_FORK==1 #if defined(HAVE_FORK) && HAVE_FORK==1
if (cur_fork_status () == CK_FORK) {
_exit (1); _exit (1);
#endif /* HAVE_FORK */
} else {
longjmp (error_jmp_buffer, 1);
} }
#endif /* HAVE_FORK */
longjmp (error_jmp_buffer, 1);
} }
SRunner * SRunner *

View file

@ -422,20 +422,10 @@ static void __testname (int _i CK_ATTRIBUTE_UNUSED)\
/* /*
* This is called whenever an assertion fails. * This is called whenever an assertion fails.
* Note that it only has the noreturn modifier when
* using fork. If fork is unavailable, the function
* calls longjmp() when a test assertion fails. Marking
* the function as noreturn causes gcc to make assumptions
* which are not valid, as longjmp() is like a return.
*/ */
#if @HAVE_FORK@
CK_DLL_EXP void CK_EXPORT CK_DLL_EXP void CK_EXPORT
_ck_assert_failed (const char *file, int line, const char *expr, ...) _ck_assert_failed (const char *file, int line, const char *expr, ...)
CK_ATTRIBUTE_NORETURN; CK_ATTRIBUTE_NORETURN;
#else
CK_DLL_EXP void CK_EXPORT _ck_assert_failed (const char *file, int line,
const char *expr, ...);
#endif
/** /**
* Fail the test if expression is false * Fail the test if expression is false