Bug 24950 - Top-of-tree glibc does not build with top-of-tree GCC (stringop-overflow error)
Summary: Top-of-tree glibc does not build with top-of-tree GCC (stringop-overflow error)
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: localedata (show other bugs)
Version: unspecified
: P2 normal
Target Milestone: 2.31
Assignee: Florian Weimer
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-08-29 18:59 UTC by sje@gcc.gnu.org
Modified: 2019-09-03 13:01 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description sje@gcc.gnu.org 2019-08-29 18:59:08 UTC
This bug is discussed at https://sourceware.org/ml/libc-alpha/2019-08/msg00774.html.  The GCC folks think that the Glibc sources should be changed to avoid this warning/error.


From email string:

I am building the latest glibc with the latest GCC and getting an error.
I see where, in locale/programs/charmap.h we declare bytes as a zero
length array in charseq but I am not sure where the write in
locale/programs/ld-ctype.c is.  The only line references that GCC seems
to be outputing refer to the declaration.


cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
In file included from programs/repertoire.h:24,
                 from programs/localedef.h:32,
                 from programs/ld-ctype.c:35:
programs/charmap.h:63:17: note: destination object declared here
   63 |   unsigned char bytes[0];
      |                 ^~~~~
cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
programs/charmap.h:63:17: note: destination object declared here
cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
programs/charmap.h:63:17: note: destination object declared here
cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
programs/charmap.h:63:17: note: destination object declared here
cc1: all warnings being treated as errors
../o-iterator.mk:9: recipe for target '/home/sellcey/tot/obj/glibc64/locale/ld-
ctype.o' failed
make[2]: *** [/home/sellcey/tot/obj/glibc64/locale/ld-ctype.o] Error 1
Comment 1 Sourceware Commits 2019-09-03 12:57:41 UTC
The master branch has been updated by Florian Weimer <fw@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=1471fa556afb428c4a4c46cf5543a4101d5bcf91

commit 1471fa556afb428c4a4c46cf5543a4101d5bcf91
Author: Florian Weimer <fweimer@redhat.com>
Date:   Tue Sep 3 14:01:39 2019 +0200

    localedef: Use initializer for flexible array member [BZ #24950]
    
    struct charseq used a zero-length array instead of a flexible array
    member.  This required a strange construct to initialize struct
    charseq objects, and GCC 10 warns about that:
    
    cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
    In file included from programs/repertoire.h:24,
                     from programs/localedef.h:32,
                     from programs/ld-ctype.c:35:
    programs/charmap.h:63:17: note: destination object declared here
       63 |   unsigned char bytes[0];
          |                 ^~~~~
    cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
    programs/charmap.h:63:17: note: destination object declared here
    cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
    programs/charmap.h:63:17: note: destination object declared here
    cc1: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
    programs/charmap.h:63:17: note: destination object declared here
    
    The change makes the object physically const, but it is not expected
    to be modified.
Comment 2 Florian Weimer 2019-09-03 13:00:04 UTC
Fixed in glibc 2.31.
Comment 3 Florian Weimer 2019-09-03 13:01:14 UTC
.