diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -2499,6 +2499,7 @@ case clang::Type::Decltype: case clang::Type::Elaborated: case clang::Type::Paren: + case clang::Type::TemplateSpecialization: case clang::Type::Typedef: case clang::Type::TypeOf: case clang::Type::TypeOfExpr: diff --git a/lldb/test/API/lang/cpp/template-specialization-type/Makefile b/lldb/test/API/lang/cpp/template-specialization-type/Makefile new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/template-specialization-type/Makefile @@ -0,0 +1,3 @@ +CXX_SOURCES := main.cpp + +include Makefile.rules diff --git a/lldb/test/API/lang/cpp/template-specialization-type/TestTemplateSpecializationType.py b/lldb/test/API/lang/cpp/template-specialization-type/TestTemplateSpecializationType.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/template-specialization-type/TestTemplateSpecializationType.py @@ -0,0 +1,30 @@ +""" +Test value with a template specialization type. +""" +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TemplateSpecializationTypeTestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test_template_specialization_cast_children(self): + self.build() + lldbutil.run_to_source_breakpoint(self, '// break here', + lldb.SBFileSpec("main.cpp", False)) + + v = self.frame().EvaluateExpression("t") + self.assertEquals(2, v.GetNumChildren()) + self.assertEquals("42", v.GetChildAtIndex(0).GetValue()) + self.assertEquals("21", v.GetChildAtIndex(1).GetValue()) + + # Test a value of the TemplateSpecialization type. We turn + # RecordType into TemplateSpecializationType by casting and + # dereferencing a pointer to a record. + v = self.frame().EvaluateExpression("*((TestObj*)&t)") + self.assertEquals(2, v.GetNumChildren()) + self.assertEquals("42", v.GetChildAtIndex(0).GetValue()) + self.assertEquals("21", v.GetChildAtIndex(1).GetValue()) diff --git a/lldb/test/API/lang/cpp/template-specialization-type/main.cpp b/lldb/test/API/lang/cpp/template-specialization-type/main.cpp new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/template-specialization-type/main.cpp @@ -0,0 +1,9 @@ +template struct TestObj { + int f; + T g; +}; + +int main() { + TestObj t{42, 21}; + return t.f + t.g; // break here +}