https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/112748
>From 247f2638be2decf0f806050e90c25c4b664b2f97 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 17 Oct 2024 17:40:35 +0100 Subject: [PATCH 1/6] [lldb][ClangASTImporter][NFC] Emit a log message when we break MapImported invariant --- .../Clang/ClangASTImporter.cpp | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index 630ad7e20ab7e0..9a0e354daff712 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1136,6 +1136,25 @@ ClangASTImporter::ASTImporterDelegate::ImportImpl(Decl *From) { void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( clang::Decl *to, clang::Decl *from) { + Log *log = GetLog(LLDBLog::Expressions); + + auto getDeclName = [](Decl const *decl) { + std::string name_string; + if (auto const *from_named_decl = dyn_cast<clang::NamedDecl>(decl)) { + llvm::raw_string_ostream name_stream(name_string); + from_named_decl->printName(name_stream); + } + + return name_string; + }; + + if (auto *D = GetAlreadyImportedOrNull(from); D && D != to) + LLDB_LOG(log, + "[ClangASTImporter] WARNING: overwriting an already imported decl " + "'{0:x}' ('{1}') from '{2:x}' with {3:x}. Likely due to a name " + "conflict when importing {1}.", + D, getDeclName(from), from, to); + // We might have a forward declaration from a shared library that we // gave external lexical storage so that Clang asks us about the full // definition when it needs it. In this case the ASTImporter isn't aware @@ -1145,8 +1164,6 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( // tell the ASTImporter that 'to' was imported from 'from'. MapImported(from, to); - Log *log = GetLog(LLDBLog::Expressions); - if (llvm::Error err = ImportDefinition(from)) { LLDB_LOG_ERROR(log, std::move(err), "[ClangASTImporter] Error during importing definition: {0}"); @@ -1158,11 +1175,7 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( to_tag->setCompleteDefinition(from_tag->isCompleteDefinition()); if (Log *log_ast = GetLog(LLDBLog::AST)) { - std::string name_string; - if (NamedDecl *from_named_decl = dyn_cast<clang::NamedDecl>(from)) { - llvm::raw_string_ostream name_stream(name_string); - from_named_decl->printName(name_stream); - } + std::string name_string = getDeclName(from); LLDB_LOG(log_ast, "==== [ClangASTImporter][TUDecl: {0:x}] Imported " "({1}Decl*){2:x}, named {3} (from " >From c1e78158074549d83448733a6560fa53fa843041 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Thu, 17 Oct 2024 17:52:07 +0100 Subject: [PATCH 2/6] fixup! add quotes --- .../Plugins/ExpressionParser/Clang/ClangASTImporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index 9a0e354daff712..2fbd8e6ca688fc 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1151,8 +1151,8 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( if (auto *D = GetAlreadyImportedOrNull(from); D && D != to) LLDB_LOG(log, "[ClangASTImporter] WARNING: overwriting an already imported decl " - "'{0:x}' ('{1}') from '{2:x}' with {3:x}. Likely due to a name " - "conflict when importing {1}.", + "'{0:x}' ('{1}') from '{2:x}' with '{3:x}'. Likely due to a name " + "conflict when importing '{1}'.", D, getDeclName(from), from, to); // We might have a forward declaration from a shared library that we >From b239e11588829a5086ec4ca134cfcfecd02cf686 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 18 Oct 2024 09:43:21 +0100 Subject: [PATCH 3/6] fixup! only do lookup when logging; add braces; WARNING->ERROR --- .../ExpressionParser/Clang/ClangASTImporter.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index 2fbd8e6ca688fc..be2e5e63e5730c 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1148,12 +1148,15 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( return name_string; }; - if (auto *D = GetAlreadyImportedOrNull(from); D && D != to) - LLDB_LOG(log, - "[ClangASTImporter] WARNING: overwriting an already imported decl " - "'{0:x}' ('{1}') from '{2:x}' with '{3:x}'. Likely due to a name " - "conflict when importing '{1}'.", - D, getDeclName(from), from, to); + if (log) { + if (auto *D = GetAlreadyImportedOrNull(from); D && D != to) { + LLDB_LOG(log, + "[ClangASTImporter] ERROR: overwriting an already imported decl " + "'{0:x}' ('{1}') from '{2:x}' with '{3:x}'. Likely due to a name " + "conflict when importing '{1}'.", + D, getDeclName(from), from, to); + } + } // We might have a forward declaration from a shared library that we // gave external lexical storage so that Clang asks us about the full >From 4069dbfaccacfa58241f3dc96e50d299d3c509f5 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 18 Oct 2024 09:43:59 +0100 Subject: [PATCH 4/6] fixup! clang-format --- .../ExpressionParser/Clang/ClangASTImporter.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index be2e5e63e5730c..52ac3c45a23624 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1150,11 +1150,12 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( if (log) { if (auto *D = GetAlreadyImportedOrNull(from); D && D != to) { - LLDB_LOG(log, - "[ClangASTImporter] ERROR: overwriting an already imported decl " - "'{0:x}' ('{1}') from '{2:x}' with '{3:x}'. Likely due to a name " - "conflict when importing '{1}'.", - D, getDeclName(from), from, to); + LLDB_LOG( + log, + "[ClangASTImporter] ERROR: overwriting an already imported decl " + "'{0:x}' ('{1}') from '{2:x}' with '{3:x}'. Likely due to a name " + "conflict when importing '{1}'.", + D, getDeclName(from), from, to); } } >From 7262cbe92347a8a3b229d8ce0b907521a00ca0c2 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 18 Oct 2024 09:48:29 +0100 Subject: [PATCH 5/6] fixup! remove redundant local --- .../source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index 52ac3c45a23624..476f2106406f4e 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1179,13 +1179,12 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( to_tag->setCompleteDefinition(from_tag->isCompleteDefinition()); if (Log *log_ast = GetLog(LLDBLog::AST)) { - std::string name_string = getDeclName(from); LLDB_LOG(log_ast, "==== [ClangASTImporter][TUDecl: {0:x}] Imported " "({1}Decl*){2:x}, named {3} (from " "(Decl*){4:x})", static_cast<void *>(to->getTranslationUnitDecl()), - from->getDeclKindName(), static_cast<void *>(to), name_string, + from->getDeclKindName(), static_cast<void *>(to), getDeclName(from), static_cast<void *>(from)); // Log the AST of the TU. >From 3bd2f8cc2c932c821de72c6a4c10ee6afb32c2e1 Mon Sep 17 00:00:00 2001 From: Michael Buch <michaelbuc...@gmail.com> Date: Fri, 18 Oct 2024 09:48:43 +0100 Subject: [PATCH 6/6] fixup! clang-format --- .../Plugins/ExpressionParser/Clang/ClangASTImporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp index 476f2106406f4e..db9a6dd197b3a6 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp @@ -1184,8 +1184,8 @@ void ClangASTImporter::ASTImporterDelegate::ImportDefinitionTo( "({1}Decl*){2:x}, named {3} (from " "(Decl*){4:x})", static_cast<void *>(to->getTranslationUnitDecl()), - from->getDeclKindName(), static_cast<void *>(to), getDeclName(from), - static_cast<void *>(from)); + from->getDeclKindName(), static_cast<void *>(to), + getDeclName(from), static_cast<void *>(from)); // Log the AST of the TU. std::string ast_string; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits