summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python
diff options
context:
space:
mode:
authorAdrian Prantl <aprantl@apple.com>2019-12-09 16:38:19 -0800
committerAdrian Prantl <aprantl@apple.com>2019-12-10 15:53:40 -0800
commit62a6d9770450f93a2dcdf04710a73341af2f54fa (patch)
tree6f0b5fff1b91d2f203db94cf1bd5dd0606e54906 /lldb/packages/Python
parent44c167ace998b41b7f8cbe6acd283c8ba9b0b5a3 (diff)
downloadbcm5719-llvm-62a6d9770450f93a2dcdf04710a73341af2f54fa.tar.gz
bcm5719-llvm-62a6d9770450f93a2dcdf04710a73341af2f54fa.zip
Do not cache hardcoded formats in FormatManager
The cache in FormatCache uses only a type name as key. The hardcoded formats, synthetic children, etc inspect an entire ValueObject to determine their eligibility, which isn't modelled in the cache. This leads to bugs such as the one in this patch (where two similarly named types in different files have different hardcoded summary providers). The problem is exaggerated in the Swift language plugin due to the language's dynamic nature. rdar://problem/57756763 Differential Revision: https://reviews.llvm.org/D71233
Diffstat (limited to 'lldb/packages/Python')
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/Makefile3
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/TestDataFormatterCaching.py27
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/a.c7
-rw-r--r--lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/b.c8
4 files changed, 45 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/Makefile b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/Makefile
new file mode 100644
index 00000000000..224ecc3c2f5
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := a.c b.c
+
+include Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/TestDataFormatterCaching.py b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/TestDataFormatterCaching.py
new file mode 100644
index 00000000000..8b906506a5b
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/TestDataFormatterCaching.py
@@ -0,0 +1,27 @@
+import lldb
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test.decorators import *
+import lldbsuite.test.lldbutil as lldbutil
+
+
+class TestDataFormatterCaching(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ def setUp(self):
+ TestBase.setUp(self)
+
+ def test_with_run_command(self):
+ """
+ Test that hardcoded summary formatter matches aren't improperly cached.
+ """
+ self.build()
+ target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
+ self, 'break here', lldb.SBFileSpec('a.c'))
+ valobj = self.frame().FindVariable('f')
+ self.assertEqual(valobj.GetValue(), '4')
+ bkpt_b = target.BreakpointCreateBySourceRegex('break here',
+ lldb.SBFileSpec('b.c'))
+ lldbutil.continue_to_breakpoint(process, bkpt_b)
+ valobj = self.frame().FindVariable('f4')
+ self.assertEqual(valobj.GetSummary(), '(1, 2, 3, 4)')
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/a.c b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/a.c
new file mode 100644
index 00000000000..ab0b6f5bd5e
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/a.c
@@ -0,0 +1,7 @@
+typedef float float4;
+
+int main() {
+ float4 f = 4.0f;
+ // break here
+ return a();
+}
diff --git a/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/b.c b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/b.c
new file mode 100644
index 00000000000..0d37c54aa33
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-caching/b.c
@@ -0,0 +1,8 @@
+typedef float float4 __attribute__((ext_vector_type(4)));
+void stop() {}
+int a() {
+ float4 f4 = {1, 2, 3, 4};
+ // break here
+ stop();
+ return 0;
+}
OpenPOWER on IntegriCloud