[llvm-branch-commits] [lldb] 6dabe60 - [LLDB] Fix assertion failure by removing `CopyType` in `std::coroutine_handle` pretty printer

Tobias Hieta via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Feb 13 02:30:31 PST 2023


Author: Adrian Vogelsgesang
Date: 2023-02-13T11:30:09+01:00
New Revision: 6dabe601994def41eb420e2f19a7e89c57fddff5

URL: https://github.com/llvm/llvm-project/commit/6dabe601994def41eb420e2f19a7e89c57fddff5
DIFF: https://github.com/llvm/llvm-project/commit/6dabe601994def41eb420e2f19a7e89c57fddff5.diff

LOG: [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

(cherry picked from commit 54d4a2550d3167d51a9d386d9823a06aca459531)

Added: 
    

Modified: 
    lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
    lldb/source/Plugins/Language/CPlusPlus/Coroutines.h

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
index bd428a812531..c5170757496f 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 e2e640ab4843..b26cc9ed6132 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 @@ class StdlibCoroutineHandleSyntheticFrontEnd
   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 *


        


More information about the llvm-branch-commits mailing list