https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109289
Bug ID: 109289 Summary: Conflicting types for built-in functions in libgcc/emutls.c Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgcc Assignee: unassigned at gcc dot gnu.org Reporter: jdx at o2 dot pl Target Milestone: --- Created attachment 54759 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54759&action=edit Proposed patch For different hosts (Windows/MSYS2, Linux), different targets and for every libgcc variant, the following messages are reported: /d/Works/xcomp/gcc-build/./gcc/xgcc -B/d/Works/xcomp/gcc-build/./gcc/ -B/usr/local/h8300-elf/bin/ -B/usr/local/h8300-elf/lib/ -isystem /usr/local/h8300-elf/include -isystem /usr/local/h8300-elf/sys-include -isystem /d/Works/xcomp/sysroot/h8300-elf/include -ms -O2 -isystem /d/Works/xcomp/sysroot/h8300-elf/include -DIN_GCC -fPIC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -isystem ./include -DDF=SF -g -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector -Dinhibit_libc -DDF=SF -I. -I. -I../../.././gcc -I../../../../../gcc/libgcc -I../../../../../gcc/libgcc/. -I../../../../../gcc/libgcc/../gcc -I../../../../../gcc/libgcc/../include -o emutls.o -MT emutls.o -MD -MP -MF emutls.dep -fexceptions -c ../../../../../gcc/libgcc/emutls.c -fvisibility=hidden -DHIDE_EXPORTS d:\works\gcc\libgcc\emutls.c:61:7: warning: conflicting types for built-in function '__emutls_get_address'; expected 'void *(void *)' [-Wbuiltin-declaration-mismatch] 61 | void *__emutls_get_address (struct __emutls_object *); | ^~~~~~~~~~~~~~~~~~~~ d:\works\gcc\libgcc\emutls.c:63:6: warning: conflicting types for built-in function '__emutls_register_common'; expected 'void(void *, long unsigned int, long unsigned int, void *)' [-Wbuiltin-declaration-mismatch] 63 | void __emutls_register_common (struct __emutls_object *, word, word, void *); | ^~~~~~~~~~~~~~~~~~~~~~~~ d:\works\gcc\libgcc\emutls.c:140:1: warning: conflicting types for built-in function '__emutls_get_address'; expected 'void *(void *)' [-Wbuiltin-declaration-mismatch] 140 | __emutls_get_address (struct __emutls_object *obj) | ^~~~~~~~~~~~~~~~~~~~ d:\works\gcc\libgcc\emutls.c:204:1: warning: conflicting types for built-in function '__emutls_register_common'; expected 'void(void *, long unsigned int, long unsigned int, void *)' [-Wbuiltin-declaration-mismatch] 204 | __emutls_register_common (struct __emutls_object *obj, | ^~~~~~~~~~~~~~~~~~~~~~~~ Judging by the comment on line 138 the problem is known and acceptable, therefore IMO it would be nice to mute the warnings by wrapping declarations/definitions of these functions with "#pragma GCC diagnostic" e.g. as shown in the attached patch.