https://github.com/AlexsanderDamaceno created https://github.com/llvm/llvm-project/pull/216624
In some cases, when a binary is compiled with certain optimization flags, a variable may not have a memory location. For example, a local variable may have its location represented in a register due to an optimization performed during compilation. Since the current message is generic: **"error: Couldn't apply expression side effects : couldn't write the new contents of var back into the variable"** it could not make a clear why the write operation was not done, so this patch add a note for cases where the lvalue does not have a memory location. Bug link: https://github.com/llvm/llvm-project/issues/130701 >From ca59ccf0a2534cd2485debeb415901e2ceced74e Mon Sep 17 00:00:00 2001 From: AlexsanderDamaceno <[email protected]> Date: Sun, 16 Aug 2026 23:26:09 -0300 Subject: [PATCH] [lldb] Improve diagnostic when a variable being assigned isn't an lvalue In some cases, when a binary is compiled with certain optimization flags, a variable may not have a memory location For example, a local variable may have its location represented in a register due to an optimization performed during compilation. Since the current message is generic: "error: Couldn't apply expression side effects : couldn't write the new contents of var back into the variable" it could not make a clear why the write opertion was not done, so this patch add a note for cases where the lvalue does not have a memory location. --- lldb/source/Expression/Materializer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lldb/source/Expression/Materializer.cpp b/lldb/source/Expression/Materializer.cpp index 51e95d3376f72..8a800d7b454ee 100644 --- a/lldb/source/Expression/Materializer.cpp +++ b/lldb/source/Expression/Materializer.cpp @@ -648,12 +648,21 @@ class EntityVariableBase : public Materializer::Entity { Status set_error; if (actually_write) { + if (!valobj_sp->CanSetValue()) { + err = Status::FromErrorStringWithFormatv( + "couldn't write the new contents of {0} back into the " + "variable\nnote: Left operand of assignment is not an lvalue", + GetName()); + return; + } + valobj_sp->SetData(data, set_error); if (!set_error.Success()) { err = Status::FromErrorStringWithFormatv( - "couldn't write the new contents of {0} back into the variable", - GetName()); + "couldn't write the new contents of {0} back into the " + "variable\nnote: {1}", + GetName(), set_error.AsCString()); return; } } _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
