teak-llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/bitfields/main.cpp
Pavel Labath 77cedb0cdb [lldb] Fix nondeterminism in TestCppBitfields
The test was printing a char[3] variable without a terminating nul. The
memory after that variable (an unnamed bitfield) was not initialized. If
the memory happened to be nonzero, the summary provider for the variable
would run off into the next field.

This is probably not the right behavior (it should stop at the end of
the array), but this is not the purpose of this test. I have filed
pr44649 for this bug, and fixed the test to not depend on this behavior.
2020-01-24 12:09:20 +01:00

82 lines
1.4 KiB
C++

#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.
}