Author: Raphael Isemann Date: 2021-10-06T14:51:00+02:00 New Revision: 7862728cab1b7724d2adf0f0075a3289d87ec20c
URL: https://github.com/llvm/llvm-project/commit/7862728cab1b7724d2adf0f0075a3289d87ec20c DIFF: https://github.com/llvm/llvm-project/commit/7862728cab1b7724d2adf0f0075a3289d87ec20c.diff LOG: [lldb] Rewrite and extend TestConstThis Added: lldb/test/API/lang/cpp/const_this/Makefile Modified: lldb/test/API/lang/cpp/const_this/TestConstThis.py lldb/test/API/lang/cpp/const_this/main.cpp Removed: ################################################################################ diff --git a/lldb/test/API/lang/cpp/const_this/Makefile b/lldb/test/API/lang/cpp/const_this/Makefile new file mode 100644 index 0000000000000..99998b20bcb05 --- /dev/null +++ b/lldb/test/API/lang/cpp/const_this/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/lldb/test/API/lang/cpp/const_this/TestConstThis.py b/lldb/test/API/lang/cpp/const_this/TestConstThis.py index f08c0dcbda983..b6790ff36f649 100644 --- a/lldb/test/API/lang/cpp/const_this/TestConstThis.py +++ b/lldb/test/API/lang/cpp/const_this/TestConstThis.py @@ -1,4 +1,62 @@ -from lldbsuite.test import lldbinline -from lldbsuite.test import decorators +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil -lldbinline.MakeInlineTest(__file__, globals(), []) + +class TestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + NO_DEBUG_INFO_TESTCASE = True + + def run_class_tests(self): + # Expression not referencing context class. + self.expect_expr("1 + 1", result_type="int", result_value="2") + # Referencing context class. + # FIXME: This and the expression below should return const types. + self.expect_expr("member", result_type="int", result_value="3") + # Check the type of context class. + self.expect_expr("this", result_type="ContextClass *") + + def test_member_func(self): + self.build() + lldbutil.run_to_source_breakpoint( + self, "// break in function in class.", lldb.SBFileSpec("main.cpp") + ) + self.run_class_tests() + + def test_templated_member_func(self): + self.build() + lldbutil.run_to_source_breakpoint( + self, + "// break in templated function in class.", + lldb.SBFileSpec("main.cpp"), + ) + self.run_class_tests() + + def run_template_class_tests(self): + # Expression not referencing context class. + self.expect_expr("1 + 1", result_type="int", result_value="2") + # Referencing context class. + # FIXME: This and the expression below should return const types. + self.expect_expr("member", result_type="int", result_value="4") + # Check the type of context class. + self.expect_expr("this", result_type="TemplatedContextClass<int> *") + + def test_template_member_func(self): + self.build() + lldbutil.run_to_source_breakpoint( + self, + "// break in function in templated class.", + lldb.SBFileSpec("main.cpp"), + ) + self.run_template_class_tests() + + def test_template_templated_member_func(self): + self.build() + lldbutil.run_to_source_breakpoint( + self, + "// break in templated function in templated class.", + lldb.SBFileSpec("main.cpp"), + ) + self.run_template_class_tests() diff --git a/lldb/test/API/lang/cpp/const_this/main.cpp b/lldb/test/API/lang/cpp/const_this/main.cpp index 2db14e649918d..c9bd6a3f03bb2 100644 --- a/lldb/test/API/lang/cpp/const_this/main.cpp +++ b/lldb/test/API/lang/cpp/const_this/main.cpp @@ -1,12 +1,33 @@ -class foo { -public: - template <class T> T func(T x) const { - return x+2; //% self.expect("expr 2+3", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["5"]) +struct ContextClass { + int member = 3; + ContextClass *this_type = nullptr; + ContextClass() { this_type = this; } + + int func() const { + return member; // break in function in class. + } + + template <class T> T templateFunc(T x) const { + return member; // break in templated function in class. } }; -int i; +template <typename TC> struct TemplatedContextClass { + int member = 4; + TemplatedContextClass<TC> *this_type = nullptr; + TemplatedContextClass() { this_type = this; } + + int func() const { + return member; // break in function in templated class. + } + + template <class T> T templateFunc(T x) const { + return member; // break in templated function in templated class. + } +}; int main() { - return foo().func(i); + ContextClass c; + TemplatedContextClass<int> t; + return c.func() + c.templateFunc(1) + t.func() + t.templateFunc(1); } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits