xref: /llvm-project/lldb/test/API/commands/expression/call-function/TestCallUserDefinedFunction.py (revision 99451b4453688a94c6014cac233d371ab4cc342d)
1"""
2Test calling user defined functions using expression evaluation.
3
4Note:
5  LLDBs current first choice of evaluating functions is using the IR interpreter,
6  which is only supported on Hexagon. Otherwise JIT is used for the evaluation.
7
8"""
9
10
11
12import lldb
13from lldbsuite.test.decorators import *
14from lldbsuite.test.lldbtest import *
15from lldbsuite.test import lldbutil
16
17
18class ExprCommandCallUserDefinedFunction(TestBase):
19
20    mydir = TestBase.compute_mydir(__file__)
21
22    def setUp(self):
23        # Call super's setUp().
24        TestBase.setUp(self)
25        # Find the line number to break for main.c.
26        self.line = line_number(
27            'main.cpp',
28            '// Please test these expressions while stopped at this line:')
29
30    def test(self):
31        """Test return values of user defined function calls."""
32        self.build()
33
34        # Set breakpoint in main and run exe
35        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
36        lldbutil.run_break_set_by_file_and_line(
37            self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True)
38
39        self.runCmd("run", RUN_SUCCEEDED)
40
41        # Test recursive function call.
42        self.expect_expr("fib(5)", result_type="unsigned int", result_value="5")
43
44        # Test function with more than one paramter
45        self.expect_expr("add(4, 8)", result_type="int", result_value="12")
46
47        # Test nesting function calls in function paramters
48        self.expect_expr("add(add(5,2),add(3,4))", result_type="int", result_value="14")
49        self.expect_expr("add(add(5,2),fib(5))", result_type="int", result_value="12")
50
51        # Test function with pointer paramter
52        self.expect_expr('stringCompare((const char*) \"Hello world\")', result_type="bool", result_value="true")
53        self.expect_expr('stringCompare((const char*) \"Hellworld\")', result_type="bool", result_value="false")
54