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

            Bug ID: 115702
           Summary: Incorrect stringop-overflow warning with -O3
           Product: gcc
           Version: 14.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: christian at zeek dot org
  Target Milestone: ---

When compiling sqlite's all-in-one source file with -O3 it throws an erroneous
stringop-overread warning not present with -O2:

$ wget https://www.sqlite.org/2024/sqlite-amalgamation-3460000.zip
$ md5sum sqlite-amalgamation-3460000.zip
78c40a42c3d2e2a52ab011edb33e99cf  sqlite-amalgamation-3460000.zip
$ unzip sqlite-amalgamation-3460000.zip
$ cd sqlite-amalgamation-3460000

$ gcc -c -Wall -O3 sqlite3.c
In function ‘sqlite3Strlen30’,
    inlined from ‘sqlite3ColumnSetColl’ at sqlite3.c:122170:10:
sqlite3.c:35009:28: error: ‘strlen’ reading 1 or more bytes from a region of
size 0 [-Werror=stringop-overread]
35009 |   return 0x3fffffff & (int)strlen(z);
      |                            ^~~~~~~~~
In function ‘sqlite3ColumnSetColl’:
cc1: note: source object is likely at address zero
$

$ gcc -c -Wall -O2 sqlite3.c
$

Apologies for not reducing this to a manageable reproducer. I am not affiliated
with the sqlite3 project and just wanted to send a heads-up since we noticed
this in our project, which embeds their source, and uses -Werror. I could only
trigger this on sqlite's all-in-one source file, not the individual sources.

Discussion in the sqlite3 project:
https://www.sqlite.org/forum/forumpost/b1cc55671e

Context on gcc:

$ gcc --version
gcc (GCC) 14.1.1 20240620 (Red Hat 14.1.1-6)

$ rpm -qf /usr/bin/gcc
gcc-14.1.1-6.fc40.x86_64

$ lsb_release -a
LSB Version:    :core-5.0-amd64:core-5.0-noarch
Distributor ID: Fedora
Description:    Fedora release 40 (Forty)

$ uname -a
Linux test 6.9.5-200.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Jun 16 15:47:09 UTC
2024 x86_64 GNU/Linux

Best,
Christian

Reply via email to