Compilation issues of racketcs with GCC7.4.0

36 views
Skip to first unread message

Paulo Matos

unread,
Jun 5, 2019, 9:04:37 AM6/5/19
to Racket Developers
Hi,

This is just to let you know of a GCC bug in GCC7.4.0 (default in Ubuntu
18.04 LTS) when compiling racketcs.

GCC complains about
vfasl.c:358:134: error: array subscript is above array bounds
[-Werror=array-bounds]

on vfasl.c of Chez sources. However, this is a false positive fixed on
more recent GCC versions. On ubuntu 18.04:
racket/racket/src/ChezScheme/ta6le/c$ apt-get install -y gcc-8
racket/racket/src/ChezScheme/ta6le/c$ gcc -m64 -msse2 -Wpointer-arith
-Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT
-pthread -march=native -O3 -Wall -DELF_FIND_BOOT_SECTION -pthread -c
-DX86_64 -I../boot/ta6le -I../zlib -I../lz4/lib vfasl.c
vfasl.c: In function ‘S_vfasl’:
vfasl.c:352:134: error: array subscript is above array bounds
[-Werror=array-bounds]
MAYBE_FIXUP(0);
...
cc1: all warnings being treated as errors
racket/racket/src/ChezScheme/ta6le/c$ gcc-8 -m64 -msse2 -Wpointer-arith
-Wall -Wextra -Werror -Wno-implicit-fallthrough -O2 -D_REENTRANT
-pthread -march=native -O3 -Wall -DELF_FIND_BOOT_SECTION -pthread -c
-DX86_64 -I../boot/ta6le -I../zlib -I../lz4/lib vfasl.c
$

The broken gcc version:
$ gcc --version
gcc (Ubuntu 7.4.0-1ubuntu1~18.04) 7.4.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Fixed:
$ gcc-8 --version
gcc-8 (Ubuntu 8.3.0-6ubuntu1~18.04) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

The might have come in long before 8.3.0 but I haven't run further
tests. This is relevant to know because the bug is in the default GCC
for Ubuntu LTS.

If I find more, I will let you know.

Regards,
--
Paulo Matos

Matthew Flatt

unread,
Jun 5, 2019, 9:22:10 AM6/5/19
to Paulo Matos, Racket Developers
Thanks!

It looks like this happens only with -O3, so most users won't run into
it (with the default -O2).


I see that changing the declaration

uptr vspace_offsets[vspaces_count+1];

to

uptr vspace_offsets[2*vspaces_count+1];

makes the error go away, but I don't know whether it's just a bug in
array-bounds checking (in which case extending the array size should be
harmless) or reflects a miscompilation (in which case extending the
array size just masks a problem).
> --
> You received this message because you are subscribed to the Google Groups
> "Racket Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to racket-dev+...@googlegroups.com.
> To post to this group, send email to racke...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/racket-dev/72642853-8f01-61a3-033d-b38be5e712
> 07%40linki.tools.
> For more options, visit https://groups.google.com/d/optout.

Paulo Matos

unread,
Jun 5, 2019, 9:36:06 AM6/5/19
to racke...@googlegroups.com


On 05/06/2019 15:22, Matthew Flatt wrote:
> Thanks!
>
> It looks like this happens only with -O3, so most users won't run into
> it (with the default -O2).
>

Correct.

>
> I see that changing the declaration
>
> uptr vspace_offsets[vspaces_count+1];
>
> to
>
> uptr vspace_offsets[2*vspaces_count+1];
>
> makes the error go away, but I don't know whether it's just a bug in
> array-bounds checking (in which case extending the array size should be
> harmless) or reflects a miscompilation (in which case extending the
> array size just masks a problem).
>

It is afaict, a bug in the array bounds calculation. So, increasing it
masks the problem.

I have tested latest commit from the gcc 7 branch and it still has the
problem.

/home/pmatos/Projects/gcc-build/gcc/cc1 -fpreprocessed vfasl.i -quiet
-dumpbase vfasl.i -m64 -msse2 -mtune=generic -march=x86-64 -auxbase
vfasl -O3 -Wpointer-arith -Wextra -Werror -Wimplicit-fallthrough=0 -Wall
-version -o /tmp/ccYGabNR.s
GNU C11 (GCC) version 7.4.1 20190605 (x86_64-pc-linux-gnu)
compiled by GNU C version 8.2.1 20181127, GMP version 6.1.2,
MPFR version 4.0.2, MPC version 1.1.0, isl version none
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU C11 (GCC) version 7.4.1 20190605 (x86_64-pc-linux-gnu)
compiled by GNU C version 8.2.1 20181127, GMP version 6.1.2,
MPFR version 4.0.2, MPC version 1.1.0, isl version none
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 4c52f0564d8672c9a189665c732e246d
vfasl.c: In function ‘S_vfasl’:
vfasl.c:352:134: error: array subscript is above array bounds
[-Werror=array-bounds]

I will bisect this to see what's going on just out of curiosity.

Will let you know.
--
Paulo Matos

Paulo Matos

unread,
Jun 5, 2019, 2:31:30 PM6/5/19
to racke...@googlegroups.com


On 05/06/2019 15:35, 'Paulo Matos' via Racket Developers wrote:
> Will let you know.
>

For those interested this party continues here:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90758


--
Paulo Matos
Reply all
Reply to author
Forward
0 new messages