[llvm] Make STLExtras's (all|any|none)_of() Utility Functions Constexpr-Friendly (PR #172536)

Michał Górny via llvm-commits llvm-commits at lists.llvm.org
Sat Dec 20 09:21:01 PST 2025


mgorny wrote:

This change is causing crashes in Clang for me, e.g. :

```
FAIL: Clang :: AST/ast-dump-expr.cpp (418 of 23564)
******************** TEST 'Clang :: AST/ast-dump-expr.cpp' FAILED ********************
Exit Code: 2

Command Output (stdout):
--
# RUN: at line 2
/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang -cc1 -internal-isystem /var/tmp/portage/llvm-core/clang-22
.0.0.9999/work/x/y/clang-.arm64/bin/../../../../lib/clang/22/include -nostdsysteminc -triple x86_64-unknown-unknown -Wno-unused-value -
fcxx-exceptions -std=gnu++17 -ast-dump /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp  | /usr/lib/l
lvm/22/bin/FileCheck --strict-whitespace /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp
# executed command: /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang -cc1 -internal-isystem /var/tmp/portag
e/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/../../../../lib/clang/22/include -nostdsysteminc -triple x86_64-unknown-unknown
 -Wno-unused-value -fcxx-exceptions -std=gnu++17 -ast-dump /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-ex
pr.cpp
# .---command stderr------------
# | clang: /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/lib/Parse/ParseExprCXX.cpp:1044: clang::Parser::ParseLambdaIntroduce
r(clang::LambdaIntroducer&, LambdaIntroducerTentativeParse*)::<lambda()>: Assertion `DiagLoc.isValid() && "no location for diagnostic"'
 failed.
# | PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, an
d associated run script.
# | Stack dump:
# | 0.  Program arguments: /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang -cc1 -internal-isystem /var/tmp
/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/../../../../lib/clang/22/include -nostdsysteminc -triple x86_64-unknown-
unknown -Wno-unused-value -fcxx-exceptions -std=gnu++17 -ast-dump /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-
dump-expr.cpp
# | 1.  /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp:322:8: current parser token ']'
# | 2.  /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp:246:34: parsing function body 'PrimaryExpres
sions'
# | 3.  /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp:246:34: in compound statement ('{}')
# |  #0 0x0000ffffa12bf228 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm/22/lib64/libLLVM.so.22.0git21fd8cc2+0xa2f
228)
# |  #1 0x0000ffffa12bc0a0 llvm::sys::RunSignalHandlers() (/usr/lib/llvm/22/lib64/libLLVM.so.22.0git21fd8cc2+0xa2c0a0)
# |  #2 0x0000ffffa12bc274 (/usr/lib/llvm/22/lib64/libLLVM.so.22.0git21fd8cc2+0xa2c274)
# |  #3 0x0000ffffafc28820 (linux-vdso.so.1+0x820)
# |  #4 0x0000ffffa0497994 (/usr/lib64/libc.so.6+0x87994)
# |  #5 0x0000ffffa0446b58 raise (/usr/lib64/libc.so.6+0x36b58)
# |  #6 0x0000ffffa04318b8 abort (/usr/lib64/libc.so.6+0x218b8)
# |  #7 0x0000ffffa043fe3c (/usr/lib64/libc.so.6+0x2fe3c)
# |  #8 0x0000ffffabc4f0ac clang::Parser::ParseLambdaIntroducer(clang::LambdaIntroducer&, clang::Parser::LambdaIntroducerTentativeParse
*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x97f0ac)
# |  #9 0x0000ffffabc573f0 clang::Parser::ParseLambdaExpression() (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/l
ib64/libclang-cpp.so.22.0git21fd8cc2+0x9873f0)
# | #10 0x0000ffffabc3dac0 clang::Parser::ParseCastExpression(clang::CastParseKind, bool, bool&, clang::TypoCorrectionTypeBehavior, boo
l, bool*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x96dac0)
# | #11 0x0000ffffabc3e75c clang::Parser::ParseCastExpression(clang::CastParseKind, bool, clang::TypoCorrectionTypeBehavior, bool, bool
*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x96e75c)
# | #12 0x0000ffffabc3e944 clang::Parser::ParseAssignmentExpression(clang::TypoCorrectionTypeBehavior) (/var/tmp/portage/llvm-core/clan
g-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x96e944)
# | #13 0x0000ffffabc414b4 clang::Parser::ParseExpression(clang::TypoCorrectionTypeBehavior) (/var/tmp/portage/llvm-core/clang-22.0.0.9
999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x9714b4)
# | #14 0x0000ffffabcc8ad8 clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) (/var/tmp/portage/llvm-core/clang-22.0.0
.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x9f8ad8)
# | #15 0x0000ffffabcc224c clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Pars
er::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::LabelDecl*) (/var/tmp/portage
/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x9f224c)
# | #16 0x0000ffffabcc29f4 clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 24u>&, clang::Parser::ParsedStmtC
ontext, clang::SourceLocation*, clang::LabelDecl*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-c
pp.so.22.0git21fd8cc2+0x9f29f4)
# | #17 0x0000ffffabcc3b0c clang::Parser::ParseCompoundStatementBody(bool) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang
-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x9f3b0c)
# | #18 0x0000ffffabcc4384 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) (/var/tmp/portage/llvm-c
ore/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x9f4384)
# | #19 0x0000ffffabcf0b20 clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, 
clang::Parser::LateParsedAttrList*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21
fd8cc2+0xa20b20)
# | #20 0x0000ffffabc0f3ac clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, c
lang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/
work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x93f3ac)
# | #21 0x0000ffffabcd34e8 clang::Parser::ParseDeclarationAfterTemplate(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo&, c
lang::ParsingDeclRAIIObject&, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) (/var/tmp/portage/llvm-core/cla
ng-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0xa034e8)
# | #22 0x0000ffffabcde334 clang::Parser::ParseTemplateDeclarationOrSpecialization(clang::DeclaratorContext, clang::SourceLocation&, cl
ang::ParsedAttributes&, clang::AccessSpecifier) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.
so.22.0git21fd8cc2+0xa0e334)
# | #23 0x0000ffffabcde728 clang::Parser::ParseDeclarationStartingWithTemplate(clang::DeclaratorContext, clang::SourceLocation&, clang:
:ParsedAttributes&) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0xa0e728)
# | #24 0x0000ffffabc11e04 clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cp
p.so.22.0git21fd8cc2+0x941e04)
# | #25 0x0000ffffabcf3310 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDe
clSpec*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0xa23310)
# | #26 0x0000ffffabcf40d4 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/
var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0xa240d4)
# | #27 0x0000ffffabbe2600 clang::ParseAST(clang::Sema&, bool, bool) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm6
4/lib64/libclang-cpp.so.22.0git21fd8cc2+0x912600)
# | #28 0x0000ffffadf6527c clang::FrontendAction::Execute() (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/lib64/l
ibclang-cpp.so.22.0git21fd8cc2+0x2c9527c)
# | #29 0x0000ffffadefd8a8 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/var/tmp/portage/llvm-core/clang-22.0.0.9999
/work/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x2c2d8a8)
# | #30 0x0000ffffadfff858 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/wor
k/x/y/clang-.arm64/lib64/libclang-cpp.so.22.0git21fd8cc2+0x2d2f858)
# | #31 0x0000aaaae119709c cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang+0x1709c)
# | #32 0x0000aaaae118fa68 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr<llvm:
:vfs::FileSystem>) driver.cpp:0:0
# | #33 0x0000aaaae1190a34 clang_main(int, char**, llvm::ToolContext const&) (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/cla
ng-.arm64/bin/clang+0x10a34)
# | #34 0x0000aaaae118da5c main (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang+0xda5c)
# | #35 0x0000ffffa0432054 (/usr/lib64/libc.so.6+0x22054)
# | #36 0x0000ffffa0432138 __libc_start_main (/usr/lib64/libc.so.6+0x22138)
# | #37 0x0000aaaae118db70 _start (/var/tmp/portage/llvm-core/clang-22.0.0.9999/work/x/y/clang-.arm64/bin/clang+0xdb70)
# `-----------------------------
# error: command failed with exit status: -6
# executed command: /usr/lib/llvm/22/bin/FileCheck --strict-whitespace /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang/test/AST/ast-dump-expr.cpp
# .---command stderr------------
# | FileCheck error: '<stdin>' is empty.
# | FileCheck command line:  /usr/lib/llvm/22/bin/FileCheck --strict-whitespace /var/tmp/portage/llvm-core/clang-22.0.0.9999/work/clang
/test/AST/ast-dump-expr.cpp
# `-----------------------------
# error: command failed with exit status: 2

--

********************
```

The following clang tests are failing (as of 21fd8cc2a5584795107f384c5bf8d36c141188fc, and with newer commits):

```
Failed Tests (31):
  Clang :: AST/ast-dump-expr-json.cpp
  Clang :: AST/ast-dump-expr.cpp
  Clang :: AST/ast-dump-lambda.cpp
  Clang :: AST/ast-printer-lambda.cpp
  Clang :: CXX/expr/expr.prim/expr.prim.lambda/expr.prim.lambda.capture/p17.cpp
  Clang :: CXX/expr/expr.prim/expr.prim.lambda/p23.cpp
  Clang :: CXX/temp/temp.decls/temp.variadic/init-capture.cpp
  Clang :: CXX/temp/temp.decls/temp.variadic/p4.cpp
  Clang :: DebugInfo/CXX/lambda-capture-packs.cpp
  Clang :: FixIt/fixit-c++2a.cpp
  Clang :: Parser/lambda-misplaced-capture-default.cpp
  Clang :: Parser/objcxx11-attributes.mm
  Clang :: SemaCXX/cxx1y-generic-lambdas-variadics.cpp
  Clang :: SemaCXX/cxx1y-generic-lambdas.cpp
  Clang :: SemaCXX/cxx1y-init-captures.cpp
  Clang :: SemaCXX/cxx2c-binding-pack.cpp
  Clang :: SemaCXX/fold_lambda_with_variadics.cpp
  Clang :: SemaCXX/lambda-capture-type-deduction.cpp
  Clang :: SemaCXX/lambda-expressions.cpp
  Clang :: SemaCXX/lambda-pack-expansion.cpp
  Clang :: SemaCXX/warn-unused-parameters.cpp
  Clang :: SemaTemplate/concepts-lambda.cpp
  Clang :: SemaTemplate/dedup-types-builtin.cpp
  Clang :: SemaTemplate/generic-lambda.cpp
  Clang :: SemaTemplate/sizeof-pack.cpp
  Clang-Unit :: ./AllClangUnitTests/26/98
  Clang-Unit :: ./AllClangUnitTests/27/98
  Clang-Unit :: ./AllClangUnitTests/28/98
  Clang-Unit :: ./AllClangUnitTests/29/98
  Clang-Unit :: ./AllClangUnitTests/30/98
  Clang-Unit :: ./AllClangUnitTests/31/98
```

There are also clangd tests failing, if the build happens to run them prior to clang tests.

https://github.com/llvm/llvm-project/pull/172536


More information about the llvm-commits mailing list