Skip to content

Commit 67d67eb

Browse files
committed
Internal expressions shouldn't increment the result variable numbering.
There an option: EvaluateExpressionOptions::SetResultIsInternal to indicate whether the result number should be returned to the pool or not. It got broken when the PersistentExpressionState was refactored. This fixes the issue and provides a test of the behavior. Differential Revision: https://reviews.llvm.org/D76532
1 parent 5f5fb56 commit 67d67eb

File tree

12 files changed

+99
-37
lines changed

12 files changed

+99
-37
lines changed

lldb/include/lldb/Expression/ExpressionVariable.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -221,11 +221,7 @@ class PersistentExpressionState : public ExpressionVariableList {
221221
uint32_t addr_byte_size) = 0;
222222

223223
/// Return a new persistent variable name with the specified prefix.
224-
ConstString GetNextPersistentVariableName(Target &target,
225-
llvm::StringRef prefix);
226-
227-
virtual llvm::StringRef
228-
GetPersistentVariablePrefix(bool is_error = false) const = 0;
224+
virtual ConstString GetNextPersistentVariableName(bool is_error = false) = 0;
229225

230226
virtual void
231227
RemovePersistentVariable(lldb::ExpressionVariableSP variable) = 0;
@@ -237,6 +233,10 @@ class PersistentExpressionState : public ExpressionVariableList {
237233

238234
void RegisterExecutionUnit(lldb::IRExecutionUnitSP &execution_unit_sp);
239235

236+
protected:
237+
virtual llvm::StringRef
238+
GetPersistentVariablePrefix(bool is_error = false) const = 0;
239+
240240
private:
241241
LLVMCastKind m_kind;
242242

lldb/include/lldb/Target/Target.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,11 +1100,6 @@ class Target : public std::enable_shared_from_this<Target>,
11001100

11011101
lldb::ExpressionVariableSP GetPersistentVariable(ConstString name);
11021102

1103-
/// Return the next available number for numbered persistent variables.
1104-
unsigned GetNextPersistentVariableIndex() {
1105-
return m_next_persistent_variable_index++;
1106-
}
1107-
11081103
lldb::addr_t GetPersistentSymbol(ConstString name);
11091104

11101105
/// This method will return the address of the starting function for

lldb/source/Core/ValueObject.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3270,9 +3270,7 @@ ValueObjectSP ValueObject::Persist() {
32703270
if (!persistent_state)
32713271
return nullptr;
32723272

3273-
auto prefix = persistent_state->GetPersistentVariablePrefix();
3274-
ConstString name =
3275-
persistent_state->GetNextPersistentVariableName(*target_sp, prefix);
3273+
ConstString name = persistent_state->GetNextPersistentVariableName();
32763274

32773275
ValueObjectSP const_result_sp =
32783276
ValueObjectConstResult::Create(target_sp.get(), GetValue(), name);

lldb/source/Expression/ExpressionVariable.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,3 @@ void PersistentExpressionState::RegisterExecutionUnit(
7676
}
7777
}
7878
}
79-
80-
ConstString PersistentExpressionState::GetNextPersistentVariableName(
81-
Target &target, llvm::StringRef Prefix) {
82-
llvm::SmallString<64> name;
83-
{
84-
llvm::raw_svector_ostream os(name);
85-
os << Prefix << target.GetNextPersistentVariableIndex();
86-
}
87-
return ConstString(name);
88-
}

lldb/source/Expression/Materializer.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -881,11 +881,9 @@ class EntityResultVariable : public Materializer::Entity {
881881
return;
882882
}
883883

884-
ConstString name =
885-
m_delegate
886-
? m_delegate->GetName()
887-
: persistent_state->GetNextPersistentVariableName(
888-
*target_sp, persistent_state->GetPersistentVariablePrefix());
884+
ConstString name = m_delegate
885+
? m_delegate->GetName()
886+
: persistent_state->GetNextPersistentVariableName();
889887

890888
lldb::ExpressionVariableSP ret = persistent_state->CreatePersistentVariable(
891889
exe_scope, name, m_type, map.GetByteOrder(), map.GetAddressByteSize());

lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,3 +108,14 @@ ClangPersistentVariables::GetClangASTImporter() {
108108
}
109109
return m_ast_importer_sp;
110110
}
111+
112+
ConstString
113+
ClangPersistentVariables::GetNextPersistentVariableName(bool is_error) {
114+
llvm::SmallString<64> name;
115+
{
116+
llvm::raw_svector_ostream os(name);
117+
os << GetPersistentVariablePrefix(is_error)
118+
<< m_next_persistent_variable_id++;
119+
}
120+
return ConstString(name);
121+
}

lldb/source/Plugins/ExpressionParser/Clang/ClangPersistentVariables.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,7 @@ class ClangPersistentVariables : public PersistentExpressionState {
5151

5252
void RemovePersistentVariable(lldb::ExpressionVariableSP variable) override;
5353

54-
llvm::StringRef GetPersistentVariablePrefix(bool is_error) const override {
55-
return "$";
56-
}
54+
virtual ConstString GetNextPersistentVariableName(bool is_error = false);
5755

5856
/// Returns the next file name that should be used for user expressions.
5957
std::string GetNextExprFileName() {
@@ -80,6 +78,12 @@ class ClangPersistentVariables : public PersistentExpressionState {
8078
return m_hand_loaded_clang_modules;
8179
}
8280

81+
protected:
82+
llvm::StringRef
83+
GetPersistentVariablePrefix(bool is_error = false) const override {
84+
return "$";
85+
}
86+
8387
private:
8488
/// The counter used by GetNextExprFileName.
8589
uint32_t m_next_user_file_id = 0;

lldb/source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -924,9 +924,7 @@ void ClangUserExpression::ClangUserExpressionHelper::CommitPersistentDecls() {
924924
}
925925

926926
ConstString ClangUserExpression::ResultDelegate::GetName() {
927-
auto prefix = m_persistent_state->GetPersistentVariablePrefix();
928-
return m_persistent_state->GetNextPersistentVariableName(*m_target_sp,
929-
prefix);
927+
return m_persistent_state->GetNextPersistentVariableName(false);
930928
}
931929

932930
void ClangUserExpression::ResultDelegate::DidDematerialize(

lldb/source/Target/ABI.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,8 @@ ValueObjectSP ABI::GetReturnValueObject(Thread &thread, CompilerType &ast_type,
9797
if (!persistent_expression_state)
9898
return {};
9999

100-
auto prefix = persistent_expression_state->GetPersistentVariablePrefix();
101100
ConstString persistent_variable_name =
102-
persistent_expression_state->GetNextPersistentVariableName(target,
103-
prefix);
101+
persistent_expression_state->GetNextPersistentVariableName();
104102

105103
lldb::ValueObjectSP const_valobj_sp;
106104

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
C_SOURCES := main.c
2+
CFLAGS_EXTRAS := -std=c99
3+
4+
include Makefile.rules

0 commit comments

Comments
 (0)