Author: jingham Date: Mon Mar 20 21:13:50 2017 New Revision: 298331 URL: http://llvm.org/viewvc/llvm-project?rev=298331&view=rev Log: FindTypes should find "struct TypeName" as well as "TypeName".
This fixes a bug introduced by r291559. The Module's FindType was passing the original name not the basename in the case where it didn't find any separators. I also added a testcase for this. <rdar://problem/31159173> Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/ lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/Makefile lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/main.c Modified: lldb/trunk/source/Core/Module.cpp Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/Makefile URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/Makefile?rev=298331&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/Makefile (added) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/Makefile Mon Mar 20 21:13:50 2017 @@ -0,0 +1,3 @@ +LEVEL = ../../../make +C_SOURCES := main.c +include $(LEVEL)/Makefile.rules Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py?rev=298331&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py (added) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/TestFindStructTypes.py Mon Mar 20 21:13:50 2017 @@ -0,0 +1,67 @@ +""" +Make sure FindTypes finds struct types with the struct prefix. +""" + +from __future__ import print_function + + +import os +import time +import re +import lldb +import lldbsuite.test.lldbutil as lldbutil +from lldbsuite.test.lldbtest import * + + +class TestFindTypesOnStructType(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + # If your test case doesn't stress debug info, the + # set this to true. That way it won't be run once for + # each debug info format. + NO_DEBUG_INFO_TESTCASE = True + + def test_find_types_struct_type(self): + """Make sure FindTypes actually finds 'struct typename' not just 'typename'.""" + self.build() + self.do_test() + + def setUp(self): + # Call super's setUp(). + TestBase.setUp(self) + + def do_test(self): + """Make sure FindTypes actually finds 'struct typename' not just 'typename'.""" + exe = os.path.join(os.getcwd(), "a.out") + + # Create a target by the debugger. + target = self.dbg.CreateTarget(exe) + self.assertTrue(target, VALID_TARGET) + + # Make sure this works with struct + type_list = target.FindTypes("struct mytype") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type with struct") + + # Make sure this works without the struct: + type_list = target.FindTypes("mytype") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type without struct") + + # Make sure it works with union + type_list = target.FindTypes("union myunion") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type with union") + + # Make sure this works without the union: + type_list = target.FindTypes("myunion") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type without union") + + # Make sure it works with typedef + type_list = target.FindTypes("typedef MyType") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type with typedef") + + # Make sure this works without the typedef: + type_list = target.FindTypes("MyType") + self.assertEqual(type_list.GetSize(), 1, "Found one instance of the type without typedef") + + + Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/main.c URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/main.c?rev=298331&view=auto ============================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/main.c (added) +++ lldb/trunk/packages/Python/lldbsuite/test/lang/c/find_struct_type/main.c Mon Mar 20 21:13:50 2017 @@ -0,0 +1,25 @@ +#include <stdio.h> +#include <stdlib.h> +struct mytype { + int c; + int d; +}; + +union myunion { + int num; + char *str; +}; + +typedef struct mytype MyType; + +int main() +{ + struct mytype v; + MyType *v_ptr = &v; + + union myunion u = {5}; + v.c = u.num; + v.d = 10; + return v.c + v.d; +} + Modified: lldb/trunk/source/Core/Module.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Module.cpp?rev=298331&r1=298330&r2=298331&view=diff ============================================================================== --- lldb/trunk/source/Core/Module.cpp (original) +++ lldb/trunk/source/Core/Module.cpp Mon Mar 20 21:13:50 2017 @@ -1032,7 +1032,7 @@ size_t Module::FindTypes( // The "type_name_cstr" will have been modified if we have a valid type // class // prefix (like "struct", "class", "union", "typedef" etc). - FindTypes_Impl(sc, ConstString(type_name_cstr), nullptr, append, + FindTypes_Impl(sc, ConstString(type_basename), nullptr, append, max_matches, searched_symbol_files, typesmap); typesmap.RemoveMismatchedTypes(type_class); num_matches = typesmap.GetSize(); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits