summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/Makefile3
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/TestCppBitfields.py105
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/main.cpp81
3 files changed, 189 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/Makefile
new file mode 100644
index 00000000000..99998b20bcb
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/TestCppBitfields.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/TestCppBitfields.py
new file mode 100644
index 00000000000..1b362e6b04f
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/TestCppBitfields.py
@@ -0,0 +1,105 @@
+"""Show bitfields and check that they display correctly."""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class CppBitfieldsTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+ # Find the line number to break inside main().
+ self.line = line_number('main.cpp', '// Set break point at this line.')
+
+ # BitFields exhibit crashes in record layout on Windows
+ # (http://llvm.org/pr21800)
+ @skipIfWindows
+ def test_and_run_command(self):
+ """Test 'frame variable ...' on a variable with bitfields."""
+ self.build()
+
+ lldbutil.run_to_source_breakpoint(self, '// Set break point at this line.',
+ lldb.SBFileSpec("main.cpp", False))
+
+ # The stop reason of the thread should be breakpoint.
+ self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+ substrs=['stopped',
+ 'stop reason = breakpoint'])
+
+ # The breakpoint should have a hit count of 1.
+ self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
+ substrs=[' resolved, hit count = 1'])
+
+ self.expect("expr (lba.a)", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=['unsigned int', '2'])
+ self.expect("expr (lbb.b)", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=['unsigned int', '3'])
+ self.expect("expr (lbc.c)", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=['unsigned int', '4'])
+ self.expect("expr (lbd.a)", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=['unsigned int', '5'])
+ self.expect("expr (clang_example.f.a)", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=['uint64_t', '1'])
+
+ self.expect(
+ "frame variable --show-types lba",
+ VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=[
+ '(int:32) = ',
+ '(unsigned int:20) a = 2',
+ ])
+
+ self.expect(
+ "frame variable --show-types lbb",
+ VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=[
+ '(unsigned int:1) a = 1',
+ '(int:31) =',
+ '(unsigned int:20) b = 3',
+ ])
+
+ self.expect(
+ "frame variable --show-types lbc",
+ VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=[
+ '(int:22) =',
+ '(unsigned int:1) a = 1',
+ '(unsigned int:1) b = 0',
+ '(unsigned int:5) c = 4',
+ '(unsigned int:1) d = 1',
+ '(int:2) =',
+ '(unsigned int:20) e = 20',
+ ])
+
+ self.expect(
+ "frame variable --show-types lbd",
+ VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=[
+ '(char [3]) arr = "ab"',
+ '(int:32) =',
+ '(unsigned int:20) a = 5',
+ ])
+
+ self.expect(
+ "frame variable --show-types clang_example",
+ VARIABLES_DISPLAYED_CORRECTLY,
+ substrs=[
+ '(int:22) =',
+ '(uint64_t:1) a = 1',
+ '(uint64_t:1) b = 0',
+ '(uint64_t:1) c = 1',
+ '(uint64_t:1) d = 0',
+ '(uint64_t:1) e = 1',
+ '(uint64_t:1) f = 0',
+ '(uint64_t:1) g = 1',
+ '(uint64_t:1) h = 0',
+ '(uint64_t:1) i = 1',
+ '(uint64_t:1) j = 0',
+ '(uint64_t:1) k = 1',
+ ])
+
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/main.cpp
new file mode 100644
index 00000000000..e43bf8c138e
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/main.cpp
@@ -0,0 +1,81 @@
+#include <stdint.h>
+
+int main(int argc, char const *argv[]) {
+ struct LargeBitsA {
+ unsigned int : 30, a : 20;
+ } lba;
+
+ struct LargeBitsB {
+ unsigned int a : 1, : 11, : 12, b : 20;
+ } lbb;
+
+ struct LargeBitsC {
+ unsigned int : 13, : 9, a : 1, b : 1, c : 5, d : 1, e : 20;
+ } lbc;
+
+ struct LargeBitsD {
+ char arr[3];
+ unsigned int : 30, a : 20;
+ } lbd;
+
+ // This case came up when debugging clang and models RecordDeclBits
+ struct BitExampleFromClangDeclContext {
+ class fields {
+ uint64_t : 13;
+ uint64_t : 9;
+
+ uint64_t a: 1;
+ uint64_t b: 1;
+ uint64_t c: 1;
+ uint64_t d: 1;
+ uint64_t e: 1;
+ uint64_t f: 1;
+ uint64_t g: 1;
+ uint64_t h: 1;
+ uint64_t i: 1;
+ uint64_t j: 1;
+ uint64_t k: 1;
+
+ // In order to reproduce the crash for this case we need the
+ // members of fields to stay private :-(
+ friend struct BitExampleFromClangDeclContext;
+ };
+
+ union {
+ struct fields f;
+ };
+
+ BitExampleFromClangDeclContext() {
+ f.a = 1;
+ f.b = 0;
+ f.c = 1;
+ f.d = 0;
+ f.e = 1;
+ f.f = 0;
+ f.g = 1;
+ f.h = 0;
+ f.i = 1;
+ f.j = 0;
+ f.k = 1;
+ }
+ } clang_example;
+
+ lba.a = 2;
+
+ lbb.a = 1;
+ lbb.b = 3;
+
+ lbc.a = 1;
+ lbc.b = 0;
+ lbc.c = 4;
+ lbc.d = 1;
+ lbc.e = 20;
+
+ lbd.arr[0] = 'a';
+ lbd.arr[1] = 'b';
+ lbd.arr[2] = '\0';
+ lbd.a = 5;
+
+
+ return 0; // Set break point at this line.
+}