On Wed, Jun 11, 2014 at 2:28 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote: > Hi, > > On 05/22/2014 09:02 PM, Jakub Jelinek wrote: >> >> In file included from >> ../../../../trunk/libsanitizer/asan/asan_interceptors.cc:147:0: >> >> ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc: >> In function ‘int __interceptor_accept4(int, void*, unsigned int*, >> int)’: >> >> ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:1821:12: >> warning: ‘addrlen0’ may be used uninitialized in this function >> [-Wmaybe-uninitialized] >> unsigned addrlen0; >> ^ >> >> ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc: >> In function ‘int __interceptor_accept(int, void*, unsigned int*)’: >> >> ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:1799:12: >> warning: ‘addrlen0’ may be used uninitialized in this function >> [-Wmaybe-uninitialized] >> unsigned addrlen0; >> ^ >> That sounds like a false positive warning: >> unsigned addrlen0; >> if (addrlen) { >> COMMON_INTERCEPTOR_READ_RANGE(ctx, addrlen, sizeof(*addrlen)); >> addrlen0 = *addrlen; >> } >> int fd2 = REAL(accept4)(fd, addr, addrlen, f); >> if (fd2 >= 0) { >> if (fd >= 0) COMMON_INTERCEPTOR_FD_SOCKET_ACCEPT(ctx, fd, fd2); >> if (addr && addrlen) >> COMMON_INTERCEPTOR_WRITE_RANGE(ctx, addr, Min(*addrlen, addrlen0)); >> } >> (unless the COMMON_INTERCEPTOR* macros do too weird stuff), wonder why the >> predicate aware uninit doesn't handle this. > > By the way, I'm still seeing the above. Maybe a maintainer can have a look, > double check it's just a false positive a shut it up somehow?
I've "fixed" this in upstream trunk: http://llvm.org/viewvc/llvm-project?view=revision&revision=211008 This will get into GCC with the next merge; or feel free to cherry pick. Meanwhile, this still smells like a bug in GCC's -Wmaybe-uninitialized -- I'd encourage you to at least file a bug on it. --kcc > > Thanks! > Paolo.