According to the logs I receive from pkg-fallout, the build ends with ===> Compilation failed unexpectedly. That makes me think it is an issue with the compiler, not the code.
(In reply to Stephen Montgomery-Smith from comment #1) Hi Stephen, Yes, this is a compiler crash. I first accidentally created this issue as a port issue and this pinged you. Sorry about this. Yuri
Created attachment 235945 [details] Test case generated by LLVM
Seems like one of buzilla 265755 vs. buzilla 265758 should be classified as a duplicate of the other, given the same assertion failure.
Is this still a problem? I have default llvm set to 16 for my ports build and this port compiles. See also LLVM commit fde5924dcc69fe814085482df259b8cfee236f2c in trunk (17).
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=1cd9788408aa9ea4fd0fbc3e06bd9a4eaf8d8d22 commit 1cd9788408aa9ea4fd0fbc3e06bd9a4eaf8d8d22 Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2023-07-13 18:57:22 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2023-07-13 18:57:22 +0000 Merge commit fde5924dcc69 from llvm-project (by Serge Pavlov): [clang] Reset FP options before template instantiation AST nodes that may depend on FP options keep them as a difference relative to the options outside the AST node. At the moment of instantiation the FP options may be different from the default values, defined by command-line option. In such case FP attributes would have unexpected values. For example, the code: template <class C> void func_01(int last, C) { func_01(last, int()); } void func_02() { func_01(0, 1); } #pragma STDC FENV_ACCESS ON caused compiler crash, because template instantiation takes place at the end of translation unit, where pragma STDC FENV_ACCESS is in effect. As a result, code in the template instantiation would use constrained intrinsics while the function does not have StrictFP attribute. To solve this problem, FP attributes in Sema must be set to default values, defined by command line options. This change resolves https://github.com/llvm/llvm-project/issues/63542. Differential Revision: https://reviews.llvm.org/D154359 Requested by: pkubaj PR: 265755, 265758 MFC after: 1 month contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 4 ++++ 1 file changed, 4 insertions(+)
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=95955fb872c6a51ff18804b93a2065185955c2a0 commit 95955fb872c6a51ff18804b93a2065185955c2a0 Author: Dimitry Andric <dim@FreeBSD.org> AuthorDate: 2023-07-13 18:57:22 +0000 Commit: Dimitry Andric <dim@FreeBSD.org> CommitDate: 2023-07-23 17:38:12 +0000 Merge commit fde5924dcc69 from llvm-project (by Serge Pavlov): [clang] Reset FP options before template instantiation AST nodes that may depend on FP options keep them as a difference relative to the options outside the AST node. At the moment of instantiation the FP options may be different from the default values, defined by command-line option. In such case FP attributes would have unexpected values. For example, the code: template <class C> void func_01(int last, C) { func_01(last, int()); } void func_02() { func_01(0, 1); } #pragma STDC FENV_ACCESS ON caused compiler crash, because template instantiation takes place at the end of translation unit, where pragma STDC FENV_ACCESS is in effect. As a result, code in the template instantiation would use constrained intrinsics while the function does not have StrictFP attribute. To solve this problem, FP attributes in Sema must be set to default values, defined by command line options. This change resolves https://github.com/llvm/llvm-project/issues/63542. Differential Revision: https://reviews.llvm.org/D154359 Requested by: pkubaj PR: 265755, 265758 MFC after: 1 month (cherry picked from commit 1cd9788408aa9ea4fd0fbc3e06bd9a4eaf8d8d22) contrib/llvm-project/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp | 4 ++++ 1 file changed, 4 insertions(+)