# LuaLaTeX 64 bit does not finish compilation

Setup: Windows 11, all updates, texlive 2021, all updates, win64 from CTAN.

The files that were previously compiling flawlessly with LuaLaTeX stopped compiling now (I cannot check when exactly, as I haven't been using LuaLaTeX for a while). As I cannot change LuaLaTeX to any other engine (I have things like ), I started experimenting and found out that even the document of the form below:

\documentclass{article}

\begin{document}
aa
\end{document}


causes LuaLaTeX to freeze, probably in some cycle, and never reach completion. Here is how the log looks like when I terminate it:

This is LuaHBTeX, Version 1.13.2 (TeX Live 2021/W32TeX)  (format=lualatex 2022.1.28)  5 FEB 2022 14:03
restricted system commands enabled.
**2022-02-test.tex
(./2022-02-test.tex
LaTeX2e <2021-11-15> patch level 1
Lua module: luaotfload 2021-05-21 3.18 Lua based OpenType font support
Lua module: lualibs 2021-05-20 2.74 ConTeXt Lua standard libraries.
Lua module: lualibs-extended 2021-05-20 2.74 ConTeXt Lua libraries -- extended c
ollection.
luaotfload | conf : Root cache directory is "C:/texlive/2021/texmf-var/luatex-ca
che/generic/names".
20.lua".
Inserting luaotfload.node_processor' at position 1 in pre_linebreak_filter'.
Inserting luaotfload.node_processor' at position 1 in hpack_filter'.
Inserting luaotfload.glyph_stream' at position 1 in glyph_stream_provider'.
Inserting luaotfload.define_font' at position 1 in define_font'.
luaotfload | conf : Root cache directory is "C:/texlive/2021/texmf-var/luatex-ca
che/generic/names".
Inserting luaotfload.harf.strip_prefix' at position 1 in find_opentype_file'.
Inserting luaotfload.harf.strip_prefix' at position 1 in find_truetype_file'.
Inserting luaotfload.harf.finalize_vlist' at position 1 in post_linebreak_filt
er'.
Inserting luaotfload.harf.finalize_hlist' at position 2 in hpack_filter'.
Inserting luaotfload.cleanup_files' at position 1 in wrapup_run'.
Inserting luaotfload.harf.finalize_unicode' at position 1 in finish_pdffile'.
Inserting luaotfload.glyphinfo' at position 1 in glyph_info'.
Inserting luaotfload.aux.set_sscale_dimens' at position 1 in luaotfload.patch_
font'.
Inserting luaotfload.aux.set_font_index' at position 2 in luaotfload.patch_fon
t'.
Inserting luaotfload.aux.patch_cambria_domh' at position 3 in luaotfload.patch
_font'.
Inserting luaotfload.aux.fixup_fontdata' at position 1 in luaotfload.patch_fon
t_unsafe'.
Inserting luaotfload.aux.set_capheight' at position 4 in luaotfload.patch_font
'.
Inserting luaotfload.aux.set_xheight' at position 5 in luaotfload.patch_font'.
Inserting luaotfload.rewrite_fontname' at position 6 in luaotfload.patch_font'
. L3 programming layer <2022-01-21>c:/texlive/2021/texmf-dist/tex/latex/l3kernel
stack traceback:
[C]: in function 'lua.getbytecode'
c:/texlive/2021/texmf-dist/tex/latex/l3kernel/expl3.lua:244: in main chunk
[C]: in function 'require'
[\directlua]:1: in main chunk.
\lua_now:e #1->\__lua_now:n {#1}

l.1
\documentclass{article}
The lua interpreter ran into a problem, so the
remainder of this lua chunk will be ignored.

Inserting tracingstacklevels' at position 1 in input_level_string'.
! Missing \endcsname inserted.
\exp_stop_f:
l.2

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing \endcsname inserted.
\exp_stop_f:
l.2

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing \endcsname inserted.
\exp_stop_f:
l.2

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! Missing \endcsname inserted.
\exp_stop_f:
l.2

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
...

l.2

You're in trouble here.  Try typing  <return>  to proceed.
If that doesn't work, type  X <return>  to quit.

! Extra \endcsname.
\@ifl@ter ...@ifl@t@r \csname ver@#2.#1\endcsname

l.2

I'm ignoring this, since I wasn't doing a \csname.

! Missing \endcsname inserted.
\exp_stop_f:
l.2

The control sequence marked <to be read again> should
not appear between \csname and \endcsname.

LaTeX Warning: You have requested, on input line 2, version
' of document class 97\exp_stop_f: 11\exp_stop_f: 114\exp_stop_
f: 11\exp_stop_f: 116\exp_stop_f: 11\exp_stop_f: 105\exp_stop_f: 11\exp_stop_f:
99\exp_stop_f: 11\exp_stop_f: 108\exp_stop_f: 11\exp_stop_f: 101\exp_stop_f: 1
1\exp_stop_f: ,
but only version
\ver@97 \exp_stop_f: 11\exp_stop_f: 114\exp_stop_f: 11\exp_stop
_f: 116\exp_stop_f: 11\exp_stop_f: 105\exp_stop_f: 11\exp_stop_f: 99\exp_stop_f
: 11\exp_stop_f: 108\exp_stop_f: 11\exp_stop_f: 101\exp_stop_f: 11\exp_stop_f:
.cls\endcsname '
is available.

Overfull \hbox (20.0pt too wide) in paragraph at lines 2--2
[]1
[]

! Missing number, treated as zero.
{
l.3 \begin{document}

A number should have been here; I inserted 0'.
(If you can't figure out why I needed to see a number,
look up weird error' in the index to The TeXbook.)

! Argument of \prg_map_break:Nn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \prg_map_break:Nn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
...

l.3 \begin{document}

You're in trouble here.  Try typing  <return>  to proceed.
If that doesn't work, type  X <return>  to quit.

! Missing number, treated as zero.
{
l.3 \begin{document}

A number should have been here; I inserted 0'.
(If you can't figure out why I needed to see a number,
look up weird error' in the index to The TeXbook.)

! Argument of \prg_map_break:Nn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \prg_map_break:Nn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

Overfull \hbox (20.0pt too wide) in paragraph at lines 3--3
[]enddocument/info
[]

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
...

l.3 \begin{document}

You're in trouble here.  Try typing  <return>  to proceed.
If that doesn't work, type  X <return>  to quit.

! Missing number, treated as zero.
{
l.3 \begin{document}

A number should have been here; I inserted 0'.
(If you can't figure out why I needed to see a number,
look up weird error' in the index to The TeXbook.)

! Argument of \prg_map_break:Nn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \prg_map_break:Nn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

Overfull \hbox (20.0pt too wide) in paragraph at lines 3--3
[]enddocument/info
[]

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
...

l.3 \begin{document}

You're in trouble here.  Try typing  <return>  to proceed.
If that doesn't work, type  X <return>  to quit.

! Missing number, treated as zero.
{
l.3 \begin{document}

A number should have been here; I inserted 0'.
(If you can't figure out why I needed to see a number,
look up weird error' in the index to The TeXbook.)

! Argument of \prg_map_break:Nn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \prg_map_break:Nn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

Overfull \hbox (20.0pt too wide) in paragraph at lines 3--3
[]enddocument/info
[]

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply proceed now, the \par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your }' was spurious, just type 2' and it will go away.

Runaway argument?
! Paragraph ended before \__hook_apply_label_pair:nnn was complete.
\par
l.3 \begin{document}

I suspect you've forgotten a }', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.

! Argument of \__hook_apply_label_pair:nnn has an extra }.
<inserted text>
\par
l.3 \begin{document}

I've run across a }' that doesn't seem to match anything.
For example, \def\a#1{...}' and \a}' would produce
this error. If you simply p


The further experimentation lead me to the following results:

• PdfLaTeX works, without problems.
• XeLaTeX works, also without problems.
• lualatex.exe from the folder \texlive\2021\bin\win32 works as intended, producing the following log:
This is LuaHBTeX, Version 1.13.2 (TeX Live 2021/W32TeX)  (format=lualatex 2022.1.28)  5 FEB 2022 14:12
restricted system commands enabled.
**2022-02-test.tex
(./2022-02-test.tex
LaTeX2e <2021-11-15> patch level 1
Lua module: luaotfload 2021-05-21 3.18 Lua based OpenType font support
Lua module: lualibs 2021-05-20 2.74 ConTeXt Lua standard libraries.
Lua module: lualibs-extended 2021-05-20 2.74 ConTeXt Lua libraries -- extended c
ollection.
luaotfload | conf : Root cache directory is "C:/texlive/2021/texmf-var/luatex-ca
che/generic/names".
20.lua".
Inserting luaotfload.node_processor' at position 1 in pre_linebreak_filter'.
Inserting luaotfload.node_processor' at position 1 in hpack_filter'.
Inserting luaotfload.glyph_stream' at position 1 in glyph_stream_provider'.
Inserting luaotfload.define_font' at position 1 in define_font'.
luaotfload | conf : Root cache directory is "C:/texlive/2021/texmf-var/luatex-ca
che/generic/names".
Inserting luaotfload.harf.strip_prefix' at position 1 in find_opentype_file'.
Inserting luaotfload.harf.strip_prefix' at position 1 in find_truetype_file'.
Inserting luaotfload.harf.finalize_vlist' at position 1 in post_linebreak_filt
er'.
Inserting luaotfload.harf.finalize_hlist' at position 2 in hpack_filter'.
Inserting luaotfload.cleanup_files' at position 1 in wrapup_run'.
Inserting luaotfload.harf.finalize_unicode' at position 1 in finish_pdffile'.
Inserting luaotfload.glyphinfo' at position 1 in glyph_info'.
Inserting luaotfload.aux.set_sscale_dimens' at position 1 in luaotfload.patch_
font'.
Inserting luaotfload.aux.set_font_index' at position 2 in luaotfload.patch_fon
t'.
Inserting luaotfload.aux.patch_cambria_domh' at position 3 in luaotfload.patch
_font'.
Inserting luaotfload.aux.fixup_fontdata' at position 1 in luaotfload.patch_fon
t_unsafe'.
Inserting luaotfload.aux.set_capheight' at position 4 in luaotfload.patch_font
'.
Inserting luaotfload.aux.set_xheight' at position 5 in luaotfload.patch_font'.
Inserting luaotfload.rewrite_fontname' at position 6 in luaotfload.patch_font'
. L3 programming layer <2022-01-21>
Inserting tracingstacklevels' at position 1 in input_level_string'.
(c:/texlive/2021/texmf-dist/tex/latex/base/article.cls
Document Class: article 2021/10/04 v1.4n Standard LaTeX document class
(c:/texlive/2021/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2021/10/04 v1.4n Standard LaTeX file (size option)
\c@part=\count183
\c@section=\count184
\c@subsection=\count185
\c@subsubsection=\count186
\c@paragraph=\count187
\c@subparagraph=\count188
\c@figure=\count189
\c@table=\count190
\abovecaptionskip=\skip47
\belowcaptionskip=\skip48
\bibindent=\dimen137
)
(c:/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
File: l3backend-luatex.def 2022-01-12 L3 backend support: PDF output (LuaTeX)
\l__color_backend_stack_int=\count191
\l__pdf_internal_box=\box50
)
(./2022-02-test.aux)
\openout1 = 2022-02-test.aux

LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for TS1/cmr/m/n on input line 3.
LaTeX Font Info:    Trying to load font information for TS1+cmr on input line 3
.
(c:/texlive/2021/texmf-dist/tex/latex/base/ts1cmr.fd
File: ts1cmr.fd 2019/12/16 v2.5j Standard LaTeX font definitions
)
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for TU/lmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 3.
LaTeX Font Info:    ... okay on input line 3.

[1

{c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./2022-02-test.aux))

Here is how much of LuaTeX's memory you used:
452 strings out of 477811
100000,383344 words of node,token memory allocated
406 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 4 attribute, 48 glue_spec,
4 attribute_list, 1 write nodes
avail lists: 2:23,3:4,4:2,5:22,6:2,7:32,9:18
21219 multiletter control sequences out of 65536+600000
15 fonts using 510647 bytes
33i,5n,37p,132b,123s stack positions out of 5000i,500n,10000p,200000b,80000s
<c:/texlive/2021/texmf-dist/fonts/opentype/public/lm/lmroman10-regular.otf>
Output written on 2022-02-test.pdf (1 page, 2619 bytes).

PDF statistics: 15 PDF objects out of 1000 (max. 8388607)
8 compressed objects within 1 object stream
0 named destinations out of 1000 (max. 131072)
1 words of extra memory for PDF output out of 10000 (max. 100000000)

• lualatex.exe from the folder \texlive\2021\bin\win64, which I use by default, does not work and produces the aforementioned log.

I have manually wiped the \win64 folder and replaced it by the contents of https://ctan.org/tex-archive/systems/win32/w32tex/TLW64/ . This changed nothing: XeLaTeX works without problems, no matter win32 or win64, only LuaLaTeX works only from win32. As for the pdfLaTeX version in win64, it does not even start. Out of all this I assume some problem occured with the win64 versions of the executable files. I can continue now with using the win32 versions for a while (as I have been doing with pdfLaTeX all the time), but still hope to have a working LuaLaTeX, as I regularly handle really large files with LuaLaTeX, which the 32-bit versions do no process.

• I use MacTeX2021, with all updates applied. FWIW, your test code compiles fine on my system.
– Mico
Feb 5 at 11:24
• You must recreate the formats, you seem to have a format for a 32 bit binary, that doesn't work with 64 bit. See also github.com/latex3/latex2e/issues/775 Feb 5 at 11:27
• @Mico it's an engine level feature (that may or may not be resolvable) with lua byte compilation, you end up with a different bytecode on 32 and 64 bit systems so if you dump the bytecode in the format the formats are not portable between platforms. This only should matter for people with win32 and win64 systems using a shared file system, which is almost no one, but historically texlive fomats have always been cross platform so if things can be changed to avoid this it would be good. Feb 5 at 11:36
• @DavidCarlisle you don't need two windows, I would get the same error when switching between the 32bit and 64bit versions of the binaries (I avoid it by using a different texmf-var for the 64bit version, so I have two different formats). Feb 5 at 11:41
• @UlrikeFischer ah yes of course, yes. although running a win32 binary in win64 invokes windows-in-windows win32 emulation which is almost same thing as having win32. Feb 5 at 11:43

It occurred to me that a workaround might be to define the envvar TEXMFSYSVAR_lualatex to a local directory on the "different" machine, and run fmtutil-sys --byfmt lualatex to update it. That way all the sharable fmts can stay shared, instead of having separate copies of everything. Though admittedly having separate copies might be more convenient in some cases.