"""
Tests that we can call functions that have definitions in multiple
CUs in the debug-info (which is the case for functions defined in headers).
The linker will most likely de-duplicate the functiond definitions when linking
the final executable. On Darwin, this will create a debug-map that LLDB will use
to fix up object file addresses to addresses in the linked executable. However,
if we parsed the DIE from the object file whose functiond definition got stripped
by the linker, LLDB needs to ensure it can still resolve the function symbol it
got for it.
"""

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


@requireExpressionEvaluation
class TestFunctionCallFromObjectFile(TestBase):
    def test_lib1(self):
        self.build()
        lldbutil.run_to_name_breakpoint(self, "lib1_func")

        self.expect_expr("Foo{}.foo()", result_type="int", result_value="15")

    def test_lib2(self):
        self.build()
        lldbutil.run_to_name_breakpoint(self, "lib2_func")

        self.expect_expr("Foo{}.foo()", result_type="int", result_value="15")
