[Bug other/93434] New: Miscompilation with -O3 starting from 8.1
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93434 Bug ID: 93434 Summary: Miscompilation with -O3 starting from 8.1 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: rlivings at mathworks dot com Target Milestone: --- We're working on upgrading our code base to GCC 8.3. In doing so one of our tests started failing with a wrong answer. After narrowing down we see that the code: #include typedef struct creal_T { double re; double im; } creal_T; #define N 16 int main() { int k; int i; int j; creal_T t2[N]; double inval; inval = 1.0; for (j = 0; j < N; ++j) { t2[j].re = 0; t2[j].im = 0; } for (j = 0; j < N/4; j++) { i = j * 4; t2[i].re = inval; t2[i].im = inval; /* Uncomment for correct behavior */ /* printf("t2[%d] = %g + %g*i\n", i, t2[i].re, t2[i].im); */ k = i + 3; t2[k].re = inval; t2[k].im = inval; t2[i] = t2[k]; t2[k].re = inval; } printf("\n"); for (i = 0; i < 2; ++i) { printf("t2[%2d] = %g + %g*i\n", i, t2[i].re, t2[i].im); } } generates a binary that prints: t2[ 0] = 0 + 1*i t2[ 1] = 0 + 0*i when compiled without warnings: -O3 -Wall -Wextra -fno-strict-aliasing -fwrapv in GCC 8.1 up through trunk. The -O2 and lower output is the correct answer: t2[ 0] = 1 + 1*i t2[ 1] = 0 + 0*i Adding -fsanitize=undefined,address runs without error and returns the expected answer. Godbolt link for reference: https://godbolt.org/z/uxVJ2K gcc -v Using built-in specs. COLLECT_GCC=.../gcc-8.3.0/bin/gcc COLLECT_LTO_WRAPPER=.../gcc-8.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: .../gcc-8.3/configure --with-gmp=.../gcc-8.3/gmp-4.3 --with-mpfr=../gcc-8.3/mpfr --with-mpc=...gcc-8.3/mpc --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --enable-plugin --enable-checking=release --enable-multiarch --enable-gold --enable-ld=default --enable-libstdcxx-time=no --prefix=gcc-8.3.0 --with-pkgversion='MW GCC 8.3.0-gold' --with-tune=generic --with-system-zlib --enable-multilib --with-multilib-list=m32,m64 --with-arch-directory=amd64 --with-arch-32=i586 --with-abi=m64 Thread model: posix gcc version 8.3.0 (GCC 8.3.0-gold)
[Bug c/93435] New: Hang with -O2 on innocuous looking code with GCC 8.3
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93435 Bug ID: 93435 Summary: Hang with -O2 on innocuous looking code with GCC 8.3 Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: rlivings at mathworks dot com Target Milestone: --- We're working on upgrading our code base to gcc 8.3 and hit a test which hung. Upon further investigation the gcc invocation was hanging. A standalone repro from that code is: typedef signed char int8_T; typedef int int32_T; typedef struct { int8_T a; } struct0_T; typedef struct { struct0_T f10[4]; } struct_T; typedef struct { struct_T f9[4]; } b_struct_T; typedef struct { b_struct_T f8[4]; } c_struct_T; typedef struct { c_struct_T f7[4]; } d_struct_T; typedef struct { d_struct_T f6[4]; } e_struct_T; typedef struct { e_struct_T f5[4]; } f_struct_T; typedef struct { f_struct_T f4[4]; } g_struct_T; typedef struct { g_struct_T f3[4]; } h_struct_T; typedef struct { h_struct_T f2[4]; } i_struct_T; typedef struct { i_struct_T f1[4]; } j_struct_T; typedef struct { struct { j_struct_T ds21[4]; i_struct_T ds20[4]; i_struct_T r9; } f0; } deep_struct_arraysStackData; /* Function Definitions */ void deep_struct_arrays(deep_struct_arraysStackData *SD, int8_T in1, int8_T inCount, int8_T *out1, int8_T *out2, struct0_T out3[4]) { struct0_T r; struct_T r1; b_struct_T r2; c_struct_T r3; d_struct_T r4; e_struct_T r5; f_struct_T r6; g_struct_T r7; h_struct_T r8; int32_T count; int32_T i; /* Check properties of input in1 */ /* Check properties of input inCount */ /* Copyright 2006 The MathWorks, Inc. */ r.a = in1; r1.f10[0] = r; r1.f10[1] = r; r1.f10[2] = r; r1.f10[3] = r; r2.f9[0] = r1; r2.f9[1] = r1; r2.f9[2] = r1; r2.f9[3] = r1; r3.f8[0] = r2; r3.f8[1] = r2; r3.f8[2] = r2; r3.f8[3] = r2; r4.f7[0] = r3; r4.f7[1] = r3; r4.f7[2] = r3; r4.f7[3] = r3; r5.f6[0] = r4; r5.f6[1] = r4; r5.f6[2] = r4; r5.f6[3] = r4; r6.f5[0] = r5; r6.f5[1] = r5; r6.f5[2] = r5; r6.f5[3] = r5; r7.f4[0] = r6; r7.f4[1] = r6; r7.f4[2] = r6; r7.f4[3] = r6; r8.f3[0] = r7; r8.f3[1] = r7; r8.f3[2] = r7; r8.f3[3] = r7; SD->f0.r9.f2[0] = r8; SD->f0.r9.f2[1] = r8; SD->f0.r9.f2[2] = r8; SD->f0.r9.f2[3] = r8; SD->f0.ds20[0] = SD->f0.r9; SD->f0.ds20[3] = SD->f0.r9; count = 0; while (count < inCount) { i = in1 + SD->f0.ds20[0].f2[0].f3[0].f4[0].f5[0].f6[0].f7[0].f8[0].f9[0] .f10[0].a; if (i > 127) { i = 127; } else { if (i < -128) { i = -128; } } SD->f0.ds20[0].f2[0].f3[0].f4[0].f5[0].f6[0].f7[0].f8[0].f9[0].f10[0].a = (int8_T)i; i = SD->f0.ds20[3].f2[3].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3].f10[3].a + 3; if (i > 127) { i = 127; } SD->f0.ds20[3].f2[3].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3].f10[3].a = (int8_T)i; count++; } if (inCount > 10) { SD->f0.ds21[0].f1[1].f2[2].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3].f10[3]. a = 14; } else { SD->f0.ds21[0].f1[1].f2[2].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3].f10[3]. a = 16; } *out1 = SD->f0.ds20[0].f2[0].f3[0].f4[0].f5[0].f6[0].f7[0].f8[0].f9[0].f10[0]. a; *out2 = SD->f0.ds20[3].f2[3].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3].f10[3]. a; out3[0] = r; out3[1] = r; out3[2] = r; out3[3] = SD->f0.ds21[0].f1[1].f2[2].f3[3].f4[3].f5[3].f6[3].f7[3].f8[3].f9[3] .f10[3]; } That causes a hang when compiled with -O2. Adding in -Q gives: gcc -O2 -Q -c foo.c deep_struct_arrays Analyzing compilation unit Performing interprocedural optimizations <*free_lang_data> Assembling functions: deep_struct_arrays {GC 401309k -> 221133k} with no progress past that point. Adding in: -Wall -Wextra -fno-strict-aliasing -fwrapv shows no warnings and the same hang is observed. gcc -v Using built-in specs. COLLECT_GCC=.../gcc-8.3.0/bin/gcc COLLECT_LTO_WRAPPER=.../gcc-8.3.0/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: .../gcc-8.3/configure --with-gmp=.../gcc-8.3/gmp-4.3 --with-mpfr=../gcc-8.3/mpfr --with-mpc=...gcc-8.3/mpc --enable-languages=c,c++,fortran --enable-shared --enable-linker-build-id --enable-plugin --enable-checking=release --enable-multiarch --enable-gold --enable-ld=default --enable-libstdcxx-time=no --prefix=gcc-8.3.0 --with-pkgversion='MW GCC 8.3.0-gold' --with-tune=generic --with-system-zlib --enable-multilib --with-multilib-list=m32,m64 --with-arch-directory=amd64 --with-arch-32=i586 --with-abi=m64 Thread model: posix gcc version 8.3.0 (GCC 8.3.0-gold)
[Bug tree-optimization/93434] [8/9 Regression] Miscompilation with -O3 starting from 8.1
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93434 --- Comment #7 from Ryan Livingston --- Many thanks. The responsiveness here has been nothing short of impressive!