https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105650
Bug ID: 105650 Summary: [13 Regression] Possibly wrong code on fontforge -fvect-cost-model=unlimited Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: slyfox at gcc dot gnu.org Target Milestone: --- Initially encountered wrong code on fontforge-2022-03-08 where it failed to generate djvu fonts and crashed. I spent some time extracting example and I hope I got it without without breaking it too much: // $ cat a.c // Extracted from fontforge-2022-03-08: // $ gcc-13/bin/gcc -O2 a.c -o a && ./a // ok // $ gcc-13/bin/gcc -O2 -fvect-cost-model=unlimited a.c -o a && ./a // SIGSEGV #include <stdlib.h> typedef struct SplineChar2 { int * p1; int * p2; } SplineChar2; volatile SplineChar2 gp; static void dumpgposkernclass(void) __attribute__((noipa)); static void dumpgposkernclass(void) { volatile SplineChar2 * a[6] = {&gp, &gp, 0, 0, 0, &gp, }; volatile int l = 6; volatile SplineChar2 **gs = a; int numGlyphs = l; int i, cnt; volatile int v; volatile SplineChar2 **glyphs__; // count non-null for ( i=cnt=0; i<numGlyphs; ++i ) if ( gs[i]!=NULL ) ++cnt; size_t bl = (cnt+1)*sizeof(volatile SplineChar2 *); v = cnt+1; glyphs__ = malloc(bl); // store non-nulls for ( i=cnt=0; i<numGlyphs; ++i ) if ( gs[i]!=NULL ) glyphs__[cnt++] = gs[i]; // null-terminate glyphs__[cnt++] = NULL; // corruption happens here if (v != cnt) __builtin_trap(); } int main(void) { dumpgposkernclass(); } Triggering: $ gcc-13/bin/gcc -O2 a.c -o a && ./a $ gcc-13/bin/gcc -O2 -fvect-cost-model=unlimited a.c -o a && ./a Illegal instruction (core dumped) It's a weekly gcc-13 from this week: $ gcc-13/bin/gcc -v |& unnix Using built-in specs. COLLECT_GCC=/<<NIX>>/gcc-13.0.0/bin/gcc COLLECT_LTO_WRAPPER=/<<NIX>>/gcc-13.0.0/libexec/gcc/x86_64-unknown-linux-gnu/13.0.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix Supported LTO compression algorithms: zlib gcc version 13.0.0 20220515 (experimental) (GCC)