https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100496

            Bug ID: 100496
           Summary: False positive with -Wmaybe-uninitialized
           Product: gcc
           Version: 11.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jochen447 at concept dot de
  Target Milestone: ---

Created attachment 50784
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50784&action=edit
minimal example code to trigger the false positive warning

I have a piece of C code that is 100% correct, compiles fine, but evokes a
warning with -Wmaybe-uninitialized:

$ gcc -c -Wmaybe-uninitialized uninit.c
uninit.c: In function ‘findEncoding’:
uninit.c:19:3: warning: ‘buf’ may be used uninitialized [-Wmaybe-uninitialized]
   19 |   XmlUtf8Convert(p, p + sizeof(buf) - 1);
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
uninit.c:14:13: note: by argument 2 of type ‘const char * const’ to
‘XmlUtf8Convert’ declared here
   14 | extern void XmlUtf8Convert(char* p_start, const char* const p_end);
      |             ^~~~~~~~~~~~~~
uninit.c:17:8: note: ‘buf’ declared here
   17 |   char buf[128];
      |        ^~~


The compiler complains about the 2nd argument passed down to function
XmlUtf8Convert. It is indeed pointing to uninitialized memory (but so is the
first argument). But it cannot see that this pointer serves as a guard (pointer
arithmetic) - it is never dereferenced inside the function XmlUtf8Convert.

So the compiler's assumptions are wrong here.

More info:
==========

$ uname -a
Linux inspiron14l 5.11.18-300.fc34.x86_64 #1 SMP Mon May 3 15:10:32 UTC 2021
x86_64 x86_64 x86_64 GNU/Linux

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap
--enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,lto --prefix=/usr
--mandir=/usr/share/man --infodir=/usr/share/info
--with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared
--enable-threads=posix --enable-checking=release --enable-multilib
--with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions
--enable-gnu-unique-object --enable-linker-build-id
--with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin
--enable-initfini-array
--with-isl=/builddir/build/BUILD/gcc-11.1.1-20210428/obj-x86_64-redhat-linux/isl-install
--enable-offload-targets=nvptx-none --without-cuda-driver
--enable-gnu-indirect-function --enable-cet --with-tune=generic
--with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.1.1 20210428 (Red Hat 11.1.1-1) (GCC)

Reply via email to