From: Raphael Isemann Date: Mon, 10 Feb 2020 12:50:29 +0000 (+0100) Subject: [lldb] Add test for C++ constructor calls from the expression evaluator X-Git-Tag: llvmorg-12-init~15130 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=70fb447ca012728dbfa49a82136554630e188229;p=platform%2Fupstream%2Fllvm.git [lldb] Add test for C++ constructor calls from the expression evaluator --- diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/Makefile new file mode 100644 index 0000000..99998b2 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/TestCppConstructors.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/TestCppConstructors.py new file mode 100644 index 0000000..422854e --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/TestCppConstructors.py @@ -0,0 +1,26 @@ +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_constructors(self): + self.build() + lldbutil.run_to_source_breakpoint(self,"// break here", lldb.SBFileSpec("main.cpp")) + self.expect_expr("ClassWithImplicitCtor().foo()", result_type="int", result_value="1") + self.expect_expr("ClassWithMultipleCtor(3).value", result_type="int", result_value="3") + self.expect_expr("ClassWithMultipleCtor(3, 1).value", result_type="int", result_value="4") + + self.expect_expr("ClassWithDeletedCtor().value", result_type="int", result_value="6") + self.expect_expr("ClassWithDeletedDefaultCtor(7).value", result_type="int", result_value="7") + + # FIXME: It seems we try to call the non-existent default constructor here which is wrong. + self.expect("expr ClassWithDefaultedCtor().foo()", error=True, substrs="Couldn't lookup symbols:") + + # FIXME: Calling deleted constructors should fail before linking. + self.expect("expr ClassWithDeletedCtor(1).value", error=True, substrs=["Couldn't lookup symbols:"]) + self.expect("expr ClassWithDeletedDefaultCtor().value", error=True, substrs=["Couldn't lookup symbols:"]) + diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/main.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/main.cpp new file mode 100644 index 0000000..4e69b58 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/main.cpp @@ -0,0 +1,45 @@ +struct ClassWithImplicitCtor { + int foo() { return 1; } +}; + +struct ClassWithDefaultedCtor { + ClassWithDefaultedCtor() = default; + int foo() { return 2; } +}; + +struct ClassWithOneCtor { + int value; + ClassWithOneCtor(int i) { value = i; } +}; + +struct ClassWithMultipleCtor { + int value; + ClassWithMultipleCtor(int i) { value = i; } + ClassWithMultipleCtor(int i, int v) { value = v + i; } +}; + +struct ClassWithDeletedCtor { + int value; + ClassWithDeletedCtor() { value = 6; } + ClassWithDeletedCtor(int i) = delete; +}; + +struct ClassWithDeletedDefaultCtor { + int value; + ClassWithDeletedDefaultCtor() = delete; + ClassWithDeletedDefaultCtor(int i) { value = i; } +}; + +int main() { + ClassWithImplicitCtor C1; + C1.foo(); + ClassWithDefaultedCtor C2; + C2.foo(); + ClassWithOneCtor C3(22); + ClassWithMultipleCtor C4(23); + ClassWithMultipleCtor C5(24, 25); + ClassWithDeletedCtor C6; + ClassWithDeletedDefaultCtor C7(26); + + return 0; // break here +}