[clang] [clang] Implement __attribute__((format_matches)) (PR #116708)
Thurston Dang via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 24 22:00:11 PST 2025
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>,
=?utf-8?q?Félix?= Cloutier <fcloutier at apple.com>
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/116708 at github.com>
thurstond wrote:
The newly added format-string-matches.c has been failing in the sanitizer builds (https://lab.llvm.org/buildbot/#/builders/52/builds/6312/steps/12/logs/stdio). Could you please take a look?
```
==clang==2272405==ERROR: AddressSanitizer: stack-use-after-scope on address 0x72d4dddb2570 at pc 0x57fb61e308a1 bp 0x7fff837cb2b0 sp 0x7fff837cb2a8
READ of size 8 at 0x72d4dddb2570 thread T0
#0 0x57fb61e308a0 in EmitFormatDiagnostic<clang::CharSourceRange> /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:6925:43
#1 0x57fb61e308a0 in (anonymous namespace)::CheckFormatHandler::HandleInvalidConversionSpecifier(unsigned int, clang::SourceLocation, char const*, unsigned int, char const*, unsigned int) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:6880:3
#2 0x57fb61e2cf26 in (anonymous namespace)::CheckPrintfHandler::HandleInvalidPrintfConversionSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:7152:10
#3 0x57fb61e2d899 in (anonymous namespace)::CheckPrintfHandler::HandlePrintfSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int, clang::TargetInfo const&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp
#4 0x57fb61e40876 in (anonymous namespace)::DecomposePrintfHandler::HandlePrintfSpecifier(clang::analyze_printf::PrintfSpecifier const&, char const*, unsigned int, clang::TargetInfo const&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:7416:28
#5 0x57fb6496f402 in clang::analyze_format_string::ParsePrintfString(clang::analyze_format_string::FormatStringHandler&, char const*, char const*, clang::LangOptions const&, clang::TargetInfo const&, bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/AST/PrintfFormatString.cpp:449:12
#6 0x57fb61df40d7 in (anonymous namespace)::DecomposePrintfHandler::GetSpecifiers(clang::Sema&, (anonymous namespace)::FormatStringLiteral const*, clang::Expr const*, clang::Sema::FormatStringType, bool, bool, llvm::SmallVectorImpl<(anonymous namespace)::EquatableFormatArgument>&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:7398:8
#7 0x57fb61df3322 in clang::Sema::CheckFormatStringsCompatible(clang::Sema::FormatStringType, clang::StringLiteral const*, clang::StringLiteral const*, clang::Expr const*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:8660:7
#8 0x57fb61e274b2 in CheckFormatString(clang::Sema&, (anonymous namespace)::FormatStringLiteral const*, clang::StringLiteral const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, clang::Sema::FormatArgumentPassingKind, unsigned int, unsigned int, clang::Sema::FormatStringType, bool, clang::Sema::VariadicCallType, llvm::SmallBitVector&, (anonymous namespace)::UncoveredArgHandler&, bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:8620:9
#9 0x57fb61df0052 in checkFormatStringExpr(clang::Sema&, clang::StringLiteral const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, clang::Sema::FormatArgumentPassingKind, unsigned int, unsigned int, clang::Sema::FormatStringType, clang::Sema::VariadicCallType, bool, llvm::SmallBitVector&, (anonymous namespace)::UncoveredArgHandler&, llvm::APSInt, bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:6270:7
#10 0x57fb61deba4b in clang::Sema::CheckFormatArguments(llvm::ArrayRef<clang::Expr const*>, clang::Sema::FormatArgumentPassingKind, clang::StringLiteral const*, unsigned int, unsigned int, clang::Sema::FormatStringType, clang::Sema::VariadicCallType, clang::SourceLocation, clang::SourceRange, llvm::SmallBitVector&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:6455:31
#11 0x57fb61dd4429 in CheckFormatString /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:6418:12
#12 0x57fb61dd4429 in clang::Sema::checkCall(clang::NamedDecl*, clang::FunctionProtoType const*, clang::Expr const*, llvm::ArrayRef<clang::Expr const*>, bool, clang::SourceLocation, clang::SourceRange, clang::Sema::VariadicCallType) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:3307:7
#13 0x57fb61dda4cb in clang::Sema::CheckFunctionCall(clang::FunctionDecl*, clang::CallExpr*, clang::FunctionProtoType const*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:3546:3
#14 0x57fb6234c9b6 in clang::Sema::BuildResolvedCallExpr(clang::Expr*, clang::NamedDecl*, clang::SourceLocation, llvm::ArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, clang::CallExpr::ADLCallKind) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaExpr.cpp:7036:9
#15 0x57fb62310d1d in clang::Sema::BuildCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*, bool, bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaExpr.cpp:6693:10
#16 0x57fb623474fe in clang::Sema::ActOnCallExpr(clang::Scope*, clang::Expr*, clang::SourceLocation, llvm::MutableArrayRef<clang::Expr*>, clang::SourceLocation, clang::Expr*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaExpr.cpp:6456:7
#17 0x57fb6194c787 in clang::Parser::ParsePostfixExpressionSuffix(clang::ActionResult<clang::Expr*, true>) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseExpr.cpp:2269:23
#18 0x57fb61953272 in clang::Parser::ParseCastExpression(clang::Parser::CastParseKind, bool, bool&, clang::Parser::TypeCastState, bool, bool*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseExpr.cpp:1962:9
#19 0x57fb61945e62 in ParseCastExpression /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseExpr.cpp:729:20
#20 0x57fb61945e62 in clang::Parser::ParseAssignmentExpression(clang::Parser::TypeCastState) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseExpr.cpp:184:20
#21 0x57fb61945acd in clang::Parser::ParseExpression(clang::Parser::TypeCastState) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseExpr.cpp:135:18
#22 0x57fb61ac41fd in clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseStmt.cpp:564:19
#23 0x57fb61abcdfa in clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseStmt.cpp:293:14
#24 0x57fb61abb924 in clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseStmt.cpp:125:20
#25 0x57fb61ad775b in clang::Parser::ParseCompoundStatementBody(bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseStmt.cpp:1267:11
#26 0x57fb61adae8e in clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseStmt.cpp:2577:21
#27 0x57fb618f7866 in clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/Parser.cpp:1520:10
#28 0x57fb61a18176 in clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseDecl.cpp:2461:17
#29 0x57fb618f4a13 in clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/Parser.cpp:1244:10
#30 0x57fb618f3529 in clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/Parser.cpp:1266:12
#31 0x57fb618f0528 in clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/Parser.cpp:1069:14
#32 0x57fb618eb6ab in clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/Parser.cpp:758:12
#33 0x57fb618dd76d in clang::ParseAST(clang::Sema&, bool, bool) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Parse/ParseAST.cpp:171:20
#34 0x57fb5e5f68d8 in clang::FrontendAction::Execute() /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1072:3
#35 0x57fb5e4f8d0f in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Frontend/CompilerInstance.cpp:1056:33
#36 0x57fb5e8488a5 in clang::ExecuteCompilerInvocation(clang::CompilerInstance*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:280:25
#37 0x57fb556a7754 in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/tools/driver/cc1_main.cpp:290:15
#38 0x57fb5569f1bf in ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/tools/driver/driver.cpp:218:12
#39 0x57fb5569d657 in clang_main(int, char**, llvm::ToolContext const&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/tools/driver/driver.cpp:259:12
#40 0x57fb556bf501 in main /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm_build_asan/tools/clang/tools/driver/clang-driver.cpp:17:10
#41 0x76d4dfc2a3b7 (/lib/x86_64-linux-gnu/libc.so.6+0x2a3b7) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
#42 0x76d4dfc2a47a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a47a) (BuildId: 91f01b4ad171c80b6303d08d1f08cba8b990413d)
#43 0x57fb555b3ae4 in _start (/home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm_build_asan/bin/clang-21+0xc1caae4)
Address 0x72d4dddb2570 is located in stack of thread T0 at offset 368 in frame
#0 0x57fb61df3d5f in (anonymous namespace)::DecomposePrintfHandler::GetSpecifiers(clang::Sema&, (anonymous namespace)::FormatStringLiteral const*, clang::Expr const*, clang::Sema::FormatStringType, bool, bool, llvm::SmallVectorImpl<(anonymous namespace)::EquatableFormatArgument>&) /home/b/sanitizer-x86_64-linux-bootstrap-asan/build/llvm-project/clang/lib/Sema/SemaChecking.cpp:7388
```
https://github.com/llvm/llvm-project/pull/116708
More information about the cfe-commits
mailing list