https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84629
--- Comment #6 from Martin Liška <marxin at gcc dot gnu.org> --- I'm curious about: /home/marxin/Programming/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cc: In function ‘void* __sanitizer::internal_start_thread(void (*)(void*), void*)’: /home/marxin/Programming/gcc/libsanitizer/sanitizer_common/sanitizer_linux.cc:1733:58: warning: cast between incompatible function types from ‘void (*)(void*)’ to ‘void* (*)(void*)’ [-Wcast-function-type] 1733 | real_pthread_create(&th, nullptr, (void*(*)(void *arg))func, arg); | ^~~~ Shouldn't something like: diff --git a/libsanitizer/sanitizer_common/sanitizer_linux.cc b/libsanitizer/sanitizer_common/sanitizer_linux.cc index f1f70ec57fc..7571ff9b25d 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux.cc +++ b/libsanitizer/sanitizer_common/sanitizer_linux.cc @@ -1719,7 +1719,7 @@ HandleSignalMode GetHandleSignalMode(int signum) { } #if !SANITIZER_GO -void *internal_start_thread(void(*func)(void *arg), void *arg) { +void *internal_start_thread(void*(*func)(void *arg), void *arg) { // Start the thread with signals blocked, otherwise it can steal user signals. __sanitizer_sigset_t set, old; internal_sigfillset(&set); @@ -1730,7 +1730,7 @@ void *internal_start_thread(void(*func)(void *arg), void *arg) { #endif internal_sigprocmask(SIG_SETMASK, &set, &old); void *th; - real_pthread_create(&th, nullptr, (void*(*)(void *arg))func, arg); + real_pthread_create(&th, nullptr, func, arg); internal_sigprocmask(SIG_SETMASK, &old, nullptr); return th; } @@ -1739,7 +1739,7 @@ void internal_join_thread(void *th) { real_pthread_join(th, nullptr); } #else -void *internal_start_thread(void (*func)(void *), void *arg) { return 0; } +void *internal_start_thread(void *(*func)(void *), void *arg) { return 0; } void internal_join_thread(void *th) {} #endif by applied to libsanitizer mainline?