aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Vogelsgesang <avogelsgesang@salesforce.com>2023-02-01 17:39:27 -0800
committerAdrian Vogelsgesang <avogelsgesang@salesforce.com>2023-02-08 10:22:50 -0800
commit54d4a2550d3167d51a9d386d9823a06aca459531 (patch)
tree0f0f4ac6a8651c2846615d09c6a095c39d36d0bc
parent604cc68b587d8b8a90bd1a0aecfbc7bd3021e926 (diff)
downloadllvm-54d4a2550d3167d51a9d386d9823a06aca459531.zip
llvm-54d4a2550d3167d51a9d386d9823a06aca459531.tar.gz
llvm-54d4a2550d3167d51a9d386d9823a06aca459531.tar.bz2
[LLDB] Fix assertion failure by removing `CopyType` in `std::coroutine_handle` pretty printer
The pretty printer for `std::coroutine_handle` was running into > Assertion failed: (target_ctx != source_ctx && "Can't import into itself") from ClangASTImporter.h, line 270. This commit fixes the issue by removing the `CopyType` call from the pretty printer. While this call was necessary in the past, it seems to be no longer required, at least all test cases are still passing. Maybe something changed in the meantime around the handling of `TypesystemClang` instances. I don't quite understand why `CopyType` was necessary earlier. I am not sure how to add a regression test for this, though. It seems the issue is already triggered by the exising `TestCoroutineHandle.py`, but API tests seem to ignore all violations of `lldbassert` and still report the test as "passed", even if assertions were triggered Differential Revision: https://reviews.llvm.org/D143127
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp7
-rw-r--r--lldb/source/Plugins/Language/CPlusPlus/Coroutines.h3
2 files changed, 2 insertions, 8 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
index bd428a8..c517075 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
@@ -8,7 +8,6 @@
#include "Coroutines.h"
-#include "Plugins/ExpressionParser/Clang/ClangASTImporter.h"
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
#include "lldb/Symbol/Function.h"
#include "lldb/Symbol/VariableList.h"
@@ -97,8 +96,7 @@ bool lldb_private::formatters::StdlibCoroutineHandleSummaryProvider(
lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::
StdlibCoroutineHandleSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
- : SyntheticChildrenFrontEnd(*valobj_sp),
- m_ast_importer(std::make_unique<ClangASTImporter>()) {
+ : SyntheticChildrenFrontEnd(*valobj_sp) {
if (valobj_sp)
Update();
}
@@ -174,8 +172,7 @@ bool lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::
if (Function *destroy_func =
ExtractDestroyFunction(target_sp, frame_ptr_addr)) {
if (CompilerType inferred_type = InferPromiseType(*destroy_func)) {
- // Copy the type over to the correct `TypeSystemClang` instance
- promise_type = m_ast_importer->CopyType(*ast_ctx, inferred_type);
+ promise_type = inferred_type;
}
}
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
index e2e640a..b26cc9e 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
@@ -16,8 +16,6 @@
namespace lldb_private {
-class ClangASTImporter;
-
namespace formatters {
/// Summary provider for `std::coroutine_handle<T>` from libc++, libstdc++ and
@@ -50,7 +48,6 @@ private:
lldb::ValueObjectSP m_resume_ptr_sp;
lldb::ValueObjectSP m_destroy_ptr_sp;
lldb::ValueObjectSP m_promise_ptr_sp;
- std::unique_ptr<lldb_private::ClangASTImporter> m_ast_importer;
};
SyntheticChildrenFrontEnd *