$ cat > m.h <<-EOF typedef long unsigned int size_t; #define __THROW
/* Remap pages mapped by the range [ADDR,ADDR+OLD_LEN) to new length NEW_LEN. If MREMAP_MAYMOVE is set in FLAGS the returned address may differ from ADDR. If MREMAP_FIXED is set in FLAGS the function takes another paramter which is a fixed address at which the block resides after a successful call. */ extern void *mremap (void *__addr, size_t __old_len, size_t __new_len, int __flags, ...) __THROW; EOF $ cat >m.c<<-EOF #define mremap _hidemremap #include "m.h" #undef mremap /* normally the syscall is here */ void *mremap(void *addr, size_t osz, size_t nsz, int fl, void *ptr){return (void*)0;} EOF $ cat >m_user.c<<-EOF #include "m.h" void *user(void) { return mremap((char*)0, 0, 0, 0); } EOF $ gcc-4.4-HEAD -c -combine m.c m_user.c In file included from m_user.c:1: m.h:9: error: conflicting types for mremap m.c:5: error: previous definition of mremap was here Ideally the __VA_ARGS__ would be dealt with as "any or none" param decl, so the function(s) above would be considered equal. -- Summary: IMA rejects to merge (function)decls with va_args Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: aldot at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36849