[clang] [clang] Implement __attribute__((format_matches)) (PR #116708)
Thurston Dang via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 25 09:09:23 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:
Benjamin Kramer fixed it at head (https://github.com/llvm/llvm-project/commit/85eb7259d9e1ab57e9fac248096d73505a60c072)
> 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