xref: /llvm-project/lldb/test/API/commands/expression/call-function/TestCallUserDefinedFunction.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
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
10import lldb
11from lldbsuite.test.decorators import *
12from lldbsuite.test.lldbtest import *
13from lldbsuite.test import lldbutil
14
15
16class ExprCommandCallUserDefinedFunction(TestBase):
17    def test(self):
18        """Test return values of user defined function calls."""
19        self.build()
20        lldbutil.run_to_source_breakpoint(
21            self, "// break here", lldb.SBFileSpec("main.cpp")
22        )
23
24        # Test recursive function call.
25        self.expect_expr("fib(5)", result_type="unsigned int", result_value="5")
26
27        # Test function with more than one parameter
28        self.expect_expr("add(4, 8)", result_type="int", result_value="12")
29
30        # Test nesting function calls in function parameters
31        self.expect_expr("add(add(5,2),add(3,4))", result_type="int", result_value="14")
32        self.expect_expr("add(add(5,2),fib(5))", result_type="int", result_value="12")
33
34        # Test function with pointer parameter
35        self.expect_expr(
36            'stringCompare((const char*) "Hello world")',
37            result_type="bool",
38            result_value="true",
39        )
40        self.expect_expr(
41            'stringCompare((const char*) "Hellworld")',
42            result_type="bool",
43            result_value="false",
44        )
45