diff options
| author | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2015-10-28 17:43:26 +0000 |
| commit | c432c8f856e0bd84de980a9d9bb2d31b06fa95b1 (patch) | |
| tree | 4efa528e074a6e2df782345e4cd97f5d85d038c4 /lldb/test/expression_command | |
| parent | a8a3bd210086b50242903ed95048fe5e53897878 (diff) | |
| download | bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.tar.gz bcm5719-llvm-c432c8f856e0bd84de980a9d9bb2d31b06fa95b1.zip | |
Move lldb/test to lldb/packages/Python/lldbsuite/test.
This is the conclusion of an effort to get LLDB's Python code
structured into a bona-fide Python package. This has a number
of benefits, but most notably the ability to more easily share
Python code between different but related pieces of LLDB's Python
infrastructure (for example, `scripts` can now share code with
`test`).
llvm-svn: 251532
Diffstat (limited to 'lldb/test/expression_command')
67 files changed, 0 insertions, 2579 deletions
diff --git a/lldb/test/expression_command/.categories b/lldb/test/expression_command/.categories deleted file mode 100644 index 897e40a99dd..00000000000 --- a/lldb/test/expression_command/.categories +++ /dev/null @@ -1 +0,0 @@ -expression diff --git a/lldb/test/expression_command/call-function/Makefile b/lldb/test/expression_command/call-function/Makefile deleted file mode 100644 index d4b82b3db27..00000000000 --- a/lldb/test/expression_command/call-function/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -# clang-3.5+ outputs FullDebugInfo by default for Darwin/FreeBSD -# targets. Other targets do not, which causes this test to fail. -# This flag enables FullDebugInfo for all targets. -ifneq (,$(findstring clang,$(CC))) - CFLAGS_EXTRAS += -fno-limit-debug-info -endif - -include $(LEVEL)/Makefile.rules - -clean:: - rm -rf $(wildcard *.o *.d *.dSYM) diff --git a/lldb/test/expression_command/call-function/TestCallStdStringFunction.py b/lldb/test/expression_command/call-function/TestCallStdStringFunction.py deleted file mode 100644 index 11caf627744..00000000000 --- a/lldb/test/expression_command/call-function/TestCallStdStringFunction.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -Test calling std::String member functions. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandCallFunctionTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.c. - self.line = line_number('main.cpp', - '// Please test these expressions while stopped at this line:') - - @expectedFailureIcc # llvm.org/pr14437, fails with ICC 13.1 - @expectedFailureFreeBSD('llvm.org/pr17807') # Fails on FreeBSD buildbot - @expectedFailureWindows("llvm.org/pr21765") - def test_with(self): - """Test calling std::String member function.""" - self.build() - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - # Some versions of GCC encode two locations for the 'return' statement in main.cpp - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - self.expect("print str", - substrs = ['Hello world']) - - # Calling this function now succeeds, but we follow the typedef return type through to - # const char *, and thus don't invoke the Summary formatter. - self.expect("print str.c_str()", - substrs = ['Hello world']) diff --git a/lldb/test/expression_command/call-function/TestCallStopAndContinue.py b/lldb/test/expression_command/call-function/TestCallStopAndContinue.py deleted file mode 100644 index 1cd2d83373f..00000000000 --- a/lldb/test/expression_command/call-function/TestCallStopAndContinue.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Test calling a function, stopping in the call, continue and gather the result on stop. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandCallStopContinueTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.c. - self.line = line_number('main.cpp', - '// Please test these expressions while stopped at this line:') - self.func_line = line_number ('main.cpp', - '{ 5, "five" }') - - @expectedFlakeyDarwin("llvm.org/pr20274") - @expectedFailureWindows("llvm.org/pr24489: Name lookup not working correctly on Windows") - def test(self): - """Test gathering result from interrupted function call.""" - self.build() - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - # Some versions of GCC encode two locations for the 'return' statement in main.cpp - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.func_line, num_expected_locations=-1, loc_exact=True) - - self.expect("expr -i false -- returnsFive()", error=True, - substrs = ['Execution was interrupted, reason: breakpoint']) - - self.runCmd("continue", "Continue completed") - self.expect ("thread list", - substrs = ['stop reason = User Expression thread plan', - r'Completed expression: (Five) $0 = (number = 5, name = "five")']) diff --git a/lldb/test/expression_command/call-function/TestCallUserDefinedFunction.py b/lldb/test/expression_command/call-function/TestCallUserDefinedFunction.py deleted file mode 100644 index 3b101285750..00000000000 --- a/lldb/test/expression_command/call-function/TestCallUserDefinedFunction.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Test calling user defined functions using expression evaluation. - -Note: - LLDBs current first choice of evaluating functions is using the IR interpreter, - which is only supported on Hexagon. Otherwise JIT is used for the evaluation. - -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandCallUserDefinedFunction(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.c. - self.line = line_number('main.cpp', - '// Please test these expressions while stopped at this line:') - @expectedFlakeyDsym("llvm.org/pr20274") - @expectedFailureWindows("llvm.org/pr24489: Name lookup not working correctly on Windows") - def test(self): - """Test return values of user defined function calls.""" - self.build() - - # Set breakpoint in main and run exe - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - # Test recursive function call. - self.expect("expr fib(5)", substrs = ['$0 = 5']) - - # Test function with more than one paramter - self.expect("expr add(4,8)", substrs = ['$1 = 12']) - - # Test nesting function calls in function paramters - self.expect("expr add(add(5,2),add(3,4))", substrs = ['$2 = 14']) - self.expect("expr add(add(5,2),fib(5))", substrs = ['$3 = 12']) - - # Test function with pointer paramter - self.expect("exp stringCompare((const char*) \"Hello world\")", substrs = ['$4 = true']) - self.expect("exp stringCompare((const char*) \"Hellworld\")", substrs = ['$5 = false']) diff --git a/lldb/test/expression_command/call-function/main.cpp b/lldb/test/expression_command/call-function/main.cpp deleted file mode 100644 index 9b494c712bc..00000000000 --- a/lldb/test/expression_command/call-function/main.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include <iostream> -#include <string> -#include <cstring> - -struct Five -{ - int number; - const char *name; -}; - -Five -returnsFive() -{ - Five my_five = { 5, "five" }; - return my_five; -} - -unsigned int -fib(unsigned int n) -{ - if (n < 2) - return n; - else - return fib(n - 1) + fib(n - 2); -} - -int -add(int a, int b) -{ - return a + b; -} - -bool -stringCompare(const char *str) -{ - if (strcmp( str, "Hello world" ) == 0) - return true; - else - return false; -} - -int main (int argc, char const *argv[]) -{ - std::string str = "Hello world"; - std::cout << str << std::endl; - std::cout << str.c_str() << std::endl; - Five main_five = returnsFive(); -#if 0 - print str - print str.c_str() -#endif - return 0; // Please test these expressions while stopped at this line: -} diff --git a/lldb/test/expression_command/call-restarts/Makefile b/lldb/test/expression_command/call-restarts/Makefile deleted file mode 100644 index 1c93ae1de43..00000000000 --- a/lldb/test/expression_command/call-restarts/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := lotta-signals.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/call-restarts/TestCallThatRestarts.py b/lldb/test/expression_command/call-restarts/TestCallThatRestarts.py deleted file mode 100644 index 38f0ab73db4..00000000000 --- a/lldb/test/expression_command/call-restarts/TestCallThatRestarts.py +++ /dev/null @@ -1,139 +0,0 @@ -""" -Test calling a function that hits a signal set to auto-restart, make sure the call completes. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandThatRestartsTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - self.main_source = "lotta-signals.c" - self.main_source_spec = lldb.SBFileSpec (self.main_source) - - @skipIfFreeBSD # llvm.org/pr19246: intermittent failure - @skipIfDarwin # llvm.org/pr19246: intermittent failure - @skipIfWindows # Test relies on signals, unsupported on Windows - def test(self): - """Test calling function that hits a signal and restarts.""" - self.build() - self.call_function() - - def check_after_call (self, num_sigchld): - after_call = self.sigchld_no.GetValueAsSigned(-1) - self.assertTrue (after_call - self.start_sigchld_no == num_sigchld, "Really got %d SIGCHLD signals through the call."%(num_sigchld)) - self.start_sigchld_no = after_call - - # Check that we are back where we were before: - frame = self.thread.GetFrameAtIndex(0) - self.assertTrue (self.orig_frame_pc == frame.GetPC(), "Restored the zeroth frame correctly") - - def call_function(self): - exe_name = "a.out" - exe = os.path.join(os.getcwd(), exe_name) - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - empty = lldb.SBFileSpec() - breakpoint = target.BreakpointCreateBySourceRegex('Stop here in main.',self.main_source_spec) - self.assertTrue(breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT) - - # Launch the process, and do not stop at the entry point. - process = target.LaunchSimple (None, None, self.get_process_working_directory()) - - self.assertTrue(process, PROCESS_IS_VALID) - - # Frame #0 should be at our breakpoint. - threads = lldbutil.get_threads_stopped_at_breakpoint (process, breakpoint) - - self.assertTrue(len(threads) == 1) - self.thread = threads[0] - - # Make sure the SIGCHLD behavior is pass/no-stop/no-notify: - return_obj = lldb.SBCommandReturnObject() - self.dbg.GetCommandInterpreter().HandleCommand("process handle SIGCHLD -s 0 -p 1 -n 0", return_obj) - self.assertTrue (return_obj.Succeeded() == True, "Set SIGCHLD to pass, no-stop") - - # The sigchld_no variable should be 0 at this point. - self.sigchld_no = target.FindFirstGlobalVariable("sigchld_no") - self.assertTrue (self.sigchld_no.IsValid(), "Got a value for sigchld_no") - - self.start_sigchld_no = self.sigchld_no.GetValueAsSigned (-1) - self.assertTrue (self.start_sigchld_no != -1, "Got an actual value for sigchld_no") - - options = lldb.SBExpressionOptions() - # processing 30 signals takes a while, increase the expression timeout a bit - options.SetTimeoutInMicroSeconds(3000000) # 3s - options.SetUnwindOnError(True) - - frame = self.thread.GetFrameAtIndex(0) - # Store away the PC to check that the functions unwind to the right place after calls - self.orig_frame_pc = frame.GetPC() - - num_sigchld = 30 - value = frame.EvaluateExpression ("call_me (%d)"%(num_sigchld), options) - self.assertTrue (value.IsValid()) - self.assertTrue (value.GetError().Success() == True) - self.assertTrue (value.GetValueAsSigned(-1) == num_sigchld) - - self.check_after_call(num_sigchld) - - # Okay, now try with a breakpoint in the called code in the case where - # we are ignoring breakpoint hits. - handler_bkpt = target.BreakpointCreateBySourceRegex("Got sigchld %d.", self.main_source_spec) - self.assertTrue (handler_bkpt.GetNumLocations() > 0) - options.SetIgnoreBreakpoints(True) - options.SetUnwindOnError(True) - - value = frame.EvaluateExpression("call_me (%d)"%(num_sigchld), options) - - self.assertTrue (value.IsValid() and value.GetError().Success() == True) - self.assertTrue (value.GetValueAsSigned(-1) == num_sigchld) - self.check_after_call(num_sigchld) - - # Now set the signal to print but not stop and make sure that calling still works: - self.dbg.GetCommandInterpreter().HandleCommand("process handle SIGCHLD -s 0 -p 1 -n 1", return_obj) - self.assertTrue (return_obj.Succeeded() == True, "Set SIGCHLD to pass, no-stop, notify") - - value = frame.EvaluateExpression("call_me (%d)"%(num_sigchld), options) - - self.assertTrue (value.IsValid() and value.GetError().Success() == True) - self.assertTrue (value.GetValueAsSigned(-1) == num_sigchld) - self.check_after_call(num_sigchld) - - # Now set this unwind on error to false, and make sure that we still complete the call: - options.SetUnwindOnError(False) - value = frame.EvaluateExpression("call_me (%d)"%(num_sigchld), options) - - self.assertTrue (value.IsValid() and value.GetError().Success() == True) - self.assertTrue (value.GetValueAsSigned(-1) == num_sigchld) - self.check_after_call(num_sigchld) - - # Okay, now set UnwindOnError to true, and then make the signal behavior to stop - # and see that now we do stop at the signal point: - - self.dbg.GetCommandInterpreter().HandleCommand("process handle SIGCHLD -s 1 -p 1 -n 1", return_obj) - self.assertTrue (return_obj.Succeeded() == True, "Set SIGCHLD to pass, stop, notify") - - value = frame.EvaluateExpression("call_me (%d)"%(num_sigchld), options) - self.assertTrue (value.IsValid() and value.GetError().Success() == False) - - # Set signal handling back to no-stop, and continue and we should end up back in out starting frame: - self.dbg.GetCommandInterpreter().HandleCommand("process handle SIGCHLD -s 0 -p 1 -n 1", return_obj) - self.assertTrue (return_obj.Succeeded() == True, "Set SIGCHLD to pass, no-stop, notify") - - error = process.Continue() - self.assertTrue (error.Success(), "Continuing after stopping for signal succeeds.") - - frame = self.thread.GetFrameAtIndex(0) - self.assertTrue (frame.GetPC() == self.orig_frame_pc, "Continuing returned to the place we started.") diff --git a/lldb/test/expression_command/call-restarts/lotta-signals.c b/lldb/test/expression_command/call-restarts/lotta-signals.c deleted file mode 100644 index f5c15b41e2d..00000000000 --- a/lldb/test/expression_command/call-restarts/lotta-signals.c +++ /dev/null @@ -1,61 +0,0 @@ -#include <unistd.h> -#include <stdio.h> -#include <signal.h> - -static int sigchld_no; -static int nosig_no; -static int weird_value; - -void -sigchld_handler (int signo) -{ - sigchld_no++; - printf ("Got sigchld %d.\n", sigchld_no); -} - -int -call_me (int some_value) -{ - int ret_val = 0; - int i; - for (i = 0; i < some_value; i++) - { - int result = 0; - if (i%2 == 0) - result = kill (getpid(), SIGCHLD); - else - sigchld_no++; - - usleep(1000); - if (result == 0) - ret_val++; - } - usleep (10000); - return ret_val; -} - -int -call_me_nosig (int some_value) -{ - int ret_val = 0; - int i; - for (i = 0; i < some_value; i++) - weird_value += i % 4; - - nosig_no += some_value; - return some_value; -} - -int -main () -{ - int ret_val; - signal (SIGCHLD, sigchld_handler); - - ret_val = call_me (2); // Stop here in main. - - ret_val = call_me_nosig (10); - - return 0; - -} diff --git a/lldb/test/expression_command/call-throws/Makefile b/lldb/test/expression_command/call-throws/Makefile deleted file mode 100644 index ac07b31c48c..00000000000 --- a/lldb/test/expression_command/call-throws/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -LEVEL = ../../make - -OBJC_SOURCES := call-throws.m - -include $(LEVEL)/Makefile.rules -LDFLAGS += -framework Foundation diff --git a/lldb/test/expression_command/call-throws/TestCallThatThrows.py b/lldb/test/expression_command/call-throws/TestCallThatThrows.py deleted file mode 100644 index 874c9f7da07..00000000000 --- a/lldb/test/expression_command/call-throws/TestCallThatThrows.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -Test calling a function that throws an ObjC exception, make sure that it doesn't propagate the exception. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandWithThrowTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - self.main_source = "call-throws.m" - self.main_source_spec = lldb.SBFileSpec (self.main_source) - - @skipUnlessDarwin - def test(self): - """Test calling a function that throws and ObjC exception.""" - self.build() - self.call_function() - - def check_after_call (self): - # Check that we are back where we were before: - frame = self.thread.GetFrameAtIndex(0) - self.assertTrue (self.orig_frame_pc == frame.GetPC(), "Restored the zeroth frame correctly") - - - def call_function(self): - """Test calling function that throws.""" - exe_name = "a.out" - exe = os.path.join(os.getcwd(), exe_name) - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - breakpoint = target.BreakpointCreateBySourceRegex('I am about to throw.',self.main_source_spec) - self.assertTrue(breakpoint.GetNumLocations() > 0, VALID_BREAKPOINT) - - # Launch the process, and do not stop at the entry point. - process = target.LaunchSimple (None, None, self.get_process_working_directory()) - - self.assertTrue(process, PROCESS_IS_VALID) - - # Frame #0 should be at our breakpoint. - threads = lldbutil.get_threads_stopped_at_breakpoint (process, breakpoint) - - self.assertTrue(len(threads) == 1) - self.thread = threads[0] - - options = lldb.SBExpressionOptions() - options.SetUnwindOnError(True) - - frame = self.thread.GetFrameAtIndex(0) - # Store away the PC to check that the functions unwind to the right place after calls - self.orig_frame_pc = frame.GetPC() - - value = frame.EvaluateExpression ("[my_class callMeIThrow]", options) - self.assertTrue (value.IsValid()) - self.assertTrue (value.GetError().Success() == False) - - self.check_after_call() - - # Okay, now try with a breakpoint in the called code in the case where - # we are ignoring breakpoint hits. - handler_bkpt = target.BreakpointCreateBySourceRegex("I felt like it", self.main_source_spec) - self.assertTrue (handler_bkpt.GetNumLocations() > 0) - options.SetIgnoreBreakpoints(True) - options.SetUnwindOnError(True) - - value = frame.EvaluateExpression ("[my_class callMeIThrow]", options) - - self.assertTrue (value.IsValid() and value.GetError().Success() == False) - self.check_after_call() - - # Now set the ObjC language breakpoint and make sure that doesn't interfere with the call: - exception_bkpt = target.BreakpointCreateForException (lldb.eLanguageTypeObjC, False, True) - self.assertTrue(exception_bkpt.GetNumLocations() > 0) - - options.SetIgnoreBreakpoints(True) - options.SetUnwindOnError(True) - - value = frame.EvaluateExpression ("[my_class callMeIThrow]", options) - - self.assertTrue (value.IsValid() and value.GetError().Success() == False) - self.check_after_call() - - - # Now turn off exception trapping, and call a function that catches the exceptions, - # and make sure the function actually completes, and we get the right value: - options.SetTrapExceptions(False) - value = frame.EvaluateExpression ("[my_class iCatchMyself]", options) - self.assertTrue (value.IsValid()) - self.assertTrue (value.GetError().Success() == True) - self.assertTrue (value.GetValueAsUnsigned() == 57) - self.check_after_call() - options.SetTrapExceptions(True) - - # Now set this unwind on error to false, and make sure that we stop where the exception was thrown - options.SetUnwindOnError(False) - value = frame.EvaluateExpression ("[my_class callMeIThrow]", options) - - - self.assertTrue (value.IsValid() and value.GetError().Success() == False) - self.check_after_call() diff --git a/lldb/test/expression_command/call-throws/call-throws.m b/lldb/test/expression_command/call-throws/call-throws.m deleted file mode 100644 index a184718be7d..00000000000 --- a/lldb/test/expression_command/call-throws/call-throws.m +++ /dev/null @@ -1,47 +0,0 @@ -#import <Foundation/Foundation.h> - -@interface MyClass : NSObject -{ -} -- (int) callMeIThrow; -- (int) iCatchMyself; -@end - -@implementation MyClass -- (int) callMeIThrow -{ - NSException *e = [NSException - exceptionWithName:@"JustForTheHeckOfItException" - reason:@"I felt like it" - userInfo:nil]; - @throw e; - return 56; -} - -- (int) iCatchMyself -{ - int return_value = 55; - @try - { - return_value = [self callMeIThrow]; - } - @catch (NSException *e) - { - return_value = 57; - } - return return_value; -} -@end - -int -main () -{ - int return_value; - MyClass *my_class = [[MyClass alloc] init]; - - NSLog (@"I am about to throw."); - - return_value = [my_class iCatchMyself]; - - return return_value; -} diff --git a/lldb/test/expression_command/char/Makefile b/lldb/test/expression_command/char/Makefile deleted file mode 100644 index 8a7102e347a..00000000000 --- a/lldb/test/expression_command/char/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/char/TestExprsChar.py b/lldb/test/expression_command/char/TestExprsChar.py deleted file mode 100644 index cb57fdb1b7b..00000000000 --- a/lldb/test/expression_command/char/TestExprsChar.py +++ /dev/null @@ -1,69 +0,0 @@ -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCharTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - self.main_source = "main.cpp" - self.main_source_spec = lldb.SBFileSpec (self.main_source) - self.exe = os.path.join(os.getcwd(), "a.out") - - def do_test(self, dictionary=None): - """These basic expression commands should work as expected.""" - self.build(dictionary = dictionary) - - target = self.dbg.CreateTarget(self.exe) - self.assertTrue(target) - - breakpoint = target.BreakpointCreateBySourceRegex('// Break here', self.main_source_spec) - self.assertTrue(breakpoint) - - # Launch the process, and do not stop at the entry point. - process = target.LaunchSimple(None, None, self.get_process_working_directory()) - self.assertTrue(process) - - threads = lldbutil.get_threads_stopped_at_breakpoint(process, breakpoint) - self.assertEqual(len(threads), 1) - - frame = threads[0].GetFrameAtIndex(0) - - value = frame.EvaluateExpression("foo(c)") - self.assertTrue(value.IsValid()) - self.assertTrue(value.GetError().Success()) - self.assertEqual(value.GetValueAsSigned(0), 1) - - value = frame.EvaluateExpression("foo(sc)") - self.assertTrue(value.IsValid()) - self.assertTrue(value.GetError().Success()) - self.assertEqual(value.GetValueAsSigned(0), 2) - - value = frame.EvaluateExpression("foo(uc)") - self.assertTrue(value.IsValid()) - self.assertTrue(value.GetError().Success()) - self.assertEqual(value.GetValueAsSigned(0), 3) - - @expectedFailureWindows("llvm.org/pr21765") - def test_default_char(self): - self.do_test() - - @expectedFailureArch("arm", "llvm.org/pr23069") - @expectedFailureArch("aarch64", "llvm.org/pr23069") - @expectedFailureWindows("llvm.org/pr21765") - def test_signed_char(self): - self.do_test(dictionary={'CFLAGS_EXTRAS': '-fsigned-char'}) - - @expectedFailurei386("llvm.org/pr23069") - @expectedFailurex86_64("llvm.org/pr23069") - @expectedFailureWindows("llvm.org/pr21765") - def test_unsigned_char(self): - self.do_test(dictionary={'CFLAGS_EXTRAS': '-funsigned-char'}) diff --git a/lldb/test/expression_command/char/main.cpp b/lldb/test/expression_command/char/main.cpp deleted file mode 100644 index c8b0beb1b35..00000000000 --- a/lldb/test/expression_command/char/main.cpp +++ /dev/null @@ -1,10 +0,0 @@ -int foo(char c) { return 1; } -int foo(signed char c) { return 2; } -int foo(unsigned char c) { return 3; } - -int main() { - char c = 0; - signed char sc = 0; - unsigned char uc = 0; - return 0; // Break here -} diff --git a/lldb/test/expression_command/expr-in-syscall/Makefile b/lldb/test/expression_command/expr-in-syscall/Makefile deleted file mode 100644 index 8a7102e347a..00000000000 --- a/lldb/test/expression_command/expr-in-syscall/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/expr-in-syscall/TestExpressionInSyscall.py b/lldb/test/expression_command/expr-in-syscall/TestExpressionInSyscall.py deleted file mode 100644 index f115f13f773..00000000000 --- a/lldb/test/expression_command/expr-in-syscall/TestExpressionInSyscall.py +++ /dev/null @@ -1,82 +0,0 @@ -"""Test that we are able to evaluate expressions when the inferior is blocked in a syscall""" - -from __future__ import print_function - -import use_lldb_suite - -import os -import lldb -from lldbtest import * -import lldbutil - - -class ExprSyscallTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @expectedFailureWindows("llvm.org/pr21765") # Also getpid() is not a function on Windows anyway - def test_setpgid(self): - self.build() - self.expr_syscall() - - def expr_syscall(self): - exe = os.path.join(os.getcwd(), 'a.out') - - # Create a target by the debugger. - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - listener = lldb.SBListener("my listener") - - # launch the inferior and don't wait for it to stop - self.dbg.SetAsync(True) - error = lldb.SBError() - process = target.Launch (listener, - None, # argv - None, # envp - None, # stdin_path - None, # stdout_path - None, # stderr_path - None, # working directory - 0, # launch flags - False, # Stop at entry - error) # error - - self.assertTrue(process and process.IsValid(), PROCESS_IS_VALID) - - event = lldb.SBEvent() - - # Give the child enough time to reach the syscall, - # while clearing out all the pending events. - # The last WaitForEvent call will time out after 2 seconds. - while listener.WaitForEvent(2, event): - pass - - # now the process should be running (blocked in the syscall) - self.assertEqual(process.GetState(), lldb.eStateRunning, "Process is running") - - # send the process a signal - process.SendAsyncInterrupt() - while listener.WaitForEvent(2, event): - pass - - # as a result the process should stop - # in all likelihood we have stopped in the middle of the sleep() syscall - self.assertEqual(process.GetState(), lldb.eStateStopped, PROCESS_STOPPED) - thread = process.GetSelectedThread() - - # try evaluating a couple of expressions in this state - self.expect("expr release_flag = 1", substrs = [" = 1"]) - self.expect("print (int)getpid()", substrs = [str(process.GetProcessID())]) - - # and run the process to completion - process.Continue() - - # process all events - while listener.WaitForEvent(10, event): - new_state = lldb.SBProcess.GetStateFromEvent(event) - if new_state == lldb.eStateExited: - break - - self.assertEqual(process.GetState(), lldb.eStateExited) - self.assertEqual(process.GetExitStatus(), 0) diff --git a/lldb/test/expression_command/expr-in-syscall/main.cpp b/lldb/test/expression_command/expr-in-syscall/main.cpp deleted file mode 100644 index 743b69434d5..00000000000 --- a/lldb/test/expression_command/expr-in-syscall/main.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include <chrono> -#include <thread> - -volatile int release_flag = 0; - -int main(int argc, char const *argv[]) -{ - while (! release_flag) // Wait for debugger to attach - std::this_thread::sleep_for(std::chrono::seconds(3)); - - return 0; -} diff --git a/lldb/test/expression_command/formatters/Makefile b/lldb/test/expression_command/formatters/Makefile deleted file mode 100644 index 8a7102e347a..00000000000 --- a/lldb/test/expression_command/formatters/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/formatters/TestFormatters.py b/lldb/test/expression_command/formatters/TestFormatters.py deleted file mode 100644 index 6fb6cd8bcd7..00000000000 --- a/lldb/test/expression_command/formatters/TestFormatters.py +++ /dev/null @@ -1,167 +0,0 @@ -""" -Test using LLDB data formatters with frozen objects coming from the expression parser. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprFormattersTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.cpp. - self.line = line_number('main.cpp', - '// Stop here') - - @skipIfFreeBSD # llvm.org/pr24691 skipping to avoid crashing the test runner - @expectedFailureFreeBSD('llvm.org/pr19011') # Newer Clang omits C1 complete object constructor - @expectedFailureFreeBSD('llvm.org/pr24691') # we hit an assertion in clang - @expectedFailureWindows("llvm.org/pr21765") - @skipIfTargetAndroid() # skipping to avoid crashing the test runner - @expectedFailureAndroid('llvm.org/pr24691') # we hit an assertion in clang - def test(self): - """Test expr + formatters for good interoperability.""" - self.build() - - # This is the function to remove the custom formats in order to have a - # clean slate for the next test case. - def cleanup(): - self.runCmd('type summary clear', check=False) - self.runCmd('type synthetic clear', check=False) - - # Execute the cleanup function during test case tear down. - self.addTearDownHook(cleanup) - - """Test expr + formatters for good interoperability.""" - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - self.runCmd("command script import formatters.py") - self.runCmd("command script import foosynth.py") - - if self.TraceOn(): - self.runCmd("frame variable foo1 --show-types") - self.runCmd("frame variable foo1.b --show-types") - self.runCmd("frame variable foo1.b.b_ref --show-types") - - self.expect("expression --show-types -- *(new foo(47))", - substrs = ['(int) a = 47', '(bar) b = {', '(int) i = 94', '(baz) b = {', '(int) k = 99']) - - self.runCmd("type summary add -F formatters.foo_SummaryProvider foo") - - self.expect("expression new int(12)", - substrs = ['(int *) $', ' = 0x']) - - self.runCmd("type summary add -s \"${var%pointer} -> ${*var%decimal}\" \"int *\"") - - self.expect("expression new int(12)", - substrs = ['(int *) $', '= 0x', ' -> 12']) - - self.expect("expression foo1.a_ptr", - substrs = ['(int *) $', '= 0x', ' -> 13']) - - self.expect("expression foo1", - substrs = ['(foo) $', ' a = 12', 'a_ptr = ', ' -> 13','i = 24','i_ptr = ', ' -> 25']) - - self.expect("expression --ptr-depth=1 -- new foo(47)", - substrs = ['(foo *) $', 'a = 47','a_ptr = ', ' -> 48','i = 94','i_ptr = ', ' -> 95']) - - self.expect("expression foo2", - substrs = ['(foo) $', 'a = 121','a_ptr = ', ' -> 122','i = 242','i_ptr = ', ' -> 243']) - - object_name = self.res.GetOutput() - object_name = object_name[7:] - object_name = object_name[0:object_name.find(' =')] - - self.expect("frame variable foo2", - substrs = ['(foo)', 'foo2', 'a = 121','a_ptr = ', ' -> 122','i = 242','i_ptr = ', ' -> 243']) - - self.expect("expression $" + object_name, - substrs = ['(foo) $', 'a = 121','a_ptr = ', ' -> 122','i = 242','i_ptr = ', ' -> 243', 'h = 245','k = 247']) - - self.runCmd("type summary delete foo") - self.runCmd("type synthetic add --python-class foosynth.FooSyntheticProvider foo") - - self.expect("expression --show-types -- $" + object_name, - substrs = ['(foo) $', ' = {', '(int) *i_ptr = 243']) - - self.runCmd("n") - self.runCmd("n") - - self.runCmd("type synthetic delete foo") - self.runCmd("type summary add -F formatters.foo_SummaryProvider foo") - - self.expect("expression foo2", - substrs = ['(foo) $', 'a = 7777','a_ptr = ', ' -> 122','i = 242','i_ptr = ', ' -> 8888']) - - self.expect("expression $" + object_name + '.a', - substrs = ['7777']) - - self.expect("expression *$" + object_name + '.b.i_ptr', - substrs = ['8888']) - - self.expect("expression $" + object_name, - substrs = ['(foo) $', 'a = 121', 'a_ptr = ', ' -> 122', 'i = 242', 'i_ptr = ', ' -> 8888', 'h = 245','k = 247']) - - self.runCmd("type summary delete foo") - self.runCmd("type synthetic add --python-class foosynth.FooSyntheticProvider foo") - - self.expect("expression --show-types -- $" + object_name, - substrs = ['(foo) $', ' = {', '(int) *i_ptr = 8888']) - - self.runCmd("n") - - self.runCmd("type synthetic delete foo") - self.runCmd("type summary add -F formatters.foo_SummaryProvider foo") - - self.expect("expression $" + object_name, - substrs = ['(foo) $', 'a = 121','a_ptr = ', ' -> 122','i = 242', 'i_ptr = ', ' -> 8888','k = 247']) - - process = self.dbg.GetSelectedTarget().GetProcess() - thread = process.GetThreadAtIndex(0) - frame = thread.GetSelectedFrame() - - frozen = frame.EvaluateExpression("$" + object_name + ".a_ptr") - - a_data = frozen.GetPointeeData() - - error = lldb.SBError() - self.assertTrue(a_data.GetUnsignedInt32(error, 0) == 122, '*a_ptr = 122') - - self.runCmd("n");self.runCmd("n");self.runCmd("n"); - - self.expect("frame variable numbers", - substrs = ['1','2','3','4','5']) - - self.expect("expression numbers", - substrs = ['1','2','3','4','5']) - - frozen = frame.EvaluateExpression("&numbers") - - a_data = frozen.GetPointeeData(0, 1) - - self.assertTrue(a_data.GetUnsignedInt32(error, 0) == 1, 'numbers[0] == 1') - self.assertTrue(a_data.GetUnsignedInt32(error, 4) == 2, 'numbers[1] == 2') - self.assertTrue(a_data.GetUnsignedInt32(error, 8) == 3, 'numbers[2] == 3') - self.assertTrue(a_data.GetUnsignedInt32(error, 12) == 4, 'numbers[3] == 4') - self.assertTrue(a_data.GetUnsignedInt32(error, 16) == 5, 'numbers[4] == 5') - - frozen = frame.EvaluateExpression("numbers") - - a_data = frozen.GetData() - - self.assertTrue(a_data.GetUnsignedInt32(error, 0) == 1, 'numbers[0] == 1') - self.assertTrue(a_data.GetUnsignedInt32(error, 4) == 2, 'numbers[1] == 2') - self.assertTrue(a_data.GetUnsignedInt32(error, 8) == 3, 'numbers[2] == 3') - self.assertTrue(a_data.GetUnsignedInt32(error, 12) == 4, 'numbers[3] == 4') - self.assertTrue(a_data.GetUnsignedInt32(error, 16) == 5, 'numbers[4] == 5') diff --git a/lldb/test/expression_command/formatters/foosynth.py b/lldb/test/expression_command/formatters/foosynth.py deleted file mode 100644 index 91c4d4a84c6..00000000000 --- a/lldb/test/expression_command/formatters/foosynth.py +++ /dev/null @@ -1,29 +0,0 @@ -import lldb - -class FooSyntheticProvider: - def __init__(self,valobj,dict): - self.valobj = valobj; - self.update(); - - def update(self): - self.adjust_for_architecture() - - def num_children(self): - return 1; - - def get_child_at_index(self,index): - if index != 0: - return None; - return self.i_ptr.Dereference(); - - def get_child_index(self,name): - if name == "*i_ptr": - return 0; - return None; - - def adjust_for_architecture(self): - self.lp64 = (self.valobj.GetTarget().GetProcess().GetAddressByteSize() == 8) - self.is_little = (self.valobj.GetTarget().GetProcess().GetByteOrder() == lldb.eByteOrderLittle) - self.pointer_size = self.valobj.GetTarget().GetProcess().GetAddressByteSize() - self.bar = self.valobj.GetChildMemberWithName('b'); - self.i_ptr = self.bar.GetChildMemberWithName('i_ptr');
\ No newline at end of file diff --git a/lldb/test/expression_command/formatters/formatters.py b/lldb/test/expression_command/formatters/formatters.py deleted file mode 100644 index ce922a8f911..00000000000 --- a/lldb/test/expression_command/formatters/formatters.py +++ /dev/null @@ -1,17 +0,0 @@ -def foo_SummaryProvider (valobj,dict): - a = valobj.GetChildMemberWithName('a'); - a_ptr = valobj.GetChildMemberWithName('a_ptr'); - bar = valobj.GetChildMemberWithName('b'); - i = bar.GetChildMemberWithName('i'); - i_ptr = bar.GetChildMemberWithName('i_ptr'); - b_ref = bar.GetChildMemberWithName('b_ref'); - b_ref_ptr = b_ref.AddressOf() - b_ref = b_ref_ptr.Dereference() - h = b_ref.GetChildMemberWithName('h'); - k = b_ref.GetChildMemberWithName('k'); - return 'a = ' + str(a.GetValueAsUnsigned(0)) + ', a_ptr = ' + \ - str(a_ptr.GetValueAsUnsigned(0)) + ' -> ' + str(a_ptr.Dereference().GetValueAsUnsigned(0)) + \ - ', i = ' + str(i.GetValueAsUnsigned(0)) + \ - ', i_ptr = ' + str(i_ptr.GetValueAsUnsigned(0)) + ' -> ' + str(i_ptr.Dereference().GetValueAsUnsigned(0)) + \ - ', b_ref = ' + str(b_ref.GetValueAsUnsigned(0)) + \ - ', h = ' + str(h.GetValueAsUnsigned(0)) + ' , k = ' + str(k.GetValueAsUnsigned(0))
\ No newline at end of file diff --git a/lldb/test/expression_command/formatters/main.cpp b/lldb/test/expression_command/formatters/main.cpp deleted file mode 100644 index 4c3b180f370..00000000000 --- a/lldb/test/expression_command/formatters/main.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include <iostream> -#include <string> - -struct baz - { - int h; - int k; - baz(int a, int b) : h(a), k(b) {} - }; - -struct bar - { - int i; - int* i_ptr; - baz b; - baz& b_ref; - bar(int x) : i(x),i_ptr(new int(x+1)),b(i+3,i+5),b_ref(b) {} - }; - -struct foo - { - int a; - int* a_ptr; - bar b; - - foo(int x) : a(x), - a_ptr(new int(x+1)), - b(2*x) {} - - }; - -int main(int argc, char** argv) -{ - foo foo1(12); - foo foo2(121); - - foo2.a = 7777; // Stop here - *(foo2.b.i_ptr) = 8888; - foo2.b.b.h = 9999; - - *(foo1.a_ptr) = 9999; - foo1.b.i = 9999; - - int numbers[5] = {1,2,3,4,5}; - - return 0; - -}
\ No newline at end of file diff --git a/lldb/test/expression_command/issue_11588/Makefile b/lldb/test/expression_command/issue_11588/Makefile deleted file mode 100644 index 8a7102e347a..00000000000 --- a/lldb/test/expression_command/issue_11588/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/issue_11588/Test11588.py b/lldb/test/expression_command/issue_11588/Test11588.py deleted file mode 100644 index 5941cb50946..00000000000 --- a/lldb/test/expression_command/issue_11588/Test11588.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Test the solution to issue 11581. -valobj.AddressOf() returns None when an address is -expected in a SyntheticChildrenProvider -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -import lldbutil -from lldbtest import * - -class Issue11581TestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @expectedFailureWindows("llvm.org/pr24778") - def test_11581_commands(self): - # This is the function to remove the custom commands in order to have a - # clean slate for the next test case. - def cleanup(): - self.runCmd('type synthetic clear', check=False) - - - # Execute the cleanup function during test case tear down. - self.addTearDownHook(cleanup) - - """valobj.AddressOf() should return correct values.""" - self.build() - - exe = os.path.join(os.getcwd(), "a.out") - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - breakpoint = target.BreakpointCreateBySourceRegex('Set breakpoint here.',lldb.SBFileSpec ("main.cpp", False)) - - process = target.LaunchSimple (None, None, self.get_process_working_directory()) - self.assertTrue (process, "Created a process.") - self.assertTrue (process.GetState() == lldb.eStateStopped, "Stopped it too.") - - thread_list = lldbutil.get_threads_stopped_at_breakpoint (process, breakpoint) - self.assertTrue (len(thread_list) == 1) - thread = thread_list[0] - - self.runCmd("command script import --allow-reload s11588.py") - self.runCmd("type synthetic add --python-class s11588.Issue11581SyntheticProvider StgClosure") - - self.expect("expr --show-types -- *((StgClosure*)(r14-1))", - substrs = ["(StgClosure) $", - "(StgClosure *) &$","0x", - "addr = ", - "load_address = "]) - - # register r14 is an x86_64 extension let's skip this part of the test - # if we are on a different architecture - if self.getArchitecture() == 'x86_64': - target = lldb.debugger.GetSelectedTarget() - process = target.GetProcess() - frame = process.GetSelectedThread().GetSelectedFrame() - pointer = frame.FindVariable("r14") - addr = pointer.GetValueAsUnsigned(0) - self.assertTrue(addr != 0, "could not read pointer to StgClosure") - addr = addr - 1 - self.runCmd("register write r14 %d" % addr) - self.expect("register read r14", - substrs = ["0x",hex(addr)[2:].rstrip("L")]) # Remove trailing 'L' if it exists - self.expect("expr --show-types -- *(StgClosure*)$r14", - substrs = ["(StgClosure) $", - "(StgClosure *) &$","0x", - "addr = ", - "load_address = ", - hex(addr)[2:].rstrip("L"), - str(addr)]) diff --git a/lldb/test/expression_command/issue_11588/main.cpp b/lldb/test/expression_command/issue_11588/main.cpp deleted file mode 100644 index 4f9ea3abf18..00000000000 --- a/lldb/test/expression_command/issue_11588/main.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// 11588.cpp -// - -#include <iostream> - -class StgInfoTable {}; - -class StgHeader -{ -private: - StgInfoTable* info; -public: - StgHeader() - { - info = new StgInfoTable(); - } - ~StgHeader() - { - delete info; - } -}; - -class StgClosure -{ -private: - StgHeader header; - StgClosure* payload[1]; -public: - StgClosure(bool make_payload = true) - { - if (make_payload) - payload[0] = new StgClosure(false); - else - payload[0] = NULL; - } - ~StgClosure() - { - if (payload[0]) - delete payload[0]; - } -}; - -typedef unsigned long long int ptr_type; - -int main() -{ - StgClosure* r14_ = new StgClosure(); - r14_ = (StgClosure*)(((ptr_type)r14_ | 0x01)); // set the LSB to 1 for tagging - ptr_type r14 = (ptr_type)r14_; - int x = 0; - x = 3; - return (x-1); // Set breakpoint here. -} diff --git a/lldb/test/expression_command/issue_11588/s11588.py b/lldb/test/expression_command/issue_11588/s11588.py deleted file mode 100644 index 01bb09a1b0d..00000000000 --- a/lldb/test/expression_command/issue_11588/s11588.py +++ /dev/null @@ -1,26 +0,0 @@ -class Issue11581SyntheticProvider(object): - def __init__(self, valobj, dict): - self.valobj = valobj - self.addrOf = valobj.AddressOf() - self.addr = valobj.GetAddress() - self.load_address = valobj.GetLoadAddress() - - def num_children(self): - return 3; - - def get_child_at_index(self, index): - if index == 0: - return self.addrOf - if index == 1: - return self.valobj.CreateValueFromExpression("addr", str(self.addr)) - if index == 2: - return self.valobj.CreateValueFromExpression("load_address", str(self.load_address)) - - def get_child_index(self, name): - if name == "addrOf": - return 0 - if name == "addr": - return 1 - if name == "load_address": - return 2 - diff --git a/lldb/test/expression_command/options/Makefile b/lldb/test/expression_command/options/Makefile deleted file mode 100644 index 81ae6f6f16e..00000000000 --- a/lldb/test/expression_command/options/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp foo.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/options/TestExprOptions.py b/lldb/test/expression_command/options/TestExprOptions.py deleted file mode 100644 index 2c0eb6551ea..00000000000 --- a/lldb/test/expression_command/options/TestExprOptions.py +++ /dev/null @@ -1,76 +0,0 @@ -""" -Test expression command options. - -Test cases: - -o test_expr_options: - Test expression command options. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -import lldbutil -from lldbtest import * - -class ExprOptionsTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - self.main_source = "main.cpp" - self.main_source_spec = lldb.SBFileSpec (self.main_source) - self.line = line_number('main.cpp', '// breakpoint_in_main') - self.exe = os.path.join(os.getcwd(), "a.out") - - def test_expr_options(self): - """These expression command options should work as expected.""" - self.build() - - # Set debugger into synchronous mode - self.dbg.SetAsync(False) - - # Create a target by the debugger. - target = self.dbg.CreateTarget(self.exe) - self.assertTrue(target, VALID_TARGET) - - # Set breakpoints inside main. - breakpoint = target.BreakpointCreateBySourceRegex('// breakpoint_in_main', self.main_source_spec) - self.assertTrue(breakpoint) - - # Now launch the process, and do not stop at entry point. - process = target.LaunchSimple(None, None, self.get_process_working_directory()) - self.assertTrue(process, PROCESS_IS_VALID) - - threads = lldbutil.get_threads_stopped_at_breakpoint(process, breakpoint) - self.assertEqual(len(threads), 1) - - frame = threads[0].GetFrameAtIndex(0) - options = lldb.SBExpressionOptions() - - # test --language on C++ expression using the SB API's - - # Make sure we can evaluate 'ns::func'. - val = frame.EvaluateExpression('foo != nullptr') - self.assertTrue(val.IsValid()) - self.assertTrue(val.GetError().Success()) - self.DebugSBValue(val) - - # Make sure it still works if language is set to C++11: - options.SetLanguage(lldb.eLanguageTypeC_plus_plus_11) - val = frame.EvaluateExpression('foo != nullptr', options) - self.assertTrue(val.IsValid()) - self.assertTrue(val.GetError().Success()) - self.DebugSBValue(val) - - # Make sure it fails if language is set to C: - options.SetLanguage(lldb.eLanguageTypeC) - val = frame.EvaluateExpression('foo != nullptr', options) - self.assertTrue(val.IsValid()) - self.assertFalse(val.GetError().Success()) diff --git a/lldb/test/expression_command/options/foo.cpp b/lldb/test/expression_command/options/foo.cpp deleted file mode 100644 index 8a5a6a2b541..00000000000 --- a/lldb/test/expression_command/options/foo.cpp +++ /dev/null @@ -1,11 +0,0 @@ -namespace ns { - int func(void) - { - return 0; - } -} - -extern "C" int foo(void) -{ - return ns::func(); -} diff --git a/lldb/test/expression_command/options/main.cpp b/lldb/test/expression_command/options/main.cpp deleted file mode 100644 index ecd9a90f662..00000000000 --- a/lldb/test/expression_command/options/main.cpp +++ /dev/null @@ -1,15 +0,0 @@ -extern "C" int foo(void); -static int static_value = 0; - -int -bar() -{ - static_value++; - return static_value; -} - -int main (int argc, char const *argv[]) -{ - bar(); // breakpoint_in_main - return foo(); -} diff --git a/lldb/test/expression_command/persist_objc_pointeetype/Makefile b/lldb/test/expression_command/persist_objc_pointeetype/Makefile deleted file mode 100644 index 8066198300f..00000000000 --- a/lldb/test/expression_command/persist_objc_pointeetype/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -LEVEL = ../../make - -OBJC_SOURCES := main.m - -include $(LEVEL)/Makefile.rules -LDFLAGS += -framework Foundation -framework CloudKit - diff --git a/lldb/test/expression_command/persist_objc_pointeetype/TestPersistObjCPointeeType.py b/lldb/test/expression_command/persist_objc_pointeetype/TestPersistObjCPointeeType.py deleted file mode 100644 index e959450a5c7..00000000000 --- a/lldb/test/expression_command/persist_objc_pointeetype/TestPersistObjCPointeeType.py +++ /dev/null @@ -1,50 +0,0 @@ -""" -Test that we can p *objcObject -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class PersistObjCPointeeType(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.cpp. - self.line = line_number('main.m','// break here') - - @skipUnlessDarwin - @expectedFailureAll( - bugnumber='http://llvm.org/pr23504', - oslist=['macosx'], compiler='clang', compiler_version=['<', '7.0.0']) - def test_with(self): - """Test that we can p *objcObject""" - self.build() - - def cleanup(): - pass - - # Execute the cleanup function during test case tear down. - self.addTearDownHook(cleanup) - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, "main.m", self.line, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - self.expect("p *self", substrs=['_sc_name = nil', - '_sc_name2 = nil', - '_sc_name3 = nil', - '_sc_name4 = nil', - '_sc_name5 = nil', - '_sc_name6 = nil', - '_sc_name7 = nil', - '_sc_name8 = nil']) diff --git a/lldb/test/expression_command/persist_objc_pointeetype/main.m b/lldb/test/expression_command/persist_objc_pointeetype/main.m deleted file mode 100644 index a2b6b703d6c..00000000000 --- a/lldb/test/expression_command/persist_objc_pointeetype/main.m +++ /dev/null @@ -1,80 +0,0 @@ -/* -clang -g ExtendSuperclass.m -o ExtendSuperclass -framework Foundation -framework ProtectedCloudStorage -F/System/Library/PrivateFrameworks/ -framework CloudKit && ./ExtendSuperclass -*/ -#include <assert.h> -#import <Foundation/Foundation.h> -#import <CloudKit/CloudKit.h> - -#define SuperClass CKDatabase - -@interface SubClass : SuperClass -@end - -// class extension -@interface SuperClass () -@property (nonatomic, strong) NSString *_sc_name; -@property (nonatomic, strong) NSString *_sc_name2; -@property (nonatomic, strong) NSString *_sc_name3; -@property (nonatomic, strong) NSString *_sc_name4; -@property (nonatomic, strong) NSString *_sc_name5; -@property (nonatomic, strong) NSString *_sc_name6; -@property (nonatomic, strong) NSString *_sc_name7; -@property (nonatomic, strong) NSString *_sc_name8; -@end - -@implementation SuperClass (MySuperClass) -- (id)initThatDoesNotAssert -{ - return [super init]; -} -@end - -@implementation SubClass -- (id)initThatDoesNotAssert -{ - assert(_sc_name == nil); - assert(_sc_name2 == nil); - assert(_sc_name3 == nil); - assert(_sc_name4 == nil); - assert(_sc_name5 == nil); - assert(_sc_name6 == nil); - assert(_sc_name7 == nil); - assert(_sc_name8 == nil); // break here - - if ((self = [super _initWithContainer:(CKContainer*)@"foo" scope:0xff])) { - assert(_sc_name == nil); - assert(_sc_name2 == nil); - assert(_sc_name3 == nil); - assert(_sc_name4 == nil); - assert(_sc_name5 == nil); - assert(_sc_name6 == nil); - assert(_sc_name7 == nil); - assert(_sc_name8 == nil); - - _sc_name = @"empty"; - } - return self; -} -@synthesize _sc_name; -@synthesize _sc_name2; -@synthesize _sc_name3; -@synthesize _sc_name4; -@synthesize _sc_name5; -@synthesize _sc_name6; -@synthesize _sc_name7; -@synthesize _sc_name8; -- (void)foo:(NSString*)bar { self._sc_name = bar; } -- (NSString*)description { return [NSString stringWithFormat:@"%p: %@", self, self._sc_name]; } -@end - -int main() -{ - SubClass *sc = [[SubClass alloc] initThatDoesNotAssert]; - NSLog(@"%@", sc); - [sc foo:@"bar"]; - NSLog(@"%@", sc); - sc._sc_name = @"bar2"; - NSLog(@"%@", sc); - NSLog(@"%@", sc._sc_name); - return 0; -} diff --git a/lldb/test/expression_command/persistent_ptr_update/Makefile b/lldb/test/expression_command/persistent_ptr_update/Makefile deleted file mode 100644 index db5f575866d..00000000000 --- a/lldb/test/expression_command/persistent_ptr_update/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules - - diff --git a/lldb/test/expression_command/persistent_ptr_update/TestPersistentPtrUpdate.py b/lldb/test/expression_command/persistent_ptr_update/TestPersistentPtrUpdate.py deleted file mode 100644 index 8d3e31d1632..00000000000 --- a/lldb/test/expression_command/persistent_ptr_update/TestPersistentPtrUpdate.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Test that we can have persistent pointer variables -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class PersistentPtrUpdateTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - def test(self): - """Test that we can have persistent pointer variables""" - self.build() - - def cleanup(): - pass - - # Execute the cleanup function during test case tear down. - self.addTearDownHook(cleanup) - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - self.runCmd('break set -p here') - - self.runCmd("run", RUN_SUCCEEDED) - - self.runCmd("expr void* $foo = 0") - - self.runCmd("continue") - - self.expect("expr $foo", substrs=['$foo','0x0']) diff --git a/lldb/test/expression_command/persistent_ptr_update/main.c b/lldb/test/expression_command/persistent_ptr_update/main.c deleted file mode 100644 index 73346969ecc..00000000000 --- a/lldb/test/expression_command/persistent_ptr_update/main.c +++ /dev/null @@ -1,11 +0,0 @@ -void* foo(void *p) -{ - return p; // break here -} - -int main() { - while (1) { - foo(0); - } - return 0; -} diff --git a/lldb/test/expression_command/persistent_types/Makefile b/lldb/test/expression_command/persistent_types/Makefile deleted file mode 100644 index 0d70f259501..00000000000 --- a/lldb/test/expression_command/persistent_types/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/persistent_types/TestNestedPersistentTypes.py b/lldb/test/expression_command/persistent_types/TestNestedPersistentTypes.py deleted file mode 100644 index fdc8b68bddd..00000000000 --- a/lldb/test/expression_command/persistent_types/TestNestedPersistentTypes.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Test that nested persistent types work. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * - -class NestedPersistentTypesTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @expectedFailureWindows("llvm.org/pr21765") - def test_persistent_types(self): - """Test that nested persistent types work.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - self.runCmd("breakpoint set --name main") - - self.runCmd("run", RUN_SUCCEEDED) - - self.runCmd("expression struct $foo { int a; int b; };") - - self.runCmd("expression struct $bar { struct $foo start; struct $foo end; };") - - self.runCmd("expression struct $bar $my_bar = {{ 2, 3 }, { 4, 5 }};") - - self.expect("expression $my_bar", - substrs = ['a = 2', 'b = 3', 'a = 4', 'b = 5']) - - self.expect("expression $my_bar.start.b", - substrs = ['(int)', '3']) - - self.expect("expression $my_bar.end.b", - substrs = ['(int)', '5']) diff --git a/lldb/test/expression_command/persistent_types/TestPersistentTypes.py b/lldb/test/expression_command/persistent_types/TestPersistentTypes.py deleted file mode 100644 index 48ee99fe780..00000000000 --- a/lldb/test/expression_command/persistent_types/TestPersistentTypes.py +++ /dev/null @@ -1,57 +0,0 @@ -""" -Test that lldb persistent types works correctly. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * - -class PersistenttypesTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - @expectedFailureWindows("llvm.org/pr21765") - def test_persistent_types(self): - """Test that lldb persistent types works correctly.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - self.runCmd("breakpoint set --name main") - - self.runCmd("run", RUN_SUCCEEDED) - - self.runCmd("expression struct $foo { int a; int b; };") - - self.expect("expression struct $foo $my_foo; $my_foo.a = 2; $my_foo.b = 3;", - startstr = "(int) $0 = 3") - - self.expect("expression $my_foo", - substrs = ['a = 2', 'b = 3']) - - self.runCmd("expression typedef int $bar") - - self.expect("expression $bar i = 5; i", - startstr = "($bar) $1 = 5") - - self.runCmd("expression struct $foobar { char a; char b; char c; char d; };") - self.runCmd("next") - - self.expect("memory read foo -t $foobar", - substrs = ['($foobar) 0x', ' = ', "a = 'H'","b = 'e'","c = 'l'","d = 'l'"]) # persistent types are OK to use for memory read - - self.expect("memory read foo -t foobar", - substrs = ['($foobar) 0x', ' = ', "a = 'H'","b = 'e'","c = 'l'","d = 'l'"],matching=False,error=True) # the type name is $foobar, make sure we settle for nothing less - - self.expect("expression struct { int a; int b; } x = { 2, 3 }; x", - substrs = ['a = 2', 'b = 3']) - - self.expect("expression struct { int x; int y; int z; } object; object.y = 1; object.z = 3; object.x = 2; object", - substrs = ['x = 2', 'y = 1', 'z = 3']) - - self.expect("expression struct A { int x; int y; }; struct { struct A a; int z; } object; object.a.y = 1; object.z = 3; object.a.x = 2; object", - substrs = ['x = 2', 'y = 1', 'z = 3']) diff --git a/lldb/test/expression_command/persistent_types/main.c b/lldb/test/expression_command/persistent_types/main.c deleted file mode 100644 index 9e26e619bfd..00000000000 --- a/lldb/test/expression_command/persistent_types/main.c +++ /dev/null @@ -1,14 +0,0 @@ -//===-- main.c --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -int main (int argc, char const *argv[]) -{ - const char* foo = "Hello world"; - return 0; -} diff --git a/lldb/test/expression_command/persistent_variables/Makefile b/lldb/test/expression_command/persistent_variables/Makefile deleted file mode 100644 index 0d70f259501..00000000000 --- a/lldb/test/expression_command/persistent_variables/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/persistent_variables/TestPersistentVariables.py b/lldb/test/expression_command/persistent_variables/TestPersistentVariables.py deleted file mode 100644 index 6790014f5e6..00000000000 --- a/lldb/test/expression_command/persistent_variables/TestPersistentVariables.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -Test that lldb persistent variables works correctly. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * - -class PersistentVariablesTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def test_persistent_variables(self): - """Test that lldb persistent variables works correctly.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - self.runCmd("breakpoint set --source-pattern-regexp break") - - self.runCmd("run", RUN_SUCCEEDED) - - self.runCmd("expression int $i = i") - - self.expect("expression $i == i", - startstr = "(bool) $0 = true") - - self.expect("expression $i + 1", - startstr = "(int) $1 = 6") - - self.expect("expression $i + 3", - startstr = "(int) $2 = 8") - - self.expect("expression $2 + $1", - startstr = "(int) $3 = 14") - - self.expect("expression $3", - startstr = "(int) $3 = 14") - - self.expect("expression $2", - startstr = "(int) $2 = 8") - - self.expect("expression (int)-2", - startstr = "(int) $4 = -2") - - self.expect("expression $4 > (int)31", - startstr = "(bool) $5 = false") - - self.expect("expression (long)$4", - startstr = "(long) $6 = -2") diff --git a/lldb/test/expression_command/persistent_variables/main.c b/lldb/test/expression_command/persistent_variables/main.c deleted file mode 100644 index fd41471df8e..00000000000 --- a/lldb/test/expression_command/persistent_variables/main.c +++ /dev/null @@ -1,14 +0,0 @@ -//===-- main.c --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -int main (int argc, char const *argv[]) -{ - int i = 5; - return 0; // Set breakpoint here -} diff --git a/lldb/test/expression_command/po_verbosity/Makefile b/lldb/test/expression_command/po_verbosity/Makefile deleted file mode 100644 index 4464e2ee9f5..00000000000 --- a/lldb/test/expression_command/po_verbosity/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -LEVEL = ../../make - -OBJC_SOURCES := main.m - -include $(LEVEL)/Makefile.rules -LDFLAGS += -framework Cocoa diff --git a/lldb/test/expression_command/po_verbosity/TestPoVerbosity.py b/lldb/test/expression_command/po_verbosity/TestPoVerbosity.py deleted file mode 100644 index b50cc262586..00000000000 --- a/lldb/test/expression_command/po_verbosity/TestPoVerbosity.py +++ /dev/null @@ -1,61 +0,0 @@ -""" -Test that the po command acts correctly. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class PoVerbosityTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.cpp. - self.line = line_number('main.m', - '// Stop here') - - @skipUnlessDarwin - def test(self): - """Test that the po command acts correctly.""" - self.build() - - # This is the function to remove the custom formats in order to have a - # clean slate for the next test case. - def cleanup(): - self.runCmd('type summary clear', check=False) - self.runCmd('type synthetic clear', check=False) - - # Execute the cleanup function during test case tear down. - self.addTearDownHook(cleanup) - - """Test expr + formatters for good interoperability.""" - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, "main.m", self.line, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - self.expect("expr -O -v -- foo", - substrs = ['(id) $',' = 0x', '1 = 2','2 = 3;']) - self.expect("expr -O -vfull -- foo", - substrs = ['(id) $',' = 0x', '1 = 2','2 = 3;']) - self.expect("expr -O -- foo",matching=False, - substrs = ['(id) $']) - - self.expect("expr -O -- 22",matching=False, - substrs = ['(int) $']) - self.expect("expr -O -- 22", - substrs = ['22']) - - self.expect("expr -O -vfull -- 22", - substrs = ['(int) $', ' = 22']) - - self.expect("expr -O -v -- 22", - substrs = ['(int) $', ' = 22']) diff --git a/lldb/test/expression_command/po_verbosity/main.m b/lldb/test/expression_command/po_verbosity/main.m deleted file mode 100644 index 3dbb024b280..00000000000 --- a/lldb/test/expression_command/po_verbosity/main.m +++ /dev/null @@ -1,9 +0,0 @@ -#import <Cocoa/Cocoa.h> - -int main() -{ - [NSString initialize]; - id foo = @{@1 : @2, @2 : @3}; - int x = 34; - return 0; // Stop here -} diff --git a/lldb/test/expression_command/radar_8638051/Makefile b/lldb/test/expression_command/radar_8638051/Makefile deleted file mode 100644 index 0d70f259501..00000000000 --- a/lldb/test/expression_command/radar_8638051/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/radar_8638051/Test8638051.py b/lldb/test/expression_command/radar_8638051/Test8638051.py deleted file mode 100644 index 3b61a468848..00000000000 --- a/lldb/test/expression_command/radar_8638051/Test8638051.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Test the robustness of lldb expression parser. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * - -class Radar8638051TestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def test_expr_commands(self): - """The following expression commands should not crash.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - self.runCmd("breakpoint set -n c") - - self.runCmd("run", RUN_SUCCEEDED) - - self.expect("expression val", - startstr = "(int) $0 = 1") - # (int) $0 = 1 - - self.expect("expression *(&val)", - startstr = "(int) $1 = 1") - # (int) $1 = 1 - - # rdar://problem/8638051 - # lldb expression command: Could this crash be avoided - self.expect("expression &val", - startstr = "(int *) $2 = ") - # (int *) $2 = 0x.... diff --git a/lldb/test/expression_command/radar_8638051/main.c b/lldb/test/expression_command/radar_8638051/main.c deleted file mode 100644 index 1329fd69a2e..00000000000 --- a/lldb/test/expression_command/radar_8638051/main.c +++ /dev/null @@ -1,54 +0,0 @@ -//===-- main.c --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#include <stdio.h> - -// This simple program is to demonstrate the capability of the lldb command -// "breakpoint command add" to add a set of commands to a breakpoint to be -// executed when the breakpoint is hit. -// -// In particular, we want to break within c(), but only if the immediate caller -// is a(). - -int a(int); -int b(int); -int c(int); - -int a(int val) -{ - if (val <= 1) - return b(val); - else if (val >= 3) - return c(val); // Find the line number where c's parent frame is a here. - - return val; -} - -int b(int val) -{ - return c(val); -} - -int c(int val) -{ - return val + 3; -} - -int main (int argc, char const *argv[]) -{ - int A1 = a(1); // a(1) -> b(1) -> c(1) - printf("a(1) returns %d\n", A1); - - int B2 = b(2); // b(2) -> c(2) - printf("b(2) returns %d\n", B2); - - int A3 = a(3); // a(3) -> c(3) - printf("a(3) returns %d\n", A3); - - return 0; -} diff --git a/lldb/test/expression_command/radar_9531204/Makefile b/lldb/test/expression_command/radar_9531204/Makefile deleted file mode 100644 index 0d70f259501..00000000000 --- a/lldb/test/expression_command/radar_9531204/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/radar_9531204/TestPrintfAfterUp.py b/lldb/test/expression_command/radar_9531204/TestPrintfAfterUp.py deleted file mode 100644 index e7821a68f29..00000000000 --- a/lldb/test/expression_command/radar_9531204/TestPrintfAfterUp.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -The evaluating printf(...) after break stop and then up a stack frame. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * -import lldbutil - -class Radar9531204TestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - # rdar://problem/9531204 - @expectedFailureWindows("llvm.org/pr21765") - def test_expr_commands(self): - """The evaluating printf(...) after break stop and then up a stack frame.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_symbol (self, 'foo', sym_exact=True, num_expected_locations=1) - - self.runCmd("run", RUN_SUCCEEDED) - - self.runCmd("frame variable") - - # This works fine. - self.runCmd('expression (int)printf("value is: %d.\\n", value);') - - # rdar://problem/9531204 - # "Error dematerializing struct" error when evaluating expressions "up" on the stack - self.runCmd('up') # frame select -r 1 - - self.runCmd("frame variable") - - # This does not currently. - self.runCmd('expression (int)printf("argc is: %d.\\n", argc)') diff --git a/lldb/test/expression_command/radar_9531204/main.c b/lldb/test/expression_command/radar_9531204/main.c deleted file mode 100644 index 2bf05f2b306..00000000000 --- a/lldb/test/expression_command/radar_9531204/main.c +++ /dev/null @@ -1,25 +0,0 @@ -//===-- main.c --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#include <stdio.h> - -// breakpoint set -n foo -// -// -int foo (int value) -{ - printf ("I got the value: %d.\n", value); - return 0; -} - -int main (int argc, char **argv) -{ - foo (argc); - printf ("Hello there: %d.\n", argc); - return 0; -} diff --git a/lldb/test/expression_command/radar_9673664/Makefile b/lldb/test/expression_command/radar_9673664/Makefile deleted file mode 100644 index 0d70f259501..00000000000 --- a/lldb/test/expression_command/radar_9673664/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -C_SOURCES := main.c - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/radar_9673664/TestExprHelpExamples.py b/lldb/test/expression_command/radar_9673664/TestExprHelpExamples.py deleted file mode 100644 index 7d7c8ed046c..00000000000 --- a/lldb/test/expression_command/radar_9673664/TestExprHelpExamples.py +++ /dev/null @@ -1,41 +0,0 @@ -""" -Test example snippets from the lldb 'help expression' output. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os, time -import lldb -from lldbtest import * -import lldbutil - -class Radar9673644TestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break inside main(). - self.main_source = "main.c" - self.line = line_number(self.main_source, '// Set breakpoint here.') - - @expectedFailureWindows("llvm.org/pr21765") - def test_expr_commands(self): - """The following expression commands should just work.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, self.main_source, self.line, num_expected_locations=1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - # rdar://problem/9673664 lldb expression evaluation problem - - self.expect('expr char c[] = "foo"; c[0]', - substrs = ["'f'"]) - # runCmd: expr char c[] = "foo"; c[0] - # output: (char) $0 = 'f' diff --git a/lldb/test/expression_command/radar_9673664/main.c b/lldb/test/expression_command/radar_9673664/main.c deleted file mode 100644 index 934abdfaef3..00000000000 --- a/lldb/test/expression_command/radar_9673664/main.c +++ /dev/null @@ -1,16 +0,0 @@ -//===-- main.c --------------------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -#include <stdio.h> - -int main (int argc, char const *argv[]) -{ - printf("Hello, world.\n"); // Set breakpoint here. - - return 0; -} diff --git a/lldb/test/expression_command/test/Makefile b/lldb/test/expression_command/test/Makefile deleted file mode 100644 index 8a7102e347a..00000000000 --- a/lldb/test/expression_command/test/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := main.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/test/TestExprs.py b/lldb/test/expression_command/test/TestExprs.py deleted file mode 100644 index 70d36896dcd..00000000000 --- a/lldb/test/expression_command/test/TestExprs.py +++ /dev/null @@ -1,250 +0,0 @@ -""" -Test many basic expression commands and SBFrame.EvaluateExpression() API. - -Test cases: - -o test_many_expr_commands: - Test many basic expression commands. -o test_evaluate_expression_python: - Use Python APIs (SBFrame.EvaluateExpression()) to evaluate expressions. -o test_expr_commands_can_handle_quotes: - Throw some expression commands with quotes at lldb. -""" - -from __future__ import print_function - -import use_lldb_suite - -import unittest2 - -import os, time -import lldb -import lldbutil -from lldbtest import * - -class BasicExprCommandsTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.c. - self.line = line_number('main.cpp', - '// Please test many expressions while stopped at this line:') - - # Disable confirmation prompt to avoid infinite wait - self.runCmd("settings set auto-confirm true") - self.addTearDownHook(lambda: self.runCmd("settings clear auto-confirm")) - - - def build_and_run(self): - """These basic expression commands should work as expected.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line, num_expected_locations=1, loc_exact=False) - - self.runCmd("run", RUN_SUCCEEDED) - - @unittest2.expectedFailure("llvm.org/pr17135 <rdar://problem/14874559> APFloat::toString does not identify the correct (i.e. least) precision.") - def test_floating_point_expr_commands(self): - self.build_and_run() - - self.expect("expression 2.234f", - patterns = ["\(float\) \$.* = 2\.234"]) - # (float) $2 = 2.234 - - @expectedFailureAll("llvm.org/pr23139", oslist=["linux"], compiler="gcc", compiler_version=[">=","4.9"], archs=["i386"]) - @expectedFailureWindows("llvm.org/pr21765") - def test_many_expr_commands(self): - self.build_and_run() - - self.expect("expression 2", - patterns = ["\(int\) \$.* = 2"]) - # (int) $0 = 1 - - self.expect("expression 2ull", - patterns = ["\(unsigned long long\) \$.* = 2"]) - # (unsigned long long) $1 = 2 - - self.expect("expression 0.5f", - patterns = ["\(float\) \$.* = 0\.5"]) - # (float) $2 = 0.5 - - self.expect("expression 2.234", - patterns = ["\(double\) \$.* = 2\.234"]) - # (double) $3 = 2.234 - - self.expect("expression 2+3", - patterns = ["\(int\) \$.* = 5"]) - # (int) $4 = 5 - - self.expect("expression argc", - patterns = ["\(int\) \$.* = 1"]) - # (int) $5 = 1 - - self.expect("expression argc + 22", - patterns = ["\(int\) \$.* = 23"]) - # (int) $6 = 23 - - self.expect("expression argv", - patterns = ["\(const char \*\*\) \$.* = 0x"]) - # (const char *) $7 = ... - - self.expect("expression argv[0]", - substrs = ["(const char *)", - "a.out"]) - # (const char *) $8 = 0x... "/Volumes/data/lldb/svn/trunk/test/expression_command/test/a.out" - - @add_test_categories(['pyapi']) - @expectedFailureAll("llvm.org/pr23139", oslist=["linux"], compiler="gcc", compiler_version=[">=","4.9"], archs=["i386"]) - @expectedFailureWindows # Test crashes - def test_evaluate_expression_python(self): - """Test SBFrame.EvaluateExpression() API for evaluating an expression.""" - self.build() - - exe = os.path.join(os.getcwd(), "a.out") - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - # Create the breakpoint. - filespec = lldb.SBFileSpec("main.cpp", False) - breakpoint = target.BreakpointCreateByLocation(filespec, self.line) - self.assertTrue(breakpoint, VALID_BREAKPOINT) - - # Verify the breakpoint just created. - self.expect(str(breakpoint), BREAKPOINT_CREATED, exe=False, - substrs = ['main.cpp', - str(self.line)]) - - # Launch the process, and do not stop at the entry point. - # Pass 'X Y Z' as the args, which makes argc == 4. - process = target.LaunchSimple (['X', 'Y', 'Z'], None, self.get_process_working_directory()) - - if not process: - self.fail("SBTarget.LaunchProcess() failed") - - if process.GetState() != lldb.eStateStopped: - self.fail("Process should be in the 'stopped' state, " - "instead the actual state is: '%s'" % - lldbutil.state_type_to_str(process.GetState())) - - # The stop reason of the thread should be breakpoint. - thread = process.GetThreadAtIndex(0) - if thread.GetStopReason() != lldb.eStopReasonBreakpoint: - from lldbutil import stop_reason_to_str - self.fail(STOPPED_DUE_TO_BREAKPOINT_WITH_STOP_REASON_AS % - stop_reason_to_str(thread.GetStopReason())) - - # The filename of frame #0 should be 'main.cpp' and function is main. - self.expect(lldbutil.get_filenames(thread)[0], - "Break correctly at main.cpp", exe=False, - startstr = "main.cpp") - self.expect(lldbutil.get_function_names(thread)[0], - "Break correctly at main()", exe=False, - startstr = "main") - - # We should be stopped on the breakpoint with a hit count of 1. - self.assertTrue(breakpoint.GetHitCount() == 1, BREAKPOINT_HIT_ONCE) - - # - # Use Python API to evaluate expressions while stopped in a stack frame. - # - frame = thread.GetFrameAtIndex(0) - - val = frame.EvaluateExpression("2.234") - self.expect(val.GetValue(), "2.345 evaluated correctly", exe=False, - startstr = "2.234") - self.expect(val.GetTypeName(), "2.345 evaluated correctly", exe=False, - startstr = "double") - self.DebugSBValue(val) - - val = frame.EvaluateExpression("argc") - self.expect(val.GetValue(), "Argc evaluated correctly", exe=False, - startstr = "4") - self.DebugSBValue(val) - - val = frame.EvaluateExpression("*argv[1]") - self.expect(val.GetValue(), "Argv[1] evaluated correctly", exe=False, - startstr = "'X'") - self.DebugSBValue(val) - - val = frame.EvaluateExpression("*argv[2]") - self.expect(val.GetValue(), "Argv[2] evaluated correctly", exe=False, - startstr = "'Y'") - self.DebugSBValue(val) - - val = frame.EvaluateExpression("*argv[3]") - self.expect(val.GetValue(), "Argv[3] evaluated correctly", exe=False, - startstr = "'Z'") - self.DebugSBValue(val) - - callee_break = target.BreakpointCreateByName ("a_function_to_call", None) - self.assertTrue(callee_break.GetNumLocations() > 0) - - # Make sure ignoring breakpoints works from the command line: - self.expect("expression -i true -- a_function_to_call()", - substrs = ['(int) $', ' 1']) - self.assertTrue (callee_break.GetHitCount() == 1) - - # Now try ignoring breakpoints using the SB API's: - options = lldb.SBExpressionOptions() - options.SetIgnoreBreakpoints(True) - value = frame.EvaluateExpression('a_function_to_call()', options) - self.assertTrue (value.IsValid()) - self.assertTrue (value.GetValueAsSigned(0) == 2) - self.assertTrue (callee_break.GetHitCount() == 2) - - # rdar://problem/8686536 - # CommandInterpreter::HandleCommand is stripping \'s from input for WantsRawCommand commands - @expectedFailureWindows("llvm.org/pr21765") - def test_expr_commands_can_handle_quotes(self): - """Throw some expression commands with quotes at lldb.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.line, num_expected_locations=1,loc_exact=False) - - self.runCmd("run", RUN_SUCCEEDED) - - # runCmd: expression 'a' - # output: (char) $0 = 'a' - self.expect("expression 'a'", - substrs = ['(char) $', - "'a'"]) - - # runCmd: expression (int) printf ("\n\n\tHello there!\n") - # output: (int) $1 = 16 - self.expect(r'''expression (int) printf ("\n\n\tHello there!\n")''', - substrs = ['(int) $', - '16']) - - # runCmd: expression (int) printf("\t\x68\n") - # output: (int) $2 = 3 - self.expect(r'''expression (int) printf("\t\x68\n")''', - substrs = ['(int) $', - '3']) - - # runCmd: expression (int) printf("\"\n") - # output: (int) $3 = 2 - self.expect(r'''expression (int) printf("\"\n")''', - substrs = ['(int) $', - '2']) - - # runCmd: expression (int) printf("'\n") - # output: (int) $4 = 2 - self.expect(r'''expression (int) printf("'\n")''', - substrs = ['(int) $', - '2']) - - # runCmd: command alias print_hi expression (int) printf ("\n\tHi!\n") - # output: - self.runCmd(r'''command alias print_hi expression (int) printf ("\n\tHi!\n")''') - # This fails currently. - self.expect('print_hi', - substrs = ['(int) $', - '6']) diff --git a/lldb/test/expression_command/test/TestExprs2.py b/lldb/test/expression_command/test/TestExprs2.py deleted file mode 100644 index 672521dd1d1..00000000000 --- a/lldb/test/expression_command/test/TestExprs2.py +++ /dev/null @@ -1,60 +0,0 @@ -""" -Test some more expression commands. -""" - -from __future__ import print_function - -import use_lldb_suite - -import os -import lldb -import lldbutil -from lldbtest import * - -class ExprCommands2TestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.c. - self.line = line_number('main.cpp', - '// Please test many expressions while stopped at this line:') - - @expectedFailureWindows("llvm.org/pr24489: Name lookup not working correctly on Windows") - def test_more_expr_commands(self): - """Test some more expression commands.""" - self.build() - - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line(self, "main.cpp", self.line, num_expected_locations=1,loc_exact=False) - - self.runCmd("run", RUN_SUCCEEDED) - - # Does static casting work? - self.expect("expression (int*)argv", - startstr = "(int *) $0 = 0x") - # (int *) $0 = 0x00007fff5fbff258 - - # Do anonymous symbols work? - self.expect("expression ((char**)environ)[0]", - startstr = "(char *) $1 = 0x") - # (char *) $1 = 0x00007fff5fbff298 "Apple_PubSub_Socket_Render=/tmp/launch-7AEsUD/Render" - - # Do return values containing the contents of expression locals work? - self.expect("expression int i = 5; i", - startstr = "(int) $2 = 5") - # (int) $2 = 5 - self.expect("expression $2 + 1", - startstr = "(int) $3 = 6") - # (int) $3 = 6 - - # Do return values containing the results of static expressions work? - self.expect("expression 20 + 3", - startstr = "(int) $4 = 23") - # (int) $4 = 5 - self.expect("expression $4 + 1", - startstr = "(int) $5 = 24") - # (int) $5 = 6 diff --git a/lldb/test/expression_command/test/main.cpp b/lldb/test/expression_command/test/main.cpp deleted file mode 100644 index 22208a87cb4..00000000000 --- a/lldb/test/expression_command/test/main.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include <stdio.h> - -static int static_value = 0; - -int -a_function_to_call() -{ - static_value++; - return static_value; -} - -int main (int argc, char const *argv[]) -{ - printf ("Hello world!\n"); - puts ("hello"); - // Please test many expressions while stopped at this line: -#if 0 - expression 'a' // make sure character constant makes it down (this is broken: <rdar://problem/8686536>) - expression 2 // Test int - expression 2ull // Test unsigned long long - expression 2.234f // Test float constants - expression 2.234 // Test double constants - expression 2+3 - expression argc - expression argc + 22 - expression argv - expression argv[0] - expression argv[1] - expression argv[-1] - expression puts("bonjour") // Test constant strings... - expression printf("\t\x68\n") // Test constant strings that contain the \xXX (TAB, 'h', '\n' should be printed) (this is broken: <rdar://problem/8686536>) - expression printf("\"\n") // Test constant strings that contains an escaped double quote char (this is broken: <rdar://problem/8686536>) - expression printf("\'\n") // Test constant strings that contains an escaped single quote char (this is broken: <rdar://problem/8686536>) - expression printf ("one: %i\n", 1) - expression printf ("1.234 as float: %f\n", 1.234f) - expression printf ("1.234 as double: %g\n", 1.234) - expression printf ("one: %i, two: %llu\n", 1, 2ull) - expression printf ("two: %llu, one: %i\n", 2ull, 1) - expression random() % 255l -#endif - - a_function_to_call(); - return 0; -} diff --git a/lldb/test/expression_command/timeout/Makefile b/lldb/test/expression_command/timeout/Makefile deleted file mode 100644 index c9cff412c1b..00000000000 --- a/lldb/test/expression_command/timeout/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -LEVEL = ../../make - -CXX_SOURCES := wait-a-while.cpp - -include $(LEVEL)/Makefile.rules diff --git a/lldb/test/expression_command/timeout/TestCallWithTimeout.py b/lldb/test/expression_command/timeout/TestCallWithTimeout.py deleted file mode 100644 index 6e3e8879073..00000000000 --- a/lldb/test/expression_command/timeout/TestCallWithTimeout.py +++ /dev/null @@ -1,92 +0,0 @@ -""" -Test calling a function that waits a while, and make sure the timeout option to expr works. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -import lldbutil -from lldbtest import * - -class ExprCommandWithTimeoutsTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - - self.main_source = "wait-a-while.cpp" - self.main_source_spec = lldb.SBFileSpec (self.main_source) - - - @expectedFlakeyFreeBSD("llvm.org/pr19605") - @expectedFlakeyLinux("llvm.org/pr20275") - @expectedFailureWindows("llvm.org/pr21765") - def test(self): - """Test calling std::String member function.""" - self.build() - - exe_name = "a.out" - exe = os.path.join(os.getcwd(), exe_name) - - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - breakpoint = target.BreakpointCreateBySourceRegex('stop here in main.',self.main_source_spec) - self.assertTrue(breakpoint, VALID_BREAKPOINT) - self.runCmd("breakpoint list") - - # Launch the process, and do not stop at the entry point. - process = target.LaunchSimple (None, None, self.get_process_working_directory()) - - self.assertTrue(process, PROCESS_IS_VALID) - - # Frame #0 should be on self.step_out_of_malloc. - threads = lldbutil.get_threads_stopped_at_breakpoint (process, breakpoint) - - self.assertTrue(len(threads) == 1) - thread = threads[0] - - # First set the timeout too short, and make sure we fail. - options = lldb.SBExpressionOptions() - options.SetTimeoutInMicroSeconds(10) - options.SetUnwindOnError(True) - - frame = thread.GetFrameAtIndex(0) - - value = frame.EvaluateExpression ("wait_a_while (50000)", options) - self.assertTrue (value.IsValid()) - self.assertFalse (value.GetError().Success()) - - # Now do the same thing with the command line command, and make sure it works too. - interp = self.dbg.GetCommandInterpreter() - - result = lldb.SBCommandReturnObject() - return_value = interp.HandleCommand ("expr -t 100 -u true -- wait_a_while(50000)", result) - self.assertTrue (return_value == lldb.eReturnStatusFailed) - - # Okay, now do it again with long enough time outs: - - options.SetTimeoutInMicroSeconds(1000000) - value = frame.EvaluateExpression ("wait_a_while (1000)", options) - self.assertTrue(value.IsValid()) - self.assertTrue (value.GetError().Success() == True) - - # Now do the same thingwith the command line command, and make sure it works too. - interp = self.dbg.GetCommandInterpreter() - - result = lldb.SBCommandReturnObject() - return_value = interp.HandleCommand ("expr -t 1000000 -u true -- wait_a_while(1000)", result) - self.assertTrue(return_value == lldb.eReturnStatusSuccessFinishResult) - - - # Finally set the one thread timeout and make sure that doesn't change things much: - - options.SetTimeoutInMicroSeconds(1000000) - options.SetOneThreadTimeoutInMicroSeconds(500000) - value = frame.EvaluateExpression ("wait_a_while (1000)", options) - self.assertTrue(value.IsValid()) - self.assertTrue (value.GetError().Success() == True) diff --git a/lldb/test/expression_command/timeout/wait-a-while.cpp b/lldb/test/expression_command/timeout/wait-a-while.cpp deleted file mode 100644 index ac37c5d243b..00000000000 --- a/lldb/test/expression_command/timeout/wait-a-while.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include <stdio.h> -#include <stdint.h> - -#include <chrono> -#include <thread> - - -int -wait_a_while (int microseconds) -{ - int num_times = 0; - auto end_time = std::chrono::system_clock::now() + std::chrono::microseconds(microseconds); - - while (1) - { - num_times++; - auto wait_time = end_time - std::chrono::system_clock::now(); - - std::this_thread::sleep_for(wait_time); - if (std::chrono::system_clock::now() > end_time) - break; - } - return num_times; -} - -int -main (int argc, char **argv) -{ - printf ("stop here in main.\n"); - int num_times = wait_a_while (argc * 1000); - printf ("Done, took %d times.\n", num_times); - - return 0; - -} diff --git a/lldb/test/expression_command/two-files/Makefile b/lldb/test/expression_command/two-files/Makefile deleted file mode 100644 index 5974461e256..00000000000 --- a/lldb/test/expression_command/two-files/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -LEVEL = ../../make - -OBJC_SOURCES := main.m foo.m - -include $(LEVEL)/Makefile.rules - -LDFLAGS += -framework Foundation
\ No newline at end of file diff --git a/lldb/test/expression_command/two-files/TestObjCTypeQueryFromOtherCompileUnit.py b/lldb/test/expression_command/two-files/TestObjCTypeQueryFromOtherCompileUnit.py deleted file mode 100644 index 7e67b334e4d..00000000000 --- a/lldb/test/expression_command/two-files/TestObjCTypeQueryFromOtherCompileUnit.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Regression test for <rdar://problem/8981098>: - -The expression parser's type search only looks in the current compilation unit for types. -""" - -from __future__ import print_function - -import use_lldb_suite - -import lldb -from lldbtest import * -import lldbutil - -class ObjCTypeQueryTestCase(TestBase): - - mydir = TestBase.compute_mydir(__file__) - - def setUp(self): - # Call super's setUp(). - TestBase.setUp(self) - # Find the line number to break for main.m. - self.line = line_number('main.m', - "// Set breakpoint here, then do 'expr (NSArray*)array_token'.") - - @skipUnlessDarwin - def test(self): - """The expression parser's type search should be wider than the current compilation unit.""" - self.build() - self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) - - lldbutil.run_break_set_by_file_and_line (self, "main.m", self.line, num_expected_locations=1, loc_exact=True) - - self.runCmd("run", RUN_SUCCEEDED) - - # Now do a NSArry type query from the 'main.m' compile uint. - self.expect("expression (NSArray*)array_token", - substrs = ['(NSArray *) $0 = 0x']) - # (NSArray *) $0 = 0x00007fff70118398 diff --git a/lldb/test/expression_command/two-files/foo.m b/lldb/test/expression_command/two-files/foo.m deleted file mode 100644 index 1609ebd838f..00000000000 --- a/lldb/test/expression_command/two-files/foo.m +++ /dev/null @@ -1,28 +0,0 @@ -#import <Foundation/Foundation.h> - -NSMutableArray * -GetArray () -{ - static NSMutableArray *the_array = NULL; - if (the_array == NULL) - the_array = [[NSMutableArray alloc] init]; - return the_array; -} - -int -AddElement (char *value) -{ - NSString *element = [NSString stringWithUTF8String: value]; - int cur_elem = [GetArray() count]; - [GetArray() addObject: element]; - return cur_elem; -} - -const char * -GetElement (int idx) -{ - if (idx >= [GetArray() count]) - return NULL; - else - return [[GetArray() objectAtIndex: idx] UTF8String]; -} diff --git a/lldb/test/expression_command/two-files/main.m b/lldb/test/expression_command/two-files/main.m deleted file mode 100644 index 3f5738314e6..00000000000 --- a/lldb/test/expression_command/two-files/main.m +++ /dev/null @@ -1,22 +0,0 @@ -#import <Foundation/Foundation.h> -#include <stdio.h> - -extern int AddElement (char *value); -extern char *GetElement (int idx); -extern void *GetArray(); - -int -main () -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - int idx = AddElement ("some string"); - void *array_token = GetArray(); - - char *string = GetElement (0); // Set breakpoint here, then do 'expr (NSArray*)array_token'. - if (string) - printf ("This: %s.\n", string); - - [pool release]; - return 0; -} |

