https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105445
Bug ID: 105445 Summary: miscompile on ia64 with -foptimize-sibling-calls Product: gcc Version: 11.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: matoro_gcc_bugzilla at matoro dot tk Target Milestone: --- On ia64, the berkeleydb python module ( https://www.jcea.es/programacion/pybsddb.htm , https://pypi.org/project/berkeleydb/ ) is generating code that triggers a SIGILL during unit tests with -O2. The code does not crash with -O2 -fno-optimize-sibling-calls. I apologize for not having a minimized test case. Preprocessed source is attached though. GCC details: Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/ia64-unknown-linux-gnu/11.3.0/lto-wrapper Target: ia64-unknown-linux-gnu Configured with: /var/tmp/portage/sys-devel/gcc-11.3.0/work/gcc-11.3.0/configure --host=ia64-unknown-linux-gnu --build=ia64-unknown-linux-gnu --prefix=/usr --bindir=/usr/ia64-unknown-linux-gnu/gcc-bin/11.3.0 --includedir=/usr/lib/gcc/ia64-unknown-linux-gnu/11.3.0/include --datadir=/usr/share/gcc-data/ia64-unknown-linux-gnu/11.3.0 --mandir=/usr/share/gcc-data/ia64-unknown-linux-gnu/11.3.0/man --infodir=/usr/share/gcc-data/ia64-unknown-linux-gnu/11.3.0/info --with-gxx-include-dir=/usr/lib/gcc/ia64-unknown-linux-gnu/11.3.0/include/g++-v11 --with-python-dir=/share/gcc-data/ia64-unknown-linux-gnu/11.3.0/python --enable-languages=c,c++,go --enable-obsolete --enable-secureplt --disable-werror --with-system-zlib --enable-nls --without-included-gettext --disable-libunwind-exceptions --enable-checking=release --with-bugurl=https://bugs.gentoo.org/ --with-pkgversion='Gentoo 11.3.0 p4' --disable-esp --enable-libstdcxx-time --disable-libstdcxx-pch --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --disable-multilib --disable-fixed-point --enable-libgomp --disable-libssp --disable-libada --disable-cet --disable-systemtap --disable-valgrind-annotations --disable-vtable-verify --disable-libvtv --without-zstd --enable-lto --with-isl --disable-isl-version-check --disable-libsanitizer --enable-default-pie --enable-default-ssp Thread model: posix Supported LTO compression algorithms: zlib gcc version 11.3.0 (Gentoo 11.3.0 p4) Backtrace during crash: test02_basicPost32 (tests.test_queue.SimpleQueueTestCase) ... Program received signal SIGILL, Illegal instruction. 0x200000000161ab01 in DB_consume_wait () from /var/tmp/portage/dev-python/berkeleydb-18.1.5/work/berkeleydb-18.1.5-python3_10/build/lib/berkeleydb/_berkeleydb.cpython-310-ia64-linux-gnu.so (gdb) bt #0 0x200000000161ab01 in DB_consume_wait () from /var/tmp/portage/dev-python/berkeleydb-18.1.5/work/berkeleydb-18.1.5-python3_10/build/lib/berkeleydb/_berkeleydb.cpython-310-ia64-linux-gnu.so #1 0x20000000001f9800 in method_vectorcall_VARARGS_KEYWORDS (func=<method_descriptor at remote 0x200000000143aed0>, args=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at ./Include/internal/pycore_ceval.h:100 #2 0x20000000001e11a0 in _PyObject_VectorcallTstate (kwnames=<optimized out>, nargsf=<optimized out>, args=<optimized out>, callable=<optimized out>, tstate=<optimized out>) at ./Include/cpython/abstract.h:114 #3 PyObject_Vectorcall (kwnames=<optimized out>, nargsf=<optimized out>, args=<optimized out>, callable=<optimized out>) at ./Include/cpython/abstract.h:123 #4 call_function (tstate=<optimized out>, trace_info=<optimized out>, pp_stack=0x60000fffffff7f98, oparg=<optimized out>, kwnames=0x0) at Python/ceval.c:5867 #5 0x20000000001c7670 in _PyEval_EvalFrameDefault (tstate=0x2000000800032250, f=Frame 0x20000000013f1590, for file /var/tmp/portage/dev-python/berkeleydb-18.1.5/work/berkeleydb-18.1.5-python3_10/tests/test_queue.py, line 142, in test02_basicPost32 (self=<SimpleQueueTestCase(_testMethodName='test02_basicPost32', _outcome=<_Outcome(expecting_failure=False, result=<ImmediateTestResult(failfast=False, failures=[], errors=[], testsRun=1, skipped=[], expectedFailures=[], unexpectedSuccesses=[], shouldStop=False, buffer=False, tb_locals=False, _stdout_buffer=None, _stderr_buffer=None, _original_stdout=<_io.TextIOWrapper at remote 0x2000000000fb1080>, _original_stderr=<_io.TextIOWrapper at remote 0x2000000000fb1150>, _mirrorOutput=False, stream=<_WritelnDecorator(stream=<_io.TextIOWrapper at remote 0x2000000000fb1150>) at remote 0x20000000013979d0>, showAll=True, dots=False, descriptions=True, _debug=False, _progress=False, _progressWithNames=False, _count=1, _testRunEntered=True, _moduleSetUpFailed=False, _previousTestClass=<type at remote 0x20000008003347e0>, _time=<float at remote 0x200000000...(truncated), throwflag=<optimized out>) at Python/ceval.c:4202 #6 0x0000000000000000 in ?? () Bad codegen: 000000000002ab00 <DB_consume_wait>: 2ab00: 09 00 00 00 01 00 [MMI] nop.m 0x0 2ab06: 30 2a 00 00 48 00 mov r35=5 2ab0c: 00 00 04 00 nop.i 0x0;; 2ab10: 11 10 10 00 80 05 [MIB] alloc r2=ar.pfs,4,0,0 2ab16: 00 00 00 02 00 00 nop.i 0x0 2ab1c: 38 f7 ff 48 br.many 2a240 <_DB_consume>;; 2ab20: 0d 00 00 00 01 00 [MFI] nop.m 0x0 2ab26: 00 00 00 00 00 00 break.f 0x0 2ab2c: 00 00 04 00 nop.i 0x0;; 2ab30: 08 00 00 00 01 00 [MMI] nop.m 0x0 2ab36: 00 00 00 02 00 00 nop.m 0x0 2ab3c: 00 00 04 00 nop.i 0x0 Good codegen: 000000000002ad00 <DB_consume_wait>: 2ad00: 08 20 29 0c 80 05 [MMI] alloc r36=ar.pfs,10,6,0 2ad06: 50 02 04 00 42 60 mov r37=r1 2ad0c: 04 00 c4 00 mov r35=b0 2ad10: 09 30 01 40 00 21 [MMI] mov r38=r32 2ad16: 70 02 84 00 42 00 mov r39=r33 2ad1c: 05 10 01 84 mov r40=r34;; 2ad20: 11 48 15 00 00 24 [MIB] mov r41=5 2ad26: 00 00 00 02 00 00 nop.i 0x0 2ad2c: 28 f7 ff 58 br.call.sptk.many b0=2a440 <_DB_consume>;; 2ad30: 09 08 00 4a 00 21 [MMI] mov r1=r37 2ad36: 00 00 00 02 00 00 nop.m 0x0 2ad3c: 30 0a 00 07 mov b0=r35;; 2ad40: 11 00 00 00 01 00 [MIB] nop.m 0x0 2ad46: 00 20 01 55 00 80 mov.i ar.pfs=r36 2ad4c: 08 00 84 00 br.ret.sptk.many b0;; 2ad50: 08 00 00 00 01 00 [MMI] nop.m 0x0 2ad56: 00 00 00 02 00 00 nop.m 0x0 2ad5c: 00 00 04 00 nop.i 0x0 2ad60: 08 00 00 00 01 00 [MMI] nop.m 0x0 2ad66: 00 00 00 02 00 00 nop.m 0x0 2ad6c: 00 00 04 00 nop.i 0x0 2ad70: 08 00 00 00 01 00 [MMI] nop.m 0x0 2ad76: 00 00 00 02 00 00 nop.m 0x0 2ad7c: 00 00 04 00 nop.i 0x0