diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/Makefile new file mode 100644 index 0000000000000..99998b20bcb05 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/TestCppMultipleInheritance.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/TestCppMultipleInheritance.py new file mode 100644 index 0000000000000..defd4bd5df5fe --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/TestCppMultipleInheritance.py @@ -0,0 +1,35 @@ +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class TestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test(self): + self.build() + lldbutil.run_to_source_breakpoint(self,"// break here", lldb.SBFileSpec("main.cpp")) + + # Member access + self.expect_expr("C.Base1::m_base", result_type="int", result_value="11") + self.expect_expr("C.Base2::m_base", result_type="int", result_value="12") + self.expect_expr("C.m1", result_type="int", result_value="22") + self.expect_expr("C.m2", result_type="int", result_value="33") + self.expect_expr("C.m_final", result_type="int", result_value="44") + + # Virtual functions + self.expect_expr("C.Base1::virt_base()", result_type="int", result_value="111") + self.expect_expr("C.Base2::virt_base()", result_type="int", result_value="121") + self.expect_expr("C.virt1()", result_type="int", result_value="3") + self.expect_expr("C.virt2()", result_type="int", result_value="5") + self.expect_expr("C.final_virt()", result_type="int", result_value="7") + self.expect_expr("C.virt_common()", result_type="int", result_value="444") + + # Normal functions + self.expect_expr("C.Base1::func_base()", result_type="int", result_value="112") + self.expect_expr("C.Base2::func_base()", result_type="int", result_value="122") + self.expect_expr("C.func1()", result_type="int", result_value="4") + self.expect_expr("C.func2()", result_type="int", result_value="6") + self.expect_expr("C.final_func()", result_type="int", result_value="8") + self.expect_expr("C.func_common()", result_type="int", result_value="888") diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/main.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/main.cpp new file mode 100644 index 0000000000000..62c40a52a150c --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/multiple-inheritance/main.cpp @@ -0,0 +1,52 @@ +struct CommonBase { + int m_base; + int virt_base_val; + int func_base_val; + virtual int virt_base() { return virt_base_val; } + virtual int virt_common() { return 555; } + int func_base() { return func_base_val; } + int func_common() { return 777; } +}; + +struct Base1 : CommonBase { + int m1 = 22; + Base1() { + // Give the base functions/members unique values. + virt_base_val = 111; + func_base_val = 112; + m_base = 11; + } + virtual int virt1() { return 3; } + int func1() { return 4; } +}; + +struct Base2 : CommonBase { + int m2 = 33; + Base2() { + // Give the base functions/members unique values. + virt_base_val = 121; + func_base_val = 122; + m_base = 12; + } + virtual int virt2() { return 5; } + int func2() { return 6; } +}; + +struct FinalClass : Base1, Base2 { + int m_final = 44; + virtual int final_virt() { return 7; } + int final_func() { return 8; } + virtual int virt_common() { return 444; } + int func_common() { return 888; } +}; + +int main() { + FinalClass C; + // Call functions so they get emitted. + C.func1(); + C.func2(); + C.final_func(); + C.func_common(); + C.Base1::func_base(); + return 0; // break here +}