[Bug 263271] lang/gcc11: After switching to LTO bootstrap, build of editors/emacs-devel fails with segmentation fault if NATIVECOMP option enabled

From: <bugzilla-noreply_at_freebsd.org>
Date: Thu, 14 Apr 2022 05:32:44 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=263271

            Bug ID: 263271
           Summary: lang/gcc11: After switching to LTO bootstrap, build of
                    editors/emacs-devel fails with segmentation fault if
                    NATIVECOMP option enabled
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: Individual Port(s)
          Assignee: ports-bugs@FreeBSD.org
          Reporter: yasu@freebsd.org
                CC: emacs@FreeBSD.org, pkubaj@FreeBSD.org,
                    toolchain@FreeBSD.org

1. Since 28.x Emacs supports native compilation.
1.1. While byte compilation converts source code of emacs lisp to byte code
independent from HW and/or OS, native compilation converts it to native code of
the platform on which Emacs runs.
1.2. Emacs uses libgccgit of GCC to do native compilation.
1.3. Emacs provides two ways for native compilation. One is just-in-time way
that is done first time when source file (.el) is loaded. The other is explict
way that is done by invoking emacs lisp function that do native compilation.

2. Native compilation is enabled when Emacs is built
2.1. It is enabled by passing '--with-native-compilation' option to configure
script.
2.2. At the moment, it is off by default.
2.3. The way is also provided to native compile and install all emacs lisp
files included in source tree.

3. NATIVECOMP option was added to editors/emacs-devel in June 2021.
3.1. It is off by default.
3.2. If it is enabled, all .el files included in source archive are native
compiled and installed.
3.3. Currently lang/gcc11 is used to support native compilation as there is a
note as following in the document of GCC 10 and before:
"Note that libgccjit is currently of “Alpha” quality; the APIs are not yet set
in stone, and they shouldn’t be used in production yet."

4. With the latest ports tree build of editors/emacs-devel fails if NATIVECOMP
option is enabled.
4.1. It fails with segmantation fault of emacs while native compiling
'emoji.el' as following.
https://people.freebsd.org/~yasu/poudriere/data/logs/bulk/130amd64-default-emacs/2022-04-12_17h00m39s/logs/emacs-devel-nox-29.0.50.20220331_1,2.log
4.2 I faced the failure when I updated ports tree from ports 9aa49f27ffd0
(committed on April 7) to ports 7f2e164a4b3b (committed on April 12).
4.3. According to the result of `git bisect`, the build failure happens with
following commit and after.

----------------------------------------------------------------------
commit 2f6be9fb8281
Author:     Piotr Kubaj <pkubaj@FreeBSD.org>
AuthorDate: Mon Apr 11 10:46:01 2022 +0000
Commit:     Piotr Kubaj <pkubaj@FreeBSD.org>
CommitDate: Mon Apr 11 10:46:01 2022 +0000

    lang/gcc11: switch gcc11 to LTO bootstrap

    lang/gcc11-devel with LTO builds fine on the cluster, switch lang/gcc11 as
well.
----------------------------------------------------------------------

5. The cause of the build failure seems to be bug of lang/gcc11 about LTO
5.1 If I revert the commit above then build completes successfully.
5.2. I modified Makefile of editors/emacs-devel so it uses lang/gcc12-devel.
Then build completes successfully.
5.3. I also modified the Makefile so it uses lang/gcc11-devel. In this case
build fails with same error. Next, I updated lang/gcc11-devel to the 20220409
snapshot of GCC 11.2.1. Then build completes successfully.

-- 
You are receiving this mail because:
You are the assignee for the bug.