-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Reapply "[lldb] Return *const* UnwindPlan pointers from FuncUnwinders " #134246
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This reverts commit 0949043, reapplying d7afafd (llvm#133247). The failure ought to be fixed by 0509932.
@llvm/pr-subscribers-lldb Author: Pavel Labath (labath) ChangesThis reverts commit 0949043, reapplying d7afafd (#133247). The failure ought to be fixed by Patch is 48.52 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/134246.diff 7 Files Affected:
diff --git a/lldb/include/lldb/Symbol/FuncUnwinders.h b/lldb/include/lldb/Symbol/FuncUnwinders.h
index 1d4c28324e90f..479ccf87b6e2c 100644
--- a/lldb/include/lldb/Symbol/FuncUnwinders.h
+++ b/lldb/include/lldb/Symbol/FuncUnwinders.h
@@ -36,18 +36,19 @@ class FuncUnwinders {
~FuncUnwinders();
- lldb::UnwindPlanSP GetUnwindPlanAtCallSite(Target &target, Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetUnwindPlanAtCallSite(Target &target,
+ Thread &thread);
- lldb::UnwindPlanSP GetUnwindPlanAtNonCallSite(Target &target,
- lldb_private::Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetUnwindPlanAtNonCallSite(Target &target, lldb_private::Thread &thread);
- lldb::UnwindPlanSP GetUnwindPlanFastUnwind(Target &target,
- lldb_private::Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetUnwindPlanFastUnwind(Target &target, lldb_private::Thread &thread);
- lldb::UnwindPlanSP
+ std::shared_ptr<const UnwindPlan>
GetUnwindPlanArchitectureDefault(lldb_private::Thread &thread);
- lldb::UnwindPlanSP
+ std::shared_ptr<const UnwindPlan>
GetUnwindPlanArchitectureDefaultAtFunctionEntry(lldb_private::Thread &thread);
Address &GetFirstNonPrologueInsn(Target &target);
@@ -77,32 +78,34 @@ class FuncUnwinders {
// used. Instead, clients should ask for the *behavior* they are looking for,
// using one of the above UnwindPlan retrieval methods.
- lldb::UnwindPlanSP GetAssemblyUnwindPlan(Target &target, Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetAssemblyUnwindPlan(Target &target,
+ Thread &thread);
- lldb::UnwindPlanSP GetObjectFileUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetObjectFileUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetObjectFileAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetObjectFileAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetEHFrameUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetEHFrameUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetEHFrameAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetEHFrameAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetDebugFrameUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetDebugFrameUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetDebugFrameAugmentedUnwindPlan(Target &target,
- Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetDebugFrameAugmentedUnwindPlan(Target &target, Thread &thread);
- lldb::UnwindPlanSP GetCompactUnwindUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetCompactUnwindUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetArmUnwindUnwindPlan(Target &target);
+ std::shared_ptr<const UnwindPlan> GetArmUnwindUnwindPlan(Target &target);
- lldb::UnwindPlanSP GetSymbolFileUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetSymbolFileUnwindPlan(Thread &thread);
- lldb::UnwindPlanSP GetArchDefaultUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan> GetArchDefaultUnwindPlan(Thread &thread);
- lldb::UnwindPlanSP GetArchDefaultAtFuncEntryUnwindPlan(Thread &thread);
+ std::shared_ptr<const UnwindPlan>
+ GetArchDefaultAtFuncEntryUnwindPlan(Thread &thread);
private:
lldb::UnwindAssemblySP GetUnwindAssemblyProfiler(Target &target);
@@ -113,7 +116,8 @@ class FuncUnwinders {
// unwind rule for the pc, and LazyBoolCalculate if it was unable to
// determine this for some reason.
lldb_private::LazyBool CompareUnwindPlansForIdenticalInitialPCLocation(
- Thread &thread, const lldb::UnwindPlanSP &a, const lldb::UnwindPlanSP &b);
+ Thread &thread, const std::shared_ptr<const UnwindPlan> &a,
+ const std::shared_ptr<const UnwindPlan> &b);
UnwindTable &m_unwind_table;
@@ -129,22 +133,22 @@ class FuncUnwinders {
std::recursive_mutex m_mutex;
- lldb::UnwindPlanSP m_unwind_plan_assembly_sp;
- lldb::UnwindPlanSP m_unwind_plan_object_file_sp;
- lldb::UnwindPlanSP m_unwind_plan_eh_frame_sp;
- lldb::UnwindPlanSP m_unwind_plan_debug_frame_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_assembly_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_object_file_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_eh_frame_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_debug_frame_sp;
// augmented by assembly inspection so it's valid everywhere
- lldb::UnwindPlanSP m_unwind_plan_object_file_augmented_sp;
- lldb::UnwindPlanSP m_unwind_plan_eh_frame_augmented_sp;
- lldb::UnwindPlanSP m_unwind_plan_debug_frame_augmented_sp;
-
- std::vector<lldb::UnwindPlanSP> m_unwind_plan_compact_unwind;
- lldb::UnwindPlanSP m_unwind_plan_arm_unwind_sp;
- lldb::UnwindPlanSP m_unwind_plan_symbol_file_sp;
- lldb::UnwindPlanSP m_unwind_plan_fast_sp;
- lldb::UnwindPlanSP m_unwind_plan_arch_default_sp;
- lldb::UnwindPlanSP m_unwind_plan_arch_default_at_func_entry_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_object_file_augmented_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_eh_frame_augmented_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_debug_frame_augmented_sp;
+
+ std::vector<std::shared_ptr<const UnwindPlan>> m_unwind_plan_compact_unwind;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arm_unwind_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_symbol_file_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_fast_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arch_default_sp;
+ std::shared_ptr<const UnwindPlan> m_unwind_plan_arch_default_at_func_entry_sp;
// Fetching the UnwindPlans can be expensive - if we've already attempted to
// get one & failed, don't try again.
diff --git a/lldb/include/lldb/Symbol/UnwindPlan.h b/lldb/include/lldb/Symbol/UnwindPlan.h
index 9adda27b8f928..6640a23a3e868 100644
--- a/lldb/include/lldb/Symbol/UnwindPlan.h
+++ b/lldb/include/lldb/Symbol/UnwindPlan.h
@@ -482,7 +482,7 @@ class UnwindPlan {
m_return_addr_register = regnum;
}
- uint32_t GetReturnAddressRegister() { return m_return_addr_register; }
+ uint32_t GetReturnAddressRegister() const { return m_return_addr_register; }
uint32_t GetInitialCFARegister() const {
if (m_row_list.empty())
@@ -497,7 +497,7 @@ class UnwindPlan {
m_plan_valid_ranges = std::move(ranges);
}
- bool PlanValidAtAddress(Address addr);
+ bool PlanValidAtAddress(Address addr) const;
bool IsValidRowIndex(uint32_t idx) const;
diff --git a/lldb/include/lldb/Target/RegisterContextUnwind.h b/lldb/include/lldb/Target/RegisterContextUnwind.h
index c4ae29e657bfb..044a387fe5aa2 100644
--- a/lldb/include/lldb/Target/RegisterContextUnwind.h
+++ b/lldb/include/lldb/Target/RegisterContextUnwind.h
@@ -127,7 +127,8 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
/// Check if the given unwind plan indicates a signal trap handler, and
/// update frame type and symbol context if so.
- void PropagateTrapHandlerFlagFromUnwindPlan(lldb::UnwindPlanSP unwind_plan);
+ void PropagateTrapHandlerFlagFromUnwindPlan(
+ std::shared_ptr<const UnwindPlan> unwind_plan);
// Provide a location for where THIS function saved the CALLER's register
// value
@@ -194,16 +195,17 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
const UnwindPlan::Row::FAValue &fa,
lldb::addr_t &address);
- lldb::UnwindPlanSP GetFastUnwindPlanForFrame();
+ std::shared_ptr<const UnwindPlan> GetFastUnwindPlanForFrame();
- lldb::UnwindPlanSP GetFullUnwindPlanForFrame();
+ std::shared_ptr<const UnwindPlan> GetFullUnwindPlanForFrame();
void UnwindLogMsg(const char *fmt, ...) __attribute__((format(printf, 2, 3)));
void UnwindLogMsgVerbose(const char *fmt, ...)
__attribute__((format(printf, 2, 3)));
- bool IsUnwindPlanValidForCurrentPC(lldb::UnwindPlanSP unwind_plan_sp);
+ bool IsUnwindPlanValidForCurrentPC(
+ std::shared_ptr<const UnwindPlan> unwind_plan_sp);
lldb::addr_t GetReturnAddressHint(int32_t plan_offset);
@@ -215,9 +217,9 @@ class RegisterContextUnwind : public lldb_private::RegisterContext {
// i.e. where THIS frame saved them
///
- lldb::UnwindPlanSP m_fast_unwind_plan_sp; // may be NULL
- lldb::UnwindPlanSP m_full_unwind_plan_sp;
- lldb::UnwindPlanSP m_fallback_unwind_plan_sp; // may be NULL
+ std::shared_ptr<const UnwindPlan> m_fast_unwind_plan_sp; // may be NULL
+ std::shared_ptr<const UnwindPlan> m_full_unwind_plan_sp;
+ std::shared_ptr<const UnwindPlan> m_fallback_unwind_plan_sp; // may be NULL
bool m_all_registers_available; // Can we retrieve all regs or just
// nonvolatile regs?
diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp
index c77bddb4af061..3f7d3007ed168 100644
--- a/lldb/source/Commands/CommandObjectTarget.cpp
+++ b/lldb/source/Commands/CommandObjectTarget.cpp
@@ -3641,77 +3641,70 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
- UnwindPlanSP non_callsite_unwind_plan =
- func_unwinders_sp->GetUnwindPlanAtNonCallSite(*target, *thread);
- if (non_callsite_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanAtNonCallSite(*target, *thread)) {
result.GetOutputStream().Printf(
"Asynchronous (not restricted to call-sites) UnwindPlan is '%s'\n",
- non_callsite_unwind_plan->GetSourceName().AsCString());
+ plan_sp->GetSourceName().AsCString());
}
- UnwindPlanSP callsite_unwind_plan =
- func_unwinders_sp->GetUnwindPlanAtCallSite(*target, *thread);
- if (callsite_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanAtCallSite(*target, *thread)) {
result.GetOutputStream().Printf(
"Synchronous (restricted to call-sites) UnwindPlan is '%s'\n",
- callsite_unwind_plan->GetSourceName().AsCString());
+ plan_sp->GetSourceName().AsCString());
}
- UnwindPlanSP fast_unwind_plan =
- func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread);
- if (fast_unwind_plan) {
- result.GetOutputStream().Printf(
- "Fast UnwindPlan is '%s'\n",
- fast_unwind_plan->GetSourceName().AsCString());
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
+ result.GetOutputStream().Printf("Fast UnwindPlan is '%s'\n",
+ plan_sp->GetSourceName().AsCString());
}
result.GetOutputStream().Printf("\n");
- UnwindPlanSP assembly_sp =
- func_unwinders_sp->GetAssemblyUnwindPlan(*target, *thread);
- if (assembly_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetAssemblyUnwindPlan(*target, *thread)) {
result.GetOutputStream().Printf(
"Assembly language inspection UnwindPlan:\n");
- assembly_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP of_unwind_sp =
- func_unwinders_sp->GetObjectFileUnwindPlan(*target);
- if (of_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetObjectFileUnwindPlan(*target)) {
result.GetOutputStream().Printf("object file UnwindPlan:\n");
- of_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP of_unwind_augmented_sp =
- func_unwinders_sp->GetObjectFileAugmentedUnwindPlan(*target, *thread);
- if (of_unwind_augmented_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetObjectFileAugmentedUnwindPlan(*target,
+ *thread)) {
result.GetOutputStream().Printf("object file augmented UnwindPlan:\n");
- of_unwind_augmented_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP ehframe_sp =
- func_unwinders_sp->GetEHFrameUnwindPlan(*target);
- if (ehframe_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetEHFrameUnwindPlan(*target)) {
result.GetOutputStream().Printf("eh_frame UnwindPlan:\n");
- ehframe_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP ehframe_augmented_sp =
- func_unwinders_sp->GetEHFrameAugmentedUnwindPlan(*target, *thread);
- if (ehframe_augmented_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetEHFrameAugmentedUnwindPlan(*target,
+ *thread)) {
result.GetOutputStream().Printf("eh_frame augmented UnwindPlan:\n");
- ehframe_augmented_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetDebugFrameUnwindPlan(*target)) {
result.GetOutputStream().Printf("debug_frame UnwindPlan:\n");
plan_sp->Dump(result.GetOutputStream(), thread.get(),
@@ -3719,7 +3712,7 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetDebugFrameAugmentedUnwindPlan(*target,
*thread)) {
result.GetOutputStream().Printf("debug_frame augmented UnwindPlan:\n");
@@ -3728,36 +3721,35 @@ class CommandObjectTargetModulesShowUnwind : public CommandObjectParsed {
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP arm_unwind_sp =
- func_unwinders_sp->GetArmUnwindUnwindPlan(*target);
- if (arm_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetArmUnwindUnwindPlan(*target)) {
result.GetOutputStream().Printf("ARM.exidx unwind UnwindPlan:\n");
- arm_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (UnwindPlanSP symfile_plan_sp =
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
func_unwinders_sp->GetSymbolFileUnwindPlan(*thread)) {
result.GetOutputStream().Printf("Symbol file UnwindPlan:\n");
- symfile_plan_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- UnwindPlanSP compact_unwind_sp =
- func_unwinders_sp->GetCompactUnwindUnwindPlan(*target);
- if (compact_unwind_sp) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetCompactUnwindUnwindPlan(*target)) {
result.GetOutputStream().Printf("Compact unwind UnwindPlan:\n");
- compact_unwind_sp->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
- if (fast_unwind_plan) {
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ func_unwinders_sp->GetUnwindPlanFastUnwind(*target, *thread)) {
result.GetOutputStream().Printf("Fast UnwindPlan:\n");
- fast_unwind_plan->Dump(result.GetOutputStream(), thread.get(),
- LLDB_INVALID_ADDRESS);
+ plan_sp->Dump(result.GetOutputStream(), thread.get(),
+ LLDB_INVALID_ADDRESS);
result.GetOutputStream().Printf("\n");
}
diff --git a/lldb/source/Symbol/FuncUnwinders.cpp b/lldb/source/Symbol/FuncUnwinders.cpp
index a5ca7b094c949..a74029d8343c7 100644
--- a/lldb/source/Symbol/FuncUnwinders.cpp
+++ b/lldb/source/Symbol/FuncUnwinders.cpp
@@ -71,40 +71,47 @@ FuncUnwinders::FuncUnwinders(UnwindTable &unwind_table, Address addr,
FuncUnwinders::~FuncUnwinders() = default;
-UnwindPlanSP FuncUnwinders::GetUnwindPlanAtCallSite(Target &target,
- Thread &thread) {
+std::shared_ptr<const UnwindPlan>
+FuncUnwinders::GetUnwindPlanAtCallSite(Target &target, Thread &thread) {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
- if (UnwindPlanSP plan_sp = GetObjectFileUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetObjectFileUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetSymbolFileUnwindPlan(thread))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetSymbolFileUnwindPlan(thread))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetDebugFrameUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetDebugFrameUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetEHFrameUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp = GetEHFrameUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetCompactUnwindUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetCompactUnwindUnwindPlan(target))
return plan_sp;
- if (UnwindPlanSP plan_sp = GetArmUnwindUnwindPlan(target))
+ if (std::shared_ptr<const UnwindPlan> plan_sp =
+ GetArmUnwindUnwindPlan(target))
return plan_sp;
return nullptr;
}
-UnwindPlanSP FuncUnwinders::GetCompactUnwindUnwindPlan(Target &target) {
+std::shared_ptr<const UnwindPlan>
+FuncUnwinders::GetCompactUnwindUnwindPlan(Target &target) {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
if (m_unwind_plan_compact_unwind.size() > 0)
return m_unwind_plan_compact_unwind[0]; // FIXME support multiple compact
// unwind plans for one func
if (m_tried_unwind_plan_compact_unwind)
- return UnwindPlanSP();
+ return nullptr;
m_tried_unwind_plan_compact_unwind = true;
if (m_range.GetBaseAddress().IsValid()) {
Address current_pc(m_range.GetBaseAddress());
CompactUnwindInfo *compact_unwind = m_unwind_table.GetCompactUnwindInfo();
if (compact_unwind) {
- UnwindPlanSP unwind_plan_sp(new UnwindPlan(lldb::eRegisterKindGeneric));...
[truncated]
|
(I wasn't able to reproduce this on my end, but I'm fairly certain that 0509932 fixes at least one of the crashes) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wasn't able to reproduce the problem locally either, but I've got the same failing tests with the same stack traces by setting
const UnwindPlan::Row *active_row = (const UnwindPlan::Row *) 0x1;
I think it should work.
Good idea. Thanks for trying it out. |
This reverts commit 0949043, reapplying d7afafd (#133247).
The failure ought to be fixed by
0509932.