llvm / llvm/llvm-project

Compiler crash building mariadb 12.3.2 on FreeBSD 16-CURRENT

Open
#212,211 5 comments 0 reactions 0 assignees View on GitHub
clang:frontend crash-on-valid regression:20
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

Building with:

```
$ cc --version
FreeBSD clang version 21.1.8 (https://github.com/llvm/llvm-project.git llvmorg-21.1.8-0-g2078da43e25a)
Target: x86_64-unknown-freebsd16.0
Thread model: posix
InstalledDir: /usr/bin
Build config: +assertions
```

as shipped on FreeBSD 16-CURRENT, we get building port databases/mariadb123-server:

```
===> Building for mariadb123-server-12.3.2_1
[ 0% 1/788] /usr/bin/c++ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/wsrep-API/v26 -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include/providers -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/tpool -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fstack-protector --param=ssp-buffer-size=4 -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -DNDEBUG -D_FORTIFY_SOURCE=2 -DDBUG_OFF -std=gnu++17 -DHAVE_OPENSSL -DOPENSSL_API_COMPAT=0x10100000L -MD -MT sql/CMakeFiles/sql.dir/mdl.cc.o -MF sql/CMakeFiles/sql.dir/mdl.cc.o.d -o sql/CMakeFiles/sql.dir/mdl.cc.o -c /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc
FAILED: [code=1] sql/CMakeFiles/sql.dir/mdl.cc.o
/usr/bin/c++ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/wsrep-API/v26 -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include/providers -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/tpool -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fstack-protector --param=ssp-buffer-size=4 -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -DNDEBUG -D_FORTIFY_SOURCE=2 -DDBUG_OFF -std=gnu++17 -DHAVE_OPENSSL -DOPENSSL_API_COMPAT=0x10100000L -MD -MT sql/CMakeFiles/sql.dir/mdl.cc.o -MF sql/CMakeFiles/sql.dir/mdl.cc.o.d -o sql/CMakeFiles/sql.dir/mdl.cc.o -c /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc
Assertion failed: (E->isGLValue() || E->getType()->isFunctionType() || E->getType()->isVoidType() || isa(E->IgnoreParens())), function EvaluateLValue, file /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp, line 8955.
PLEASE submit a bug report to https://bugs.freebsd.org/submit/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /usr/bin/c++ -DHAVE_CONFIG_H -DHAVE_EVENT_SCHEDULER -DHAVE_POOL_OF_THREADS -DMYSQL_SERVER -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/wsrep-lib/wsrep-API/v26 -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/include/providers -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql -I/wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/tpool -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -fstack-protector --param=ssp-buffer-size=4 -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized-explicit-init -Werror=uninitialized-const-reference -Werror=uninitialized -O2 -pipe -fstack-protector-strong -isystem /usr/local/include -fno-strict-aliasing -isystem /usr/local/include -DNDEBUG -D_FORTIFY_SOURCE=2 -DDBUG_OFF -std=gnu++17 -DHAVE_OPENSSL -DOPENSSL_API_COMPAT=0x10100000L -MD -MT sql/CMakeFiles/sql.dir/mdl.cc.o -MF sql/CMakeFiles/sql.dir/mdl.cc.o.d -o sql/CMakeFiles/sql.dir/mdl.cc.o -c /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc
1. /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc:854:7: current parser token 'if'
2. /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc:388:1: parsing struct/union/class body 'MDL_lock'
3. /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc:851:5: parsing function body 'MDL_lock::Fast_road::enable'
4. /wrkdirs/usr/ports/databases/mariadb123-server/work/mariadb-12.3.2/sql/mdl.cc:851:5: in compound statement ('{}')
#0 0x00000fb01d988f46 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/lib/Support/Unix/Signals.inc:0:13
#1 0x00000fb01d986983 llvm::sys::RunSignalHandlers() /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/lib/Support/Signals.cpp:105:18
#2 0x00000fb01d92a9e2 HandleCrash /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:73:5
#3 0x00000fb01d92a9e2 CrashRecoverySignalHandler /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:390:51
#4 0x00000fb0132959bc handle_signal /usr/home/fuz/freebsd-md/src/lib/libthr/thread/thr_sig.c:0:3
#5 0x00000fb013294fdb thr_sighandler /usr/home/fuz/freebsd-md/src/lib/libthr/thread/thr_sig.c:262:1
#6 0x00000fb01129c2d3 ([vdso]+0x2d3)
#7 0x00000fb02418eeea _thr_kill /usr/obj/usr/home/fuz/freebsd-md/src/amd64.amd64/lib/libsys/thr_kill.S:4:0
#8 0x00000fb02259d044 __raise /usr/home/fuz/freebsd-md/src/lib/libc/gen/raise.c:0:10
#9 0x00000fb02264f7a9 abort /usr/home/fuz/freebsd-md/src/lib/libc/stdlib/abort.c:67:17
#10 0x00000fb02257fa01 (/lib/libc.so.7+0xaba01)
#11 0x00000fb0157dbbd0 CheckLValueConstantExpression /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:2343:0
#12 0x00000fb0157fbfab VisitCXXNewExpr /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:10338:10
#13 0x00000fb0157fea36 getFalseExpr /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/include/clang/AST/Expr.h:4351:50
#14 0x00000fb0157fea36 HandleConditionalOperator /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:8038:33
#15 0x00000fb0157fea36 VisitConditionalOperator /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:8212:10
#16 0x00000fb0157f6f75 EvaluatePointer /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:0:60
#17 0x00000fb0157e13b0 Evaluate /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:16645:9
#18 0x00000fb0157e589e VisitBinAssign /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:9361:8
#19 0x00000fb0157dbb37 EvaluateLValue /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:0:59
#20 0x00000fb0157e127f Evaluate /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:16634:9
#21 0x00000fb0157dedf7 EvaluateAsRValue /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:16763:7
#22 0x00000fb0157df09a clang::Expr::EvaluateForOverflow(clang::ASTContext const&) const /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/AST/ExprConstant.cpp:17219:3
#23 0x00000fb016bd8753 empty /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/ADT/SmallVector.h:82:46
#24 0x00000fb016bd8753 clang::Sema::CheckForIntOverflow(clang::Expr const*) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Sema/SemaChecking.cpp:13202:19
#25 0x00000fb016bd8fdb clang::Sema::CheckCompletedExpr(clang::Expr*, clang::SourceLocation, bool) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Sema/SemaChecking.cpp:14094:3
#26 0x00000fb016ed845f clang::Sema::ActOnFinishFullExpr(clang::Expr*, clang::SourceLocation, bool, bool, bool) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Sema/SemaExprCXX.cpp:7734:7
#27 0x00000fb01714ef1f clang::Sema::ActOnExprStmt(clang::ActionResult, bool) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Sema/SemaStmt.cpp:52:8
#28 0x00000fb016a7dad8 clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseStmt.cpp:269:5
#29 0x00000fb016a7d2cf clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseStmt.cpp:75:20
#30 0x00000fb016a876c3 clang::Parser::ParseCompoundStatementBody(bool) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseStmt.cpp:0:11
#31 0x00000fb016a882e5 clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseStmt.cpp:2393:21
#32 0x00000fb0169bc2e9 clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:0:3
#33 0x00000fb0169bafaa clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:570:33
#34 0x00000fb0169bafaa clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseCXXInlineMethods.cpp:570:33
#35 0x00000fb0169f6c6d clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, clang::SourceLocation, clang::ParsedAttributes&, unsigned int, clang::Decl*) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:3797:21
#36 0x00000fb0169f45e8 clang::Parser::ParseClassSpecifier(clang::tok::TokenKind, clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext, clang::ParsedAttributes&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:0:7
#37 0x00000fb0169d0ed7 empty /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/ADT/SmallVector.h:82:46
#38 0x00000fb0169d0ed7 empty /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/include/clang/Sema/ParsedAttr.h:822:40
#39 0x00000fb0169d0ed7 clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseDecl.cpp:4461:23
#40 0x00000fb016aa137f clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/Parser.cpp:1096:10
#41 0x00000fb016aa0f95 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/Parser.cpp:1209:12
#42 0x00000fb016a9fefa clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/Parser.cpp:0:14
#43 0x00000fb016a9e695 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr&, clang::Sema::ModuleImportState&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/Parser.cpp:745:10
#44 0x00000fb0169b783e clang::ParseAST(clang::Sema&, bool, bool) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Parse/ParseAST.cpp:169:5
#45 0x00000fb016822c38 clang::FrontendAction::Execute() /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1225:10
#46 0x00000fb0167a36bd getPtr /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:278:42
#47 0x00000fb0167a36bd operator bool /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:241:16
#48 0x00000fb0167a36bd clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1055:23
#49 0x00000fb0168c3095 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:299:25
#50 0x00000fa7f0766304 cc1_main /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/tools/driver/cc1_main.cpp:297:15
#51 0x00000fa7f0774185 ExecuteCC1Tool /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/tools/driver/driver.cpp:225:12
#52 0x00000fb01646473e operator() /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Job.cpp:436:30
#53 0x00000fb01646473e callback_fn<(lambda at /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Job.cpp:436:22)> /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:12
#54 0x00000fb01d92a63c operator() /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:0:12
#55 0x00000fb01d92a63c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/lib/Support/CrashRecoveryContext.cpp:426:3
#56 0x00000fb016463cba clang::driver::CC1Command::Execute(llvm::ArrayRef>, std::__1::basic_string, std::__1::allocator>*, bool*) const /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Job.cpp:436:7
#57 0x00000fb0164235f4 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Compilation.cpp:196:15
#58 0x00000fb01642387c clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl>&, bool) const /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Compilation.cpp:251:13
#59 0x00000fb016442f36 empty /usr/home/fuz/freebsd-md/src/contrib/llvm-project/llvm/include/llvm/ADT/SmallVector.h:82:46
#60 0x00000fb016442f36 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl>&) /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/lib/Driver/Driver.cpp:2246:23
#61 0x00000fa7f077384c clang_main /usr/home/fuz/freebsd-md/src/contrib/llvm-project/clang/tools/driver/driver.cpp:406:21
#62 0x00000fa7f0771f02 main /usr/home/fuz/freebsd-md/src/usr.bin/clang/clang/clang-driver.cpp:17:10
#63 0x00000fb02257183f __libc_start1 /usr/home/fuz/freebsd-md/src/lib/libc/csu/libc_start1.c:180:2
c++: error: clang frontend command failed with exit code 134 (use -v to see invocation)
FreeBSD clang version 21.1.8 (https://github.com/llvm/llvm-project.git llvmorg-21.1.8-0-g2078da43e25a)
Target: x86_64-unknown-freebsd16.0
Thread model: posix
InstalledDir: /usr/bin
Build config: +assertions
c++: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
c++: note: diagnostic msg: /tmp/mdl-613c97.cpp
c++: note: diagnostic msg: /tmp/mdl-613c97.sh
c++: note: diagnostic msg:

********************
ninja: build stopped: subcommand failed.
*** Error code 1

Stop.
make: stopped making "all" in /usr/ports/databases/mariadb123-server
```

Please find attached the reproducer.

[mdl-613c97.cpp](https://github.com/user-attachments/files/30407582/mdl-613c97.cpp)
[mdl-613c97.sh](https://github.com/user-attachments/files/30407581/mdl-613c97.sh)

Contributor guide

Open the contributing guide

Research direction

Reproduce the crash while compiling MariaDB 12.3.2, starting with sql/mdl.cc around lines 851-854 and the reported clang stack in ExprConstant.cpp's EvaluateLValue path. Compare the failing FreeBSD clang behavior with a working compiler or reduced input; done means the reported source no longer triggers the assertion during compilation.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, mariadb
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.