[Lldb-commits] [clang] [lldb] Reland: [clang] fix P3310 overload resolution flag propagation (PR #125791)
Haojian Wu via lldb-commits
lldb-commits at lists.llvm.org
Thu Feb 6 00:48:56 PST 2025
hokein wrote:
Heads-up: this patch triggers a MSAN failure in an lldb test (`lldb/test/API/commands/expression/call-function/TestCallStdStringFunction.py`), the stacktrace:
```
==5633==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 in decltype(auto) clang::ASTNodeImporter::CallOverloadedCreateFun<clang::ClassTemplateSpecializationDecl>::operator()<clang::ASTContext&, clang::TagTypeKind, clang::DeclContext*&, clang::SourceLocation&, clang::SourceLocation&, clang::ClassTemplateDecl*&, llvm::SmallVector<clang::TemplateArgument, 2u>&, bool, clang::ClassTemplateSpecializationDecl*&>(clang::ASTContext&, clang::TagTypeKind&&, clang::DeclContext*&, clang::SourceLocation&, clang::SourceLocation&, clang::ClassTemplateDecl*&, llvm::SmallVector<clang::TemplateArgument, 2u>&, bool&&, clang::ClassTemplateSpecializationDecl*&) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:234:16
#1 in bool clang::ASTNodeImporter::GetImportedOrCreateSpecialDecl<clang::ClassTemplateSpecializationDecl, clang::ASTNodeImporter::CallOverloadedCreateFun<clang::ClassTemplateSpecializationDecl>, clang::ClassTemplateSpecializationDecl, clang::ASTContext&, clang::TagTypeKind, clang::DeclContext*&, clang::SourceLocation&, clang::SourceLocation&, clang::ClassTemplateDecl*&, llvm::SmallVector<clang::TemplateArgument, 2u>&, bool, clang::ClassTemplateSpecializationDecl*&>(clang::ClassTemplateSpecializationDecl*&, clang::ASTNodeImporter::CallOverloadedCreateFun<clang::ClassTemplateSpecializationDecl>, clang::ClassTemplateSpecializationDecl*, clang::ASTContext&, clang::TagTypeKind&&, clang::DeclContext*&, clang::SourceLocation&, clang::SourceLocation&, clang::ClassTemplateDecl*&, llvm::SmallVector<clang::TemplateArgument, 2u>&, bool&&, clang::ClassTemplateSpecializationDecl*&) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:281:13
#2 in GetImportedOrCreateDecl<clang::ClassTemplateSpecializationDecl, clang::ClassTemplateSpecializationDecl, clang::ASTContext &, clang::TagTypeKind, clang::DeclContext *&, clang::SourceLocation &, clang::SourceLocation &, clang::ClassTemplateDecl *&, llvm::SmallVector<clang::TemplateArgument, 2U> &, bool, clang::ClassTemplateSpecializationDecl *&> llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:251:14
#3 in clang::ASTNodeImporter::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:6323:9
#4 in clang::declvisitor::Base<std::__msan::add_pointer, clang::ASTNodeImporter, llvm::Expected<clang::Decl*>>::Visit(clang::Decl*) llvm/llvm-project/clang/include/clang/AST/DeclNodes.inc
#5 in clang::ASTImporter::ImportImpl(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9126:19
#6 in lldb_private::ClangASTImporter::ASTImporterDelegate::ImportImpl(clang::Decl*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp:1134:23
#7 in clang::ASTImporter::Import(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9521:27
#8 in std::__msan::conditional<std::is_base_of_v<clang::Type, clang::RecordDecl>, llvm::Expected<clang::RecordDecl const*>, llvm::Expected<clang::RecordDecl*>>::type clang::ASTNodeImporter::import<clang::RecordDecl>(clang::RecordDecl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:203:31
#9 in clang::ASTNodeImporter::VisitRecordType(clang::RecordType const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:1559:40
#10 in clang::TypeVisitor<clang::ASTNodeImporter, llvm::Expected<clang::QualType>>::Visit(clang::Type const*) llvm/llvm-project/clang/include/clang/AST/TypeNodes.inc:76:1
#11 in clang::ASTImporter::Import(clang::Type const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9157:36
#12 in clang::ASTImporter::Import(clang::QualType) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9171:31
#13 in import<clang::QualType> llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:217:23
#14 in llvm::Expected<clang::TemplateArgument> clang::ASTNodeImporter::import<clang::TemplateArgument>(clang::TemplateArgument const&) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:832:32
#15 in clang::ASTNodeImporter::ImportTemplateArguments(llvm::ArrayRef<clang::TemplateArgument>, llvm::SmallVectorImpl<clang::TemplateArgument>&) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:2453:24
#16 in clang::ASTNodeImporter::VisitClassTemplateSpecializationDecl(clang::ClassTemplateSpecializationDecl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:6219:11
#17 in clang::declvisitor::Base<std::__msan::add_pointer, clang::ASTNodeImporter, llvm::Expected<clang::Decl*>>::Visit(clang::Decl*) llvm/llvm-project/clang/include/clang/AST/DeclNodes.inc
#18 in clang::ASTImporter::ImportImpl(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9126:19
#19 in lldb_private::ClangASTImporter::ASTImporterDelegate::ImportImpl(clang::Decl*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp:1134:23
#20 in clang::ASTImporter::Import(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9521:27
#21 in std::__msan::conditional<std::is_base_of_v<clang::Type, clang::RecordDecl>, llvm::Expected<clang::RecordDecl const*>, llvm::Expected<clang::RecordDecl*>>::type clang::ASTNodeImporter::import<clang::RecordDecl>(clang::RecordDecl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:203:31
#22 in clang::ASTNodeImporter::VisitRecordType(clang::RecordType const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:1559:40
#23 in clang::TypeVisitor<clang::ASTNodeImporter, llvm::Expected<clang::QualType>>::Visit(clang::Type const*) llvm/llvm-project/clang/include/clang/AST/TypeNodes.inc:76:1
#24 in clang::ASTImporter::Import(clang::Type const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9157:36
#25 in clang::ASTImporter::Import(clang::QualType) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9171:31
#26 in import<clang::QualType> llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:217:23
#27 in clang::QualType clang::ASTNodeImporter::importChecked<clang::QualType>(llvm::Error&, clang::QualType const&) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:692:30
#28 in clang::ASTNodeImporter::VisitTypedefNameDecl(clang::TypedefNameDecl*, bool) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:2823:27
#29 in VisitTypedefDecl llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:2862:10
#30 in clang::declvisitor::Base<std::__msan::add_pointer, clang::ASTNodeImporter, llvm::Expected<clang::Decl*>>::Visit(clang::Decl*) llvm/llvm-project/clang/include/clang/AST/DeclNodes.inc:466:1
#31 in clang::ASTImporter::ImportImpl(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9126:19
#32 in lldb_private::ClangASTImporter::ASTImporterDelegate::ImportImpl(clang::Decl*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp:1134:23
#33 in clang::ASTImporter::Import(clang::Decl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9521:27
#34 in std::__msan::conditional<std::is_base_of_v<clang::Type, clang::TypedefNameDecl>, llvm::Expected<clang::TypedefNameDecl const*>, llvm::Expected<clang::TypedefNameDecl*>>::type clang::ASTNodeImporter::import<clang::TypedefNameDecl>(clang::TypedefNameDecl*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:203:31
#35 in clang::ASTNodeImporter::VisitTypedefType(clang::TypedefType const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:1441:45
#36 in clang::TypeVisitor<clang::ASTNodeImporter, llvm::Expected<clang::QualType>>::Visit(clang::Type const*) llvm/llvm-project/clang/include/clang/AST/TypeNodes.inc:81:1
#37 in clang::ASTImporter::Import(clang::Type const*) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9157:36
#38 in clang::ASTImporter::Import(clang::QualType) llvm/llvm-project/clang/lib/AST/ASTImporter.cpp:9171:31
#39 in lldb_private::ClangASTImporter::CopyType(lldb_private::TypeSystemClang&, lldb_private::CompilerType const&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp:54:56
#40 in lldb_private::ClangASTSource::GuardedCopyType(lldb_private::CompilerType const&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp:1486:26
#41 in lldb_private::ClangExpressionDeclMap::GetVariableValue(std::__msan::shared_ptr<lldb_private::Variable>&, lldb_private::Value&, lldb_private::TaggedASTType<1u>*, lldb_private::TaggedASTType<0u>*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:1513:30
#42 in lldb_private::ClangExpressionDeclMap::AddOneVariable(lldb_private::NameSearchContext&, std::__msan::shared_ptr<lldb_private::Variable>, std::__msan::shared_ptr<lldb_private::ValueObject>) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:1654:8
#43 in lldb_private::ClangExpressionDeclMap::LookupLocalVariable(lldb_private::NameSearchContext&, lldb_private::ConstString, lldb_private::SymbolContext&, lldb_private::CompilerDeclContext const&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:1094:7
#44 in lldb_private::ClangExpressionDeclMap::FindExternalVisibleDecls(lldb_private::NameSearchContext&, std::__msan::shared_ptr<lldb_private::Module>, lldb_private::CompilerDeclContext const&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:1418:9
#45 in lldb_private::ClangExpressionDeclMap::FindExternalVisibleDecls(lldb_private::NameSearchContext&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp:721:5
#46 in lldb_private::ClangASTSource::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName, clang::DeclContext const*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp:180:3
#47 in lldb_private::ClangASTSource::ClangASTSourceProxy::FindExternalVisibleDeclsByName(clang::DeclContext const*, clang::DeclarationName, clang::DeclContext const*) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.h:219:25
#48 in clang::DeclContext::lookupImpl(clang::DeclarationName, clang::DeclContext const*) const llvm/llvm-project/clang/lib/AST/DeclBase.cpp:1913:17
#49 in clang::DeclContext::lookup(clang::DeclarationName) const llvm/llvm-project/clang/lib/AST/DeclBase.cpp:1873:31
#50 in LookupDirect(clang::Sema&, clang::LookupResult&, clang::DeclContext const*) llvm/llvm-project/clang/lib/Sema/SemaLookup.cpp:1127:39
#51 in CppNamespaceLookup(clang::Sema&, clang::LookupResult&, clang::ASTContext&, clang::DeclContext const*, (anonymous namespace)::UnqualUsingDirectiveSet&) llvm/llvm-project/clang/lib/Sema/SemaLookup.cpp:1225:16
#52 in clang::Sema::CppLookupName(clang::LookupResult&, clang::Scope*) llvm/llvm-project/clang/lib/Sema/SemaLookup.cpp:1524:15
#53 in clang::Sema::LookupName(clang::LookupResult&, clang::Scope*, bool, bool) llvm/llvm-project/clang/lib/Sema/SemaLookup.cpp:2280:9
#54 in clang::Sema::BuildUsingDeclaration(clang::Scope*, clang::AccessSpecifier, clang::SourceLocation, bool, clang::SourceLocation, clang::CXXScopeSpec&, clang::DeclarationNameInfo, clang::SourceLocation, clang::ParsedAttributesView const&, bool, bool) llvm/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:12832:5
#55 in clang::Sema::ActOnUsingDeclaration(clang::Scope*, clang::AccessSpecifier, clang::SourceLocation, clang::SourceLocation, clang::CXXScopeSpec&, clang::UnqualifiedId&, clang::SourceLocation, clang::ParsedAttributesView const&) llvm/llvm-project/clang/lib/Sema/SemaDeclCXX.cpp:12367:7
#56 in clang::Parser::ParseUsingDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation, clang::SourceLocation&, clang::ParsedAttributes&, clang::AccessSpecifier) llvm/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:899:26
#57 in clang::Parser::ParseUsingDirectiveOrDeclaration(clang::DeclaratorContext, clang::Parser::ParsedTemplateInfo const&, clang::SourceLocation&, clang::ParsedAttributes&) llvm/llvm-project/clang/lib/Parse/ParseDeclCXX.cpp:537:10
#58 in clang::Parser::ParseDeclaration(clang::DeclaratorContext, clang::SourceLocation&, clang::ParsedAttributes&, clang::ParsedAttributes&, clang::SourceLocation*) llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp:2081:12
#59 in clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*, clang::ParsedAttributes&, clang::ParsedAttributes&) llvm/llvm-project/clang/lib/Parse/ParseStmt.cpp
#60 in clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*, 32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*) llvm/llvm-project/clang/lib/Parse/ParseStmt.cpp:125:20
#61 in clang::Parser::ParseCompoundStatementBody(bool) llvm/llvm-project/clang/lib/Parse/ParseStmt.cpp:1267:11
#62 in clang::Parser::ParseFunctionStatementBody(clang::Decl*, clang::Parser::ParseScope&) llvm/llvm-project/clang/lib/Parse/ParseStmt.cpp:2577:21
#63 in clang::Parser::ParseFunctionDefinition(clang::ParsingDeclarator&, clang::Parser::ParsedTemplateInfo const&, clang::Parser::LateParsedAttrList*) llvm/llvm-project/clang/lib/Parse/Parser.cpp:1520:10
#64 in clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, clang::DeclaratorContext, clang::ParsedAttributes&, clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, clang::Parser::ForRangeInit*) llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp
#65 in clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) llvm/llvm-project/clang/lib/Parse/Parser.cpp:1244:10
#66 in clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) llvm/llvm-project/clang/lib/Parse/Parser.cpp:1266:12
#67 in clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) llvm/llvm-project/clang/lib/Parse/Parser.cpp:1069:14
#68 in clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) llvm/llvm-project/clang/lib/Parse/Parser.cpp:758:12
#69 in clang::ParseAST(clang::Sema&, bool, bool) llvm/llvm-project/clang/lib/Parse/ParseAST.cpp:171:20
#70 in lldb_private::ClangExpressionParser::ParseInternal(lldb_private::DiagnosticManager&, clang::CodeCompleteConsumer*, unsigned int, unsigned int) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp:1347:5
#71 in lldb_private::ClangExpressionParser::Parse(lldb_private::DiagnosticManager&) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp:1204:10
#72 in lldb_private::ClangUserExpression::TryParse(lldb_private::DiagnosticManager&, lldb_private::ExecutionContext&, lldb_private::ExecutionPolicy, bool, bool) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp:579:35
#73 in lldb_private::ClangUserExpression::Parse(lldb_private::DiagnosticManager&, lldb_private::ExecutionContext&, lldb_private::ExecutionPolicy, bool, bool) llvm/llvm-project/lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp:673:24
#74 in lldb_private::UserExpression::Evaluate(lldb_private::ExecutionContext&, lldb_private::EvaluateExpressionOptions const&, llvm::StringRef, llvm::StringRef, std::__msan::shared_ptr<lldb_private::ValueObject>&, std::__msan::basic_string<char, std::__msan::char_traits<char>, std::__msan::allocator<char>>*, lldb_private::ValueObject*) llvm/llvm-project/lldb/source/Expression/UserExpression.cpp:280:27
#75 in lldb_private::Target::EvaluateExpression(llvm::StringRef, lldb_private::ExecutionContextScope*, std::__msan::shared_ptr<lldb_private::ValueObject>&, lldb_private::EvaluateExpressionOptions const&, std::__msan::basic_string<char, std::__msan::char_traits<char>, std::__msan::allocator<char>>*, lldb_private::ValueObject*) llvm/llvm-project/lldb/source/Target/Target.cpp:2853:9
#76 in lldb_private::CommandObjectExpression::EvaluateExpression(llvm::StringRef, lldb_private::Stream&, lldb_private::Stream&, lldb_private::CommandReturnObject&) llvm/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:426:38
#77 in lldb_private::CommandObjectExpression::DoExecute(llvm::StringRef, lldb_private::CommandReturnObject&) llvm/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:667:7
#78 in lldb_private::CommandObjectRaw::Execute(char const*, lldb_private::CommandReturnObject&) llvm/llvm-project/lldb/source/Interpreter/CommandObject.cpp:853:7
#79 in lldb_private::CommandInterpreter::HandleCommand(char const*, lldb_private::LazyBool, lldb_private::CommandReturnObject&, bool) llvm/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2085:14
```
https://github.com/llvm/llvm-project/pull/125791
More information about the lldb-commits
mailing list