[Lldb-commits] [lldb] 70fb447 - [lldb] Add test for C++ constructor calls from the expression evaluator
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Tue Feb 11 01:48:14 PST 2020
Author: Raphael Isemann
Date: 2020-02-11T10:47:42+01:00
New Revision: 70fb447ca012728dbfa49a82136554630e188229
URL: https://github.com/llvm/llvm-project/commit/70fb447ca012728dbfa49a82136554630e188229
DIFF: https://github.com/llvm/llvm-project/commit/70fb447ca012728dbfa49a82136554630e188229.diff
LOG: [lldb] Add test for C++ constructor calls from the expression evaluator
Added:
lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/Makefile
lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/TestCppConstructors.py
lldb/packages/Python/lldbsuite/test/lang/cpp/constructors/main.cpp
Modified:
Removed:
################################################################################
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 000000000000..99998b20bcb0
--- /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 000000000000..422854e38de1
--- /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 000000000000..4e69b58abb00
--- /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
+}
More information about the lldb-commits
mailing list