Subject: bug#62537: Error compiling emacs master with native compilation activated

From: Andrea Corallo <[email-masked]>
Date: Thu, 30 Mar 2023 09:28:10 +0000

Pedro Andres Aranda Gutierrez <[email-masked]> writes:

> HI
> there seems to be a problem when compiling the org-mode files with
> native compilation activated
>
> ```
>   ELC+ELN  org/org-plot.elc
>
> Error: native-ice ("org/org-plot.el" "block does not end with a
> branch" #s(comp-block-lap bb_8 ((comment "LAP TAG 83") (call
> helper_unbind_n #s(comp-mvar nil nil ((1 . 1)) nil nil nil)) (setimm
> #s(comp-mvar (t) nil nil nil nil 2) make-temp-file) (setimm
> #s(comp-mvar (t) nil nil nil nil 3) "org-plot") (set #s(comp-mvar (t)
> nil nil nil nil 2) (callref funcall #s(comp-mvar (t) nil nil nil nil
> 2) #s(comp-mvar (t) nil nil nil nil 3))) (call
> record_unwind_protect_excursion) (setimm #s(comp-mvar (t) nil nil nil
> nil 3) org-plot/goto-nearest-table) (set #s(comp-mvar (t) nil nil nil
> nil 3) (callref funcall #s(comp-mvar (t) nil nil nil nil 3))) (setimm
> #s(comp-mvar (t) nil nil nil nil 3) org-table-to-lisp) (set
> #s(comp-mvar (t) nil nil nil nil 3) (callref funcall #s(comp-mvar (t)
> nil nil nil nil 3))) (call helper_unbind_n #s(comp-mvar nil nil ((1 .
> 1)) nil nil nil)) (setimm #s(comp-mvar (t) nil nil nil nil 4)
> plist-get) (set #s(comp-mvar (t) nil nil nil nil 5) #s(comp-mvar (t)
> nil nil nil nil 0)) (setimm #s(comp-mvar (t) nil nil nil nil 6)
> :transpose) (set #s(comp-mvar (t) nil nil nil nil 4) (callref funcall
> #s(comp-mvar (t) nil nil nil nil 4) #s(comp-mvar (t) nil nil nil nil
> 5) #s(comp-mvar (t) nil nil nil nil 6))) (set #s(comp-mvar (t) nil nil
> nil nil 5) #s(comp-mvar (t) nil nil nil nil 4)) (setimm #s(comp-mvar
> (t) nil nil nil nil 6) #s(hash-table size 3 test eq rehash-size 1.5
> rehash-threshold 0.8125 purecopy t data (y 105 yes 105 t 105)))) nil
> nil nil nil #s(hash-table size 65 test eql rehash-size 1.5
> rehash-threshold 0.8125 data ()) nil nil 1 72 nil nil)
> org-plot/gnuplot)
>   mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode
> 0x285567f77ae87d2>))
>   debug-early-backtrace()
>   debug-early(error (native-ice "org/org-plot.el" "block does not end
> with a branch" #s(comp-block-lap :name bb_8 :insns ((comment "LAP TAG
> 83") (call helper_unbind_n #s(comp-mvar :typeset nil :valset nil
> :range ((1 . 1)) :neg nil :id nil :slot nil)) (setimm #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 2)
> make-temp-file) (setimm #s(comp-mvar :typeset (t) :valset nil :range
> nil :neg nil :id nil :slot 3) "org-plot") (set #s(comp-mvar :typeset
> (t) :valset nil :range nil :neg nil :id nil :slot 2) (callref funcall
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 2) #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 3))) (call record_unwind_protect_excursion) (setimm
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 3) org-plot/goto-nearest-table) (set #s(comp-mvar :typeset (t)
> :valset nil :range nil :neg nil :id nil :slot 3) (callref funcall
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 3))) (setimm #s(comp-mvar :typeset (t) :valset nil :range nil
> :neg nil :id nil :slot 3) org-table-to-lisp) (set #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 3) (callref
> funcall #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 3))) (call helper_unbind_n #s(comp-mvar :typeset nil :valset
> nil :range ((1 . 1)) :neg nil :id nil :slot nil)) (setimm #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 4)
> plist-get) (set #s(comp-mvar :typeset (t) :valset nil :range nil :neg
> nil :id nil :slot 5) #s(comp-mvar :typeset (t) :valset nil :range nil
> :neg nil :id nil :slot 0)) (setimm #s(comp-mvar :typeset (t) :valset
> nil :range nil :neg nil :id nil :slot 6) :transpose) (set #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 4) (callref
> funcall #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 4) #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil
> :id nil :slot 5) #s(comp-mvar :typeset (t) :valset nil :range nil :neg
> nil :id nil :slot 6))) (set #s(comp-mvar :typeset (t) :valset nil
> :range nil :neg nil :id nil :slot 5) #s(comp-mvar :typeset (t) :valset
> nil :range nil :neg nil :id nil :slot 4)) (setimm #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 6)
> #<hash-table eq 3/3 0x155ea01696a7>)) :closed nil :in-edges nil
> :out-edges nil :idom nil :df #<hash-table eql 0/65 0x155ea02c4401>
> :post-num nil :final-frame nil :sp 1 :addr 72 :non-ret-insn nil
> :no-ret nil) org-plot/gnuplot))
>   signal(native-ice ("org/org-plot.el" "block does not end with a
> branch" #s(comp-block-lap :name bb_8 :insns ((comment "LAP TAG 83")
> (call helper_unbind_n #s(comp-mvar :typeset nil :valset nil :range ((1
> . 1)) :neg nil :id nil :slot nil)) (setimm #s(comp-mvar :typeset (t)
> :valset nil :range nil :neg nil :id nil :slot 2) make-temp-file)
> (setimm #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 3) "org-plot") (set #s(comp-mvar :typeset (t) :valset nil
> :range nil :neg nil :id nil :slot 2) (callref funcall #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 2)
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 3))) (call record_unwind_protect_excursion) (setimm #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 3)
> org-plot/goto-nearest-table) (set #s(comp-mvar :typeset (t) :valset
> nil :range nil :neg nil :id nil :slot 3) (callref funcall #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 3)))
> (setimm #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 3) org-table-to-lisp) (set #s(comp-mvar :typeset (t) :valset
> nil :range nil :neg nil :id nil :slot 3) (callref funcall #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 3))) (call
> helper_unbind_n #s(comp-mvar :typeset nil :valset nil :range ((1 . 1))
> :neg nil :id nil :slot nil)) (setimm #s(comp-mvar :typeset (t) :valset
> nil :range nil :neg nil :id nil :slot 4) plist-get) (set #s(comp-mvar
> :typeset (t) :valset nil :range nil :neg nil :id nil :slot 5)
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 0)) (setimm #s(comp-mvar :typeset (t) :valset nil :range nil
> :neg nil :id nil :slot 6) :transpose) (set #s(comp-mvar :typeset (t)
> :valset nil :range nil :neg nil :id nil :slot 4) (callref funcall
> #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id nil
> :slot 4) #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil :id
> nil :slot 5) #s(comp-mvar :typeset (t) :valset nil :range nil :neg nil
> :id nil :slot 6))) (set #s(comp-mvar :typeset (t) :valset nil :range
> nil :neg nil :id nil :slot 5) #s(comp-mvar :typeset (t) :valset nil
> :range nil :neg nil :id nil :slot 4)) (setimm #s(comp-mvar :typeset
> (t) :valset nil :range nil :neg nil :id nil :slot 6) #<hash-table eq
> 3/3 0x155ea01696a7>)) :closed nil :in-edges nil :out-edges nil :idom
> nil :df #<hash-table eql 0/65 0x155ea02c4401> :post-num nil
> :final-frame nil :sp 1 :addr 72 :non-ret-insn nil :no-ret nil)
> org-plot/gnuplot))
>   comp--native-compile("org/org-plot.el")
>   batch-native-compile()
>   batch-byte+native-compile()
>   command-line-1(("--eval" "(setq load-prefer-newer t
> byte-compile-warnings 'all)" "-l" "comp" "-f"
> "batch-byte+native-compile" "org/org-plot.el"))
>   command-line()
>   normal-top-level()
> Internal native compiler error: "org/org-plot.el", "block does not end
> with a branch", #s(comp-block-lap bb_8 ((comment "LAP TAG 83") (call
> helper_unbind_n #s(comp-mvar nil nil ((1 . 1)) nil nil nil)) (setimm
> #s(comp-mvar (t) nil nil nil nil 2) make-temp-file) (setimm
> #s(comp-mvar (t) nil nil nil nil 3) "org-plot") (set #s(comp-mvar (t)
> nil nil nil nil 2) (callref funcall #s(comp-mvar (t) nil nil nil nil
> 2) #s(comp-mvar (t) nil nil nil nil 3))) (call
> record_unwind_protect_excursion) (setimm #s(comp-mvar (t) nil nil nil
> nil 3) org-plot/goto-nearest-table) (set #s(comp-mvar (t) nil nil nil
> nil 3) (callref funcall #s(comp-mvar (t) nil nil nil nil 3))) (setimm
> #s(comp-mvar (t) nil nil nil nil 3) org-table-to-lisp) (set
> #s(comp-mvar (t) nil nil nil nil 3) (callref funcall #s(comp-mvar (t)
> nil nil nil nil 3))) ...) nil nil nil nil #s(hash-table size 65 test
> eql rehash-size 1.5 rehash-threshold 0.8125 data ()) nil nil ...),
> #<symbol org-plot/gnuplot at 23521>
> make[5]: *** [Makefile:327: org/org-plot.elc] Error 255

Hi Pedro,

bisecting this should be due to:
"
52b67740d10df8ca539fdc2c7d50283997683141
Author:     Mattias Engdegård <[email-masked]>
AuthorDate: Sat Mar 25 15:38:00 2023 +0100
Commit:     Mattias Engdegård <[email-masked]>
CommitDate: Sat Mar 25 16:21:09 2023 +0100

Parent:     db7e95531ac Switch buffer in Ftreesit_query_capture
Merged:     comp-no-spawn
Follows:    emacs-28.2 (164697)

Generalise a LAP optimisation rule

* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Accept (stack-set 1) as equivalent to (discardN-preserve-tos 1) in a
rule previously overlooked.  This is usually beneficial in code size
and almost always shortens dynamic paths.
"

I'll try to have a look as soon as I've some time.

Thanks

  Andrea