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

            Bug ID: 121572
           Summary: [16 Regression] Wrong code on mpfr-4.2.2 and
                    python-3.13.6 since r16-3190-g5cf1b9a03ec5b6
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: slyfox at gcc dot gnu.org
  Target Milestone: ---

I initially noticed the error as a python-3.13.6 build failure and a mpfr-4.2.2
testsuite failure. I bisected gcc down to r16-3190-g5cf1b9a03ec5b6 "x86-64:
Remove redundant TLS calls".

Out of mpfr-4.2.2 I managed to extract this self-contained example (needs 2
files):

// $ cat b.c
void bug(void);
int main(void) { bug(); }

// $ cat a.c
static __thread int tv_cache;
__attribute__((noipa)) static void use_cache (int) {}

__attribute__((noipa)) static int val (int v) { return v; }

__attribute__((noipa))
__attribute__((optimize(2)))
void bug (void)
{
  int compared = val(-1);

  if (compared == 0 || (compared > 0 && val(2) == 0))
    {
      __builtin_trap();
    }

  if (compared < 0) {
    use_cache(tv_cache);
    return;
  }

  use_cache(tv_cache);
  __builtin_trap();
}

int main(void)
{
  bug();
}

Crashing from a gcc build tree:

$ gcc="gcc/xgcc -Bgcc"; $gcc a.c -fPIC -shared -o liba.so && $gcc b.c -o b
-Wl,-rpath=. -L. -la && ./b
Illegal instruction        (core dumped) ./b

It should work just fine. Minor tweaks (like -O1) usually make it work:

$ gcc="gcc/xgcc -Bgcc"; $gcc a.c -O1 -fPIC -shared -o liba.so && $gcc b.c -o b
-Wl,-rpath=. -L. -la && ./b


Compiler details:

$ gcc -v
Reading specs from gcc/specs
COLLECT_GCC=gcc/xgcc
COLLECT_LTO_WRAPPER=gcc/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /home/slyfox/dev/git/gcc/configure --disable-multilib
--disable-bootstrap --disable-lto --disable-libsanitizer --enable-languages=c
CFLAGS='-O1 -g0' CXXFLAGS='-O1 -g0' LDFLAGS='-O1 -g0'
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 16.0.0 20250816 (experimental) (GCC)

Reply via email to