Skip to content

building 3.14.0a5 with tail-call interpreter from source fails when using clang-19 #130021

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Deric-W opened this issue Feb 11, 2025 · 4 comments
Closed
Labels
3.14 bugs and security fixes build The build process and cross-build type-bug An unexpected behavior, bug, or error

Comments

@Deric-W
Copy link
Contributor

Deric-W commented Feb 11, 2025

Bug report

Bug description:

Building the 3.14.0a5 tarball provided by python.org fails when enabling the following options:

CC=clang-19 ./configure --enable-optimizations --with-lto=yes --enable-experimental-jit --with-tail-call-interp

The result is the following compilation error:

In file included from Python/ceval.c:786:
Python/generated_cases.c.h:4934:13: error: use of undeclared label 'error'
 4934 |             GOTO_TIER_TWO(executor);
      |             ^
Python/ceval_macros.h:398:14: note: expanded from macro 'GOTO_TIER_TWO'
  398 |         goto error;                                    \
      |              ^
In file included from Python/ceval.c:786:
Python/generated_cases.c.h:6968:25: error: use of undeclared label 'error'
 6968 |                         GOTO_TIER_TWO(executor);
      |                         ^
Python/ceval_macros.h:398:14: note: expanded from macro 'GOTO_TIER_TWO'
  398 |         goto error;                                    \
      |              ^
2 errors generated.
make[2]: *** [Makefile:3116: Python/ceval.o] Fehler 1

Performing the build without the --with-tail-call-interp option results in the following error instead:
(the error was caused by me failing to configure the LLVM version properly)

/usr/bin/llvm-ar rcs libpython3.14.a Modules/getbuildinfo.o Parser/token.o  Parser/pegen.o Parser/pegen_errors.o Parser/action_helpers.o Parser/parser.o Parser/string_parser.o Parser/peg_api.o Parser/lexer/buffer.o Parser/lexer/lexer.o Parser/lexer/state.o Parser/tokenizer/file_tokenizer.o Parser/tokenizer/readline_tokenizer.o Parser/tokenizer/string_tokenizer.o Parser/tokenizer/utf8_tokenizer.o Parser/tokenizer/helpers.o Parser/myreadline.o Objects/abstract.o Objects/boolobject.o Objects/bytes_methods.o Objects/bytearrayobject.o Objects/bytesobject.o Objects/call.o Objects/capsule.o Objects/cellobject.o Objects/classobject.o Objects/codeobject.o Objects/complexobject.o Objects/descrobject.o Objects/enumobject.o Objects/exceptions.o Objects/genericaliasobject.o Objects/genobject.o Objects/fileobject.o Objects/floatobject.o Objects/frameobject.o Objects/funcobject.o Objects/iterobject.o Objects/listobject.o Objects/longobject.o Objects/dictobject.o Objects/odictobject.o Objects/memoryobject.o Objects/methodobject.o Objects/moduleobject.o Objects/namespaceobject.o Objects/object.o Objects/obmalloc.o Objects/picklebufobject.o Objects/rangeobject.o Objects/setobject.o Objects/sliceobject.o Objects/structseq.o Objects/tupleobject.o Objects/typeobject.o Objects/typevarobject.o Objects/unicodeobject.o Objects/unicodectype.o Objects/unionobject.o Objects/weakrefobject.o Python/asm_trampoline.o Python/_warnings.o Python/Python-ast.o Python/Python-tokenize.o Python/asdl.o Python/assemble.o Python/ast.o Python/ast_opt.o Python/ast_unparse.o Python/bltinmodule.o Python/brc.o Python/ceval.o Python/codecs.o Python/codegen.o Python/compile.o Python/context.o Python/critical_section.o Python/crossinterp.o Python/dynamic_annotations.o Python/errors.o Python/flowgraph.o Python/frame.o Python/frozenmain.o Python/future.o Python/gc.o Python/gc_free_threading.o Python/gc_gil.o Python/getargs.o Python/getcompiler.o Python/getcopyright.o Python/getplatform.o Python/getversion.o Python/ceval_gil.o Python/hamt.o Python/hashtable.o Python/import.o Python/importdl.o Python/index_pool.o Python/initconfig.o Python/interpconfig.o Python/instrumentation.o Python/instruction_sequence.o Python/intrinsics.o Python/jit.o Python/legacy_tracing.o Python/lock.o Python/marshal.o Python/modsupport.o Python/mysnprintf.o Python/mystrtoul.o Python/object_stack.o Python/optimizer.o Python/optimizer_analysis.o Python/optimizer_symbols.o Python/parking_lot.o Python/pathconfig.o Python/preconfig.o Python/pyarena.o Python/pyctype.o Python/pyfpe.o Python/pyhash.o Python/pylifecycle.o Python/pymath.o Python/pystate.o Python/pythonrun.o Python/pytime.o Python/qsbr.o Python/bootstrap_hash.o Python/specialize.o Python/stackrefs.o Python/structmember.o Python/symtable.o Python/sysmodule.o Python/thread.o Python/traceback.o Python/tracemalloc.o Python/uniqueid.o Python/getopt.o Python/pystrcmp.o Python/pystrtod.o Python/pystrhex.o Python/dtoa.o Python/formatter_unicode.o Python/fileutils.o Python/suggestions.o Python/perf_trampoline.o Python/perf_jit_trampoline.o Python/dynload_shlib.o     Modules/config.o Modules/main.o Modules/gcmodule.o Modules/atexitmodule.o  Modules/faulthandler.o  Modules/posixmodule.o  Modules/signalmodule.o  Modules/_tracemalloc.o  Modules/_suggestions.o  Modules/_codecsmodule.o  Modules/_collectionsmodule.o  Modules/errnomodule.o  Modules/_io/_iomodule.o Modules/_io/iobase.o Modules/_io/fileio.o Modules/_io/bytesio.o Modules/_io/bufferedio.o Modules/_io/textio.o Modules/_io/stringio.o  Modules/itertoolsmodule.o  Modules/_sre/sre.o  Modules/_sysconfig.o  Modules/_threadmodule.o  Modules/timemodule.o  Modules/_typingmodule.o  Modules/_weakref.o  Modules/_abc.o  Modules/_functoolsmodule.o  Modules/_localemodule.o  Modules/_opcode.o  Modules/_operator.o  Modules/_stat.o  Modules/symtablemodule.o  Modules/pwdmodule.o Modules/getpath.o Python/frozen.o
/usr/bin/llvm-ar: error: libpython3.14.a: Opaque pointers are only supported in -opaque-pointers mode (Producer: 'LLVM19.1.7' Reader: 'LLVM 14.0.6')

The system used is running MX Linux (based on Debian 12.9) with Clang 19 provided by the packages from LLVM and building succeeds with the following options (default compiler is gcc 12.2.0):

./configure --enable-optimizations --with-lto=yes --enable-experimental-jit

CPython versions tested on:

3.14

Operating systems tested on:

Linux

@Deric-W Deric-W added the type-bug An unexpected behavior, bug, or error label Feb 11, 2025
@picnixz picnixz added the build The build process and cross-build label Feb 11, 2025
@Deric-W
Copy link
Contributor Author

Deric-W commented Feb 11, 2025

It seems that the error produced without --with-tail-call-interp is caused by the configure script confusing multiple LLVM installs.

I am trying to get it to choose the right version of llvm-ar but I am still not sure what is causing the error when building with the tail call interpreter enabled.

@picnixz picnixz added the 3.14 bugs and security fixes label Feb 11, 2025
@Deric-W Deric-W changed the title building 3.14.0a5 from source fails when using clang-19 building 3.14.0a5 with tail-call interpreter from source fails when using clang-19 Feb 12, 2025
@Fidget-Spinner
Copy link
Member

This is expected. JIT doesn't build with tail call interpreter at the moment. I fixed this in #129820 but it needs approval before merging.

@Deric-W
Copy link
Contributor Author

Deric-W commented Feb 12, 2025

Thank you for your response, I my excitement over the new interpreter I might have missed this information.
Building without the JIT works, thanks for your work on making CPython faster :)

@Deric-W Deric-W closed this as completed Feb 12, 2025
@Fidget-Spinner
Copy link
Member

No worries! Thanks for testing out the new interpreter!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.14 bugs and security fixes build The build process and cross-build type-bug An unexpected behavior, bug, or error
Projects
None yet
Development

No branches or pull requests

3 participants