[formatters] Add a libstdcpp formatter for multimap and unify modify tests across...
authorDanil Stefaniuc <danilashtefan@gmail.com>
Sat, 30 Oct 2021 19:53:19 +0000 (12:53 -0700)
committerWalter Erquinigo <wallace@fb.com>
Sat, 30 Oct 2021 19:53:32 +0000 (12:53 -0700)
This diff adds a data formatter for libstdcpp's multimap. Besides, it improves and unifies the tests for multimap for libcxx and libstdcpp for maintainability.

Reviewed By: wallace

Differential Revision: https://reviews.llvm.org/D112752

lldb/examples/synthetic/gnu_libstdcpp.py
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile [new file with mode: 0644]
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py [new file with mode: 0644]
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp [new file with mode: 0644]
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile [deleted file]
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py [deleted file]
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp [deleted file]

index 21c89754c08252fb619e2d4390525afdfdf13c86..dd07195d6ec80e57c1c252c14bd30445646e79ef 100644 (file)
@@ -315,10 +315,10 @@ class StdVectorSynthProvider:
         return True
 
     """
-    Set and Map have the same underlying data structure,
-    therefore we can use exactly the same implementation for the formatter.
+     This formatter can be applied to all
+     map-like structures (map, multimap, set, multiset)
     """
-class StdSetOrMapSynthProvider:
+class StdMapLikeSynthProvider:
 
     def __init__(self, valobj, dict):
         logger = lldb.formatters.Logger.Logger()
index 626c5a5a8282c60530d97d427af7f21f036cd4fe..7b64faa6d6ed38e1d74f656866c637fd739d509b 100644 (file)
@@ -902,12 +902,17 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
       RegularExpression("^std::map<.+> >(( )?&)?$"),
       SyntheticChildrenSP(new ScriptedSyntheticChildren(
           stl_synth_flags,
-          "lldb.formatters.cpp.gnu_libstdcpp.StdSetOrMapSynthProvider")));
+          "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
   cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
       RegularExpression("^std::set<.+> >(( )?&)?$"),
       SyntheticChildrenSP(new ScriptedSyntheticChildren(
           stl_deref_flags,
-          "lldb.formatters.cpp.gnu_libstdcpp.StdSetOrMapSynthProvider")));
+          "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
+  cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
+      RegularExpression("^std::multimap<.+> >(( )?&)?$"),
+      SyntheticChildrenSP(new ScriptedSyntheticChildren(
+          stl_deref_flags,
+          "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
   cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
       RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
       SyntheticChildrenSP(new ScriptedSyntheticChildren(
@@ -931,6 +936,10 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
       RegularExpression("^std::set<.+> >(( )?&)?$"),
       TypeSummaryImplSP(
           new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
+  cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
+      RegularExpression("^std::multimap<.+> >(( )?&)?$"),
+      TypeSummaryImplSP(
+          new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
   cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
       RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
       TypeSummaryImplSP(
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile
new file mode 100644 (file)
index 0000000..99998b2
--- /dev/null
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py
new file mode 100644 (file)
index 0000000..b909649
--- /dev/null
@@ -0,0 +1,329 @@
+"""
+Test lldb data formatter subsystem.
+"""
+
+
+
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+USE_LIBSTDCPP = "USE_LIBSTDCPP"
+USE_LIBCPP = "USE_LIBCPP"
+
+class GenericMultiMapDataFormatterTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    def setUp(self):
+        TestBase.setUp(self)
+        self.namespace = 'std'
+    
+    def findVariable(self, name):
+        var = self.frame().FindVariable(name)
+        self.assertTrue(var.IsValid())
+        return var
+
+    def getVariableType(self, name):
+        var = self.findVariable(name)
+        return var.GetType().GetDisplayTypeName()
+
+    def check(self, var_name, size):
+        var = self.findVariable(var_name)
+        self.assertEqual(var.GetNumChildren(), size)
+        children = []
+        for i in range(size):
+            child = var.GetChildAtIndex(i)
+            children.append(ValueCheck(value=child.GetValue()))
+        self.expect_var_path(var_name, type=self.getVariableType(var_name), children=children)
+
+    def do_test_with_run_command(self, stdlib_type):
+        """Test that that file and class static variables display correctly."""
+        self.build(dictionary={stdlib_type: "1"})
+        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
+
+        bkpt = self.target().FindBreakpointByID(
+            lldbutil.run_break_set_by_source_regexp(
+                self, "Set break point at this line."))
+
+        self.runCmd("run", RUN_SUCCEEDED)
+
+        # The stop reason of the thread should be breakpoint.
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+                    substrs=['stopped',
+                             'stop reason = breakpoint'])
+
+        # This is the function to remove the custom formats in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('type format clear', check=False)
+            self.runCmd('type summary clear', check=False)
+            self.runCmd('type filter clear', check=False)
+            self.runCmd('type synth clear', check=False)
+            self.runCmd(
+                "settings set target.max-children-count 256",
+                check=False)
+
+        # Execute the cleanup function during test case tear down.
+        self.addTearDownHook(cleanup)
+
+        multimap = self.namespace + "::multimap"
+        self.expect('frame variable ii',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect(
+            'frame variable ii',
+            substrs=[
+                multimap,
+                'size=2',
+                '[0] = (first = 0, second = 0)',
+                '[1] = (first = 1, second = 1)',
+            ])
+        
+        self.check("ii", 2)
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable ii',
+                    substrs=[multimap, 'size=4',
+                             '[2] = ',
+                             'first = 2',
+                             'second = 0',
+                             '[3] = ',
+                             'first = 3',
+                             'second = 1'])
+        
+        self.check("ii", 4)
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect("frame variable ii",
+                    substrs=[multimap, 'size=8',
+                             '[5] = ',
+                             'first = 5',
+                             'second = 0',
+                             '[7] = ',
+                             'first = 7',
+                             'second = 1'])
+
+        self.check("ii", 8)
+
+        self.expect("p ii",
+                    substrs=[multimap, 'size=8',
+                             '[5] = ',
+                             'first = 5',
+                             'second = 0',
+                             '[7] = ',
+                             'first = 7',
+                             'second = 1'])
+
+        # check access-by-index
+        self.expect("frame variable ii[0]",
+                    substrs=['first = 0',
+                             'second = 0'])
+        self.expect("frame variable ii[3]",
+                    substrs=['first =',
+                             'second ='])
+
+        # check that MightHaveChildren() gets it right
+        self.assertTrue(
+            self.frame().FindVariable("ii").MightHaveChildren(),
+            "ii.MightHaveChildren() says False for non empty!")
+
+        # check that the expression parser does not make use of
+        # synthetic children instead of running code
+        # TOT clang has a fix for this, which makes the expression command here succeed
+        # since this would make the test fail or succeed depending on clang version in use
+        # this is safer commented for the time being
+        # self.expect("expression ii[8]", matching=False, error=True,
+        #            substrs = ['1234567'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable ii',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        self.expect('frame variable si',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable si',
+                    substrs=[multimap, 'size=1',
+                             '[0] = ',
+                             'first = \"zero\"',
+                             'second = 0'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect(
+            "frame variable si",
+            substrs=[
+                multimap,
+                'size=4',
+                '[0] = (first = "one", second = 1)',
+                '[1] = (first = "three", second = 3)',
+                '[2] = (first = "two", second = 2)',
+                '[3] = (first = "zero", second = 0)',
+            ])
+
+        self.expect("p si",
+                    substrs=[multimap, 'size=4',
+                '[0] = (first = "one", second = 1)',
+                '[1] = (first = "three", second = 3)',
+                '[2] = (first = "two", second = 2)',
+                '[3] = (first = "zero", second = 0)',
+            ])
+
+        # check that MightHaveChildren() gets it right
+        self.assertTrue(
+            self.frame().FindVariable("si").MightHaveChildren(),
+            "si.MightHaveChildren() says False for non empty!")
+
+        # check access-by-index
+        self.expect("frame variable si[0]",
+                    substrs=['first = ', 'one',
+                             'second = 1'])
+
+        # check that the expression parser does not make use of
+        # synthetic children instead of running code
+        # TOT clang has a fix for this, which makes the expression command here succeed
+        # since this would make the test fail or succeed depending on clang version in use
+        # this is safer commented for the time being
+        # self.expect("expression si[0]", matching=False, error=True,
+        #            substrs = ['first = ', 'zero'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable si',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable is',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect(
+            "frame variable is",
+            substrs=[
+                multimap,
+                'size=4',
+                '[0] = (first = 1, second = "is")',
+                '[1] = (first = 2, second = "smart")',
+                '[2] = (first = 3, second = "!!!")',
+                '[3] = (first = 85, second = "goofy")',
+            ])
+
+        self.expect(
+            "p is",
+            substrs=[
+                multimap,
+                'size=4',
+                '[0] = (first = 1, second = "is")',
+                '[1] = (first = 2, second = "smart")',
+                '[2] = (first = 3, second = "!!!")',
+                '[3] = (first = 85, second = "goofy")',
+            ])
+
+        # check that MightHaveChildren() gets it right
+        self.assertTrue(
+            self.frame().FindVariable("is").MightHaveChildren(),
+            "is.MightHaveChildren() says False for non empty!")
+
+        # check access-by-index
+        self.expect("frame variable is[0]",
+                    substrs=['first = ',
+                             'second ='])
+
+        # check that the expression parser does not make use of
+        # synthetic children instead of running code
+        # TOT clang has a fix for this, which makes the expression command here succeed
+        # since this would make the test fail or succeed depending on clang version in use
+        # this is safer commented for the time being
+        # self.expect("expression is[0]", matching=False, error=True,
+        #            substrs = ['first = ', 'goofy'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable is',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        self.check("is", 0)
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable ss',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        self.check("ss", 0)
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect(
+            "frame variable ss",
+            substrs=[
+                multimap,
+                'size=3',
+                '[0] = (first = "casa", second = "house")',
+                '[1] = (first = "ciao", second = "hello")',
+                '[2] = (first = "gatto", second = "cat")',
+            ])
+
+        self.check("ss", 3)
+
+        self.expect(
+            "p ss",
+            substrs=[
+                multimap,
+                'size=3',
+                '[0] = (first = "casa", second = "house")',
+                '[1] = (first = "ciao", second = "hello")',
+                '[2] = (first = "gatto", second = "cat")',
+            ])
+
+        # check that MightHaveChildren() gets it right
+        self.assertTrue(
+            self.frame().FindVariable("ss").MightHaveChildren(),
+            "ss.MightHaveChildren() says False for non empty!")
+
+        # check access-by-index
+        self.expect("frame variable ss[2]",
+                    substrs=['gatto', 'cat'])
+
+        # check that the expression parser does not make use of
+        # synthetic children instead of running code
+        # TOT clang has a fix for this, which makes the expression command here succeed
+        # since this would make the test fail or succeed depending on clang version in use
+        # this is safer commented for the time being
+        # self.expect("expression ss[3]", matching=False, error=True,
+        #            substrs = ['gatto'])
+
+        lldbutil.continue_to_breakpoint(self.process(), bkpt)
+
+        self.expect('frame variable ss',
+                    substrs=[multimap, 'size=0',
+                             '{}'])
+
+        self.check("ss", 0)
+
+    @add_test_categories(["libstdcxx"])
+    def test_with_run_command_libstdcpp(self):
+        self.do_test_with_run_command(USE_LIBSTDCPP)
+
+    @add_test_categories(["libc++"])
+    def test_with_run_command_libcpp(self):
+        self.do_test_with_run_command(USE_LIBCPP)
+    
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp
new file mode 100644 (file)
index 0000000..27bdc0a
--- /dev/null
@@ -0,0 +1,77 @@
+#include <string>
+#include <map>
+
+#define intint_map std::multimap<int, int> 
+#define strint_map std::multimap<std::string, int> 
+#define intstr_map std::multimap<int, std::string> 
+#define strstr_map std::multimap<std::string, std::string> 
+
+int g_the_foo = 0;
+
+int thefoo_rw(int arg = 1)
+{
+       if (arg < 0)
+               arg = 0;
+       if (!arg)
+               arg = 1;
+       g_the_foo += arg;
+       return g_the_foo;
+}
+
+int main()
+{
+    intint_map ii;
+    
+    ii.emplace(0,0); // Set break point at this line.
+    ii.emplace(1,1);
+       thefoo_rw(1);  // Set break point at this line.
+    ii.emplace(2,0);
+       ii.emplace(3,1);
+       thefoo_rw(1);  // Set break point at this line.
+       ii.emplace(4,0);
+       ii.emplace(5,1);
+       ii.emplace(6,0);
+       ii.emplace(7,1);
+    thefoo_rw(1);  // Set break point at this line.
+    ii.emplace(85,1234567);
+
+    ii.clear();
+    
+    strint_map si;
+    thefoo_rw(1);  // Set break point at this line.
+       
+    si.emplace("zero",0);
+       thefoo_rw(1);  // Set break point at this line.
+       si.emplace("one",1);
+       si.emplace("two",2);
+       si.emplace("three",3);
+       thefoo_rw(1);  // Set break point at this line.
+       si.emplace("four",4);
+
+    si.clear();
+    thefoo_rw(1);  // Set break point at this line.
+       
+    intstr_map is;
+    thefoo_rw(1);  // Set break point at this line.
+    is.emplace(85,"goofy");
+    is.emplace(1,"is");
+    is.emplace(2,"smart");
+    is.emplace(3,"!!!");
+    thefoo_rw(1);  // Set break point at this line.
+       
+    is.clear();
+    thefoo_rw(1);  // Set break point at this line.
+       
+    strstr_map ss;
+    thefoo_rw(1);  // Set break point at this line.
+       
+    ss.emplace("ciao","hello");
+    ss.emplace("casa","house");
+    ss.emplace("gatto","cat");
+    thefoo_rw(1);  // Set break point at this line.
+    ss.emplace("a Mac..","..is always a Mac!");
+    
+    ss.clear();
+    thefoo_rw(1);  // Set break point at this line.    
+    return 0;
+}
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile
deleted file mode 100644 (file)
index 564cbad..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-CXX_SOURCES := main.cpp
-
-USE_LIBCPP := 1
-
-CXXFLAGS_EXTRAS := -O0
-include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py
deleted file mode 100644 (file)
index 3fd2575..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-"""
-Test lldb data formatter subsystem.
-"""
-
-
-
-import lldb
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test.decorators import *
-from lldbsuite.test.lldbtest import *
-from lldbsuite.test import lldbutil
-
-
-class LibcxxMultiMapDataFormatterTestCase(TestBase):
-
-    mydir = TestBase.compute_mydir(__file__)
-
-    def setUp(self):
-        TestBase.setUp(self)
-        self.namespace = 'std'
-
-    @add_test_categories(["libc++"])
-    def test_with_run_command(self):
-        """Test that that file and class static variables display correctly."""
-        self.build()
-        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
-
-        bkpt = self.target().FindBreakpointByID(
-            lldbutil.run_break_set_by_source_regexp(
-                self, "Set break point at this line."))
-
-        self.runCmd("run", RUN_SUCCEEDED)
-
-        # The stop reason of the thread should be breakpoint.
-        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
-                    substrs=['stopped',
-                             'stop reason = breakpoint'])
-
-        # This is the function to remove the custom formats in order to have a
-        # clean slate for the next test case.
-        def cleanup():
-            self.runCmd('type format clear', check=False)
-            self.runCmd('type summary clear', check=False)
-            self.runCmd('type filter clear', check=False)
-            self.runCmd('type synth clear', check=False)
-            self.runCmd(
-                "settings set target.max-children-count 256",
-                check=False)
-
-        # Execute the cleanup function during test case tear down.
-        self.addTearDownHook(cleanup)
-
-        multimap = self.namespace + "::multimap"
-        self.expect('frame variable ii',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect(
-            'frame variable ii',
-            substrs=[
-                multimap,
-                'size=2',
-                '[0] = (first = 0, second = 0)',
-                '[1] = (first = 1, second = 1)',
-            ])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable ii',
-                    substrs=[multimap, 'size=4',
-                             '[2] = ',
-                             'first = 2',
-                             'second = 0',
-                             '[3] = ',
-                             'first = 3',
-                             'second = 1'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect("frame variable ii",
-                    substrs=[multimap, 'size=8',
-                             '[5] = ',
-                             'first = 5',
-                             'second = 0',
-                             '[7] = ',
-                             'first = 7',
-                             'second = 1'])
-
-        self.expect("p ii",
-                    substrs=[multimap, 'size=8',
-                             '[5] = ',
-                             'first = 5',
-                             'second = 0',
-                             '[7] = ',
-                             'first = 7',
-                             'second = 1'])
-
-        # check access-by-index
-        self.expect("frame variable ii[0]",
-                    substrs=['first = 0',
-                             'second = 0'])
-        self.expect("frame variable ii[3]",
-                    substrs=['first =',
-                             'second ='])
-
-        # check that MightHaveChildren() gets it right
-        self.assertTrue(
-            self.frame().FindVariable("ii").MightHaveChildren(),
-            "ii.MightHaveChildren() says False for non empty!")
-
-        # check that the expression parser does not make use of
-        # synthetic children instead of running code
-        # TOT clang has a fix for this, which makes the expression command here succeed
-        # since this would make the test fail or succeed depending on clang version in use
-        # this is safer commented for the time being
-        # self.expect("expression ii[8]", matching=False, error=True,
-        #            substrs = ['1234567'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable ii',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        self.expect('frame variable si',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable si',
-                    substrs=[multimap, 'size=1',
-                             '[0] = ',
-                             'first = \"zero\"',
-                             'second = 0'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect(
-            "frame variable si",
-            substrs=[
-                multimap,
-                'size=4',
-                '[0] = (first = "one", second = 1)',
-                '[1] = (first = "three", second = 3)',
-                '[2] = (first = "two", second = 2)',
-                '[3] = (first = "zero", second = 0)',
-            ])
-
-        self.expect("p si",
-                    substrs=[multimap, 'size=4',
-                '[0] = (first = "one", second = 1)',
-                '[1] = (first = "three", second = 3)',
-                '[2] = (first = "two", second = 2)',
-                '[3] = (first = "zero", second = 0)',
-            ])
-
-        # check that MightHaveChildren() gets it right
-        self.assertTrue(
-            self.frame().FindVariable("si").MightHaveChildren(),
-            "si.MightHaveChildren() says False for non empty!")
-
-        # check access-by-index
-        self.expect("frame variable si[0]",
-                    substrs=['first = ', 'one',
-                             'second = 1'])
-
-        # check that the expression parser does not make use of
-        # synthetic children instead of running code
-        # TOT clang has a fix for this, which makes the expression command here succeed
-        # since this would make the test fail or succeed depending on clang version in use
-        # this is safer commented for the time being
-        # self.expect("expression si[0]", matching=False, error=True,
-        #            substrs = ['first = ', 'zero'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable si',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable is',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect(
-            "frame variable is",
-            substrs=[
-                multimap,
-                'size=4',
-                '[0] = (first = 1, second = "is")',
-                '[1] = (first = 2, second = "smart")',
-                '[2] = (first = 3, second = "!!!")',
-                '[3] = (first = 85, second = "goofy")',
-            ])
-
-        self.expect(
-            "p is",
-            substrs=[
-                multimap,
-                'size=4',
-                '[0] = (first = 1, second = "is")',
-                '[1] = (first = 2, second = "smart")',
-                '[2] = (first = 3, second = "!!!")',
-                '[3] = (first = 85, second = "goofy")',
-            ])
-
-        # check that MightHaveChildren() gets it right
-        self.assertTrue(
-            self.frame().FindVariable("is").MightHaveChildren(),
-            "is.MightHaveChildren() says False for non empty!")
-
-        # check access-by-index
-        self.expect("frame variable is[0]",
-                    substrs=['first = ',
-                             'second ='])
-
-        # check that the expression parser does not make use of
-        # synthetic children instead of running code
-        # TOT clang has a fix for this, which makes the expression command here succeed
-        # since this would make the test fail or succeed depending on clang version in use
-        # this is safer commented for the time being
-        # self.expect("expression is[0]", matching=False, error=True,
-        #            substrs = ['first = ', 'goofy'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable is',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable ss',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect(
-            "frame variable ss",
-            substrs=[
-                multimap,
-                'size=3',
-                '[0] = (first = "casa", second = "house")',
-                '[1] = (first = "ciao", second = "hello")',
-                '[2] = (first = "gatto", second = "cat")',
-            ])
-
-        self.expect(
-            "p ss",
-            substrs=[
-                multimap,
-                'size=3',
-                '[0] = (first = "casa", second = "house")',
-                '[1] = (first = "ciao", second = "hello")',
-                '[2] = (first = "gatto", second = "cat")',
-            ])
-
-        # check that MightHaveChildren() gets it right
-        self.assertTrue(
-            self.frame().FindVariable("ss").MightHaveChildren(),
-            "ss.MightHaveChildren() says False for non empty!")
-
-        # check access-by-index
-        self.expect("frame variable ss[2]",
-                    substrs=['gatto', 'cat'])
-
-        # check that the expression parser does not make use of
-        # synthetic children instead of running code
-        # TOT clang has a fix for this, which makes the expression command here succeed
-        # since this would make the test fail or succeed depending on clang version in use
-        # this is safer commented for the time being
-        # self.expect("expression ss[3]", matching=False, error=True,
-        #            substrs = ['gatto'])
-
-        lldbutil.continue_to_breakpoint(self.process(), bkpt)
-
-        self.expect('frame variable ss',
-                    substrs=[multimap, 'size=0',
-                             '{}'])
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp
deleted file mode 100644 (file)
index 27bdc0a..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#include <string>
-#include <map>
-
-#define intint_map std::multimap<int, int> 
-#define strint_map std::multimap<std::string, int> 
-#define intstr_map std::multimap<int, std::string> 
-#define strstr_map std::multimap<std::string, std::string> 
-
-int g_the_foo = 0;
-
-int thefoo_rw(int arg = 1)
-{
-       if (arg < 0)
-               arg = 0;
-       if (!arg)
-               arg = 1;
-       g_the_foo += arg;
-       return g_the_foo;
-}
-
-int main()
-{
-    intint_map ii;
-    
-    ii.emplace(0,0); // Set break point at this line.
-    ii.emplace(1,1);
-       thefoo_rw(1);  // Set break point at this line.
-    ii.emplace(2,0);
-       ii.emplace(3,1);
-       thefoo_rw(1);  // Set break point at this line.
-       ii.emplace(4,0);
-       ii.emplace(5,1);
-       ii.emplace(6,0);
-       ii.emplace(7,1);
-    thefoo_rw(1);  // Set break point at this line.
-    ii.emplace(85,1234567);
-
-    ii.clear();
-    
-    strint_map si;
-    thefoo_rw(1);  // Set break point at this line.
-       
-    si.emplace("zero",0);
-       thefoo_rw(1);  // Set break point at this line.
-       si.emplace("one",1);
-       si.emplace("two",2);
-       si.emplace("three",3);
-       thefoo_rw(1);  // Set break point at this line.
-       si.emplace("four",4);
-
-    si.clear();
-    thefoo_rw(1);  // Set break point at this line.
-       
-    intstr_map is;
-    thefoo_rw(1);  // Set break point at this line.
-    is.emplace(85,"goofy");
-    is.emplace(1,"is");
-    is.emplace(2,"smart");
-    is.emplace(3,"!!!");
-    thefoo_rw(1);  // Set break point at this line.
-       
-    is.clear();
-    thefoo_rw(1);  // Set break point at this line.
-       
-    strstr_map ss;
-    thefoo_rw(1);  // Set break point at this line.
-       
-    ss.emplace("ciao","hello");
-    ss.emplace("casa","house");
-    ss.emplace("gatto","cat");
-    thefoo_rw(1);  // Set break point at this line.
-    ss.emplace("a Mac..","..is always a Mac!");
-    
-    ss.clear();
-    thefoo_rw(1);  // Set break point at this line.    
-    return 0;
-}