From a35912da9f44f7f3b885a4c1f567b1ac672978e1 Mon Sep 17 00:00:00 2001 From: Krasimir Georgiev Date: Thu, 18 Oct 2018 03:10:43 +0000 Subject: [PATCH] Revert "Return a named error in the result object of an expression with no result" This reverts commit r344647. This causes build failures with [-Werror, -Wswitch]. Some cases where the newly introduced enum value is not handled in particular are in: lldb/source/Expression/REPL.cpp:350 lldb/source/Interpreter/CommandInterpreter.cpp:1529 (maybe there could be more) As I don't understand lldb to make sure the likely trivial fixes are correct and also as they might need additional tests, leaving to the author to resolve. llvm-svn: 344722 --- lldb/include/lldb/Expression/UserExpression.h | 4 ++ lldb/include/lldb/lldb-enumerations.h | 3 +- .../test/expression_command/no-result/Makefile | 6 --- .../expression_command/no-result/TestNoResult.py | 45 ---------------------- .../test/expression_command/no-result/main.c | 9 ----- lldb/source/Commands/CommandObjectExpression.cpp | 2 +- lldb/source/Expression/ExpressionSourceCode.cpp | 2 +- lldb/source/Expression/REPL.cpp | 2 +- lldb/source/Expression/UserExpression.cpp | 9 +---- .../RenderScriptRuntime/RenderScriptRuntime.cpp | 2 +- 10 files changed, 11 insertions(+), 73 deletions(-) delete mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/no-result/Makefile delete mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/no-result/TestNoResult.py delete mode 100644 lldb/packages/Python/lldbsuite/test/expression_command/no-result/main.c diff --git a/lldb/include/lldb/Expression/UserExpression.h b/lldb/include/lldb/Expression/UserExpression.h index 3876a12..f734940 100644 --- a/lldb/include/lldb/Expression/UserExpression.h +++ b/lldb/include/lldb/Expression/UserExpression.h @@ -288,6 +288,10 @@ public: uint32_t line_offset = 0, std::string *fixed_expression = nullptr, lldb::ModuleSP *jit_module_sp_ptr = nullptr); + static const Status::ValueType kNoResult = + 0x1001; ///< ValueObject::GetError() returns this if there is no result + /// from the expression. + const char *GetFixedText() { if (m_fixed_text.empty()) return nullptr; diff --git a/lldb/include/lldb/lldb-enumerations.h b/lldb/include/lldb/lldb-enumerations.h index dc1877c..8a7cff4 100644 --- a/lldb/include/lldb/lldb-enumerations.h +++ b/lldb/include/lldb/lldb-enumerations.h @@ -254,8 +254,7 @@ enum ExpressionResults { eExpressionHitBreakpoint, eExpressionTimedOut, eExpressionResultUnavailable, - eExpressionStoppedForDebug, - eExpressionProducedNoResult + eExpressionStoppedForDebug }; enum SearchDepth { diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/Makefile b/lldb/packages/Python/lldbsuite/test/expression_command/no-result/Makefile deleted file mode 100644 index 50d4ab6..0000000 --- a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c -CFLAGS_EXTRAS += -std=c99 - -include $(LEVEL)/Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/TestNoResult.py b/lldb/packages/Python/lldbsuite/test/expression_command/no-result/TestNoResult.py deleted file mode 100644 index 363b30e..0000000 --- a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/TestNoResult.py +++ /dev/null @@ -1,45 +0,0 @@ -""" -Test that an expression that returns no result returns a sensible error. -""" - -from __future__ import print_function - - -import os -import time -import re -import lldb -import lldbsuite.test.lldbutil as lldbutil -from lldbsuite.test.lldbtest import * - - -class TestExprNoResult(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - # If your test case doesn't stress debug info, the - # set this to true. That way it won't be run once for - # each debug info format. - NO_DEBUG_INFO_TESTCASE = True - - def test_no_result(self): - """Run an expression that has no result, check the error.""" - self.build() - self.main_source_file = lldb.SBFileSpec("main.c") - self.sample_test() - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - def sample_test(self): - (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self, - "Set a breakpoint here", self.main_source_file) - - frame = thread.GetFrameAtIndex(0) - result = frame.EvaluateExpression("int $x = 10") - # No result expressions are considered to fail: - self.assertTrue(result.GetError().Fail(), "An expression with no result is a failure.") - # But the reason should be eExpressionProducedNoResult - self.assertEqual(result.GetError().GetError(), lldb.eExpressionProducedNoResult, - "But the right kind of failure") diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/main.c b/lldb/packages/Python/lldbsuite/test/expression_command/no-result/main.c deleted file mode 100644 index 8d4e0c4..0000000 --- a/lldb/packages/Python/lldbsuite/test/expression_command/no-result/main.c +++ /dev/null @@ -1,9 +0,0 @@ -#include - -int -main() -{ - int test_var = 10; - printf ("Set a breakpoint here: %d.\n", test_var); - return 0; -} diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp index f6e4007..ac440ef 100644 --- a/lldb/source/Commands/CommandObjectExpression.cpp +++ b/lldb/source/Commands/CommandObjectExpression.cpp @@ -487,7 +487,7 @@ bool CommandObjectExpression::EvaluateExpression(llvm::StringRef expr, } } else { if (result_valobj_sp->GetError().GetError() == - lldb::eExpressionProducedNoResult) { + UserExpression::kNoResult) { if (format != eFormatVoid && m_interpreter.GetDebugger().GetNotifyVoid()) { error_stream->PutCString("(void)\n"); diff --git a/lldb/source/Expression/ExpressionSourceCode.cpp b/lldb/source/Expression/ExpressionSourceCode.cpp index 2c8f77b..abbb332 100644 --- a/lldb/source/Expression/ExpressionSourceCode.cpp +++ b/lldb/source/Expression/ExpressionSourceCode.cpp @@ -256,7 +256,7 @@ bool ExpressionSourceCode::GetText(std::string &text, } ConstString object_name; - if (1 /* Language::LanguageIsCPlusPlus(frame->GetLanguage())*/) { + if (Language::LanguageIsCPlusPlus(frame->GetLanguage())) { if (target->GetInjectLocalVariables(&exe_ctx)) { lldb::VariableListSP var_list_sp = frame->GetInScopeVariableList(false, true); diff --git a/lldb/source/Expression/REPL.cpp b/lldb/source/Expression/REPL.cpp index c29004c..50d4a09 100644 --- a/lldb/source/Expression/REPL.cpp +++ b/lldb/source/Expression/REPL.cpp @@ -325,7 +325,7 @@ void REPL::IOHandlerInputComplete(IOHandler &io_handler, std::string &code) { if (result_valobj_sp->GetError().Success()) { handled |= PrintOneVariable(debugger, output_sp, result_valobj_sp); } else if (result_valobj_sp->GetError().GetError() == - lldb::eExpressionProducedNoResult) { + UserExpression::kNoResult) { if (format != lldb::eFormatVoid && debugger.GetNotifyVoid()) { error_sp->PutCString("(void)\n"); handled = true; diff --git a/lldb/source/Expression/UserExpression.cpp b/lldb/source/Expression/UserExpression.cpp index 1477bbd..34945fd 100644 --- a/lldb/source/Expression/UserExpression.cpp +++ b/lldb/source/Expression/UserExpression.cpp @@ -151,9 +151,6 @@ lldb::ExpressionResults UserExpression::Evaluate( ? UserExpression::eResultTypeId : UserExpression::eResultTypeAny; lldb::ExpressionResults execution_results = lldb::eExpressionSetupError; - - static const char *no_result_error = "Expression completed successfully " - "but had no result"; Target *target = exe_ctx.GetTargetPtr(); if (!target) { @@ -307,8 +304,7 @@ lldb::ExpressionResults UserExpression::Evaluate( error.SetExpressionError(lldb::eExpressionSetupError, "expression needed to run but couldn't"); } else if (execution_policy == eExecutionPolicyTopLevel) { - error.SetExpressionError(lldb::eExpressionProducedNoResult, - no_result_error); + error.SetError(UserExpression::kNoResult, lldb::eErrorTypeGeneric); return lldb::eExpressionCompleted; } else { if (options.InvokeCancelCallback(lldb::eExpressionEvaluationExecution)) { @@ -353,8 +349,7 @@ lldb::ExpressionResults UserExpression::Evaluate( log->Printf("== [UserExpression::Evaluate] Execution completed " "normally with no result =="); - error.SetExpressionError(lldb::eExpressionProducedNoResult, - no_result_error); + error.SetError(UserExpression::kNoResult, lldb::eErrorTypeGeneric); } } } diff --git a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp index 5e3ba24..5961e6a 100644 --- a/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp +++ b/lldb/source/Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.cpp @@ -1758,7 +1758,7 @@ bool RenderScriptRuntime::EvalRSExpression(const char *expr, if (!expr_result->GetError().Success()) { Status err = expr_result->GetError(); // Expression returned is void, so this is actually a success - if (err.GetError() == lldb::eExpressionProducedNoResult) { + if (err.GetError() == UserExpression::kNoResult) { if (log) log->Printf("%s - expression returned void.", __FUNCTION__); -- 2.7.4