mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-21 12:35:47 -04:00

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.
82 lines
1.4 KiB
C++
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.
|
|
}
|