#include <sanitizer/msan_interface.h>
#include <assert.h>
struct Packed {
unsigned int a : 1;
unsigned int b : 1;
unsigned int : 0;
unsigned int c : 1;
double d = 5.0;
unsigned int e : 1;
~Packed() {}
};
struct Empty {
unsigned int : 0;
~Empty() {}
};
struct Simple {
unsigned int a : 1;
~Simple() {}
};
struct Anon {
unsigned int a : 1;
unsigned int b : 2;
unsigned int : 0;
unsigned int c : 1;
~Anon() {}
};
int main() {
Packed *p = new Packed();
p->~Packed();
for (int i = 0; i < 4; i++)
assert(__msan_test_shadow(((char*)p) + i, sizeof(char)) != -1);
assert(__msan_test_shadow(&p->d, sizeof(double)) != -1);
assert(__msan_test_shadow(((char*)(&p->d)) + sizeof(double), sizeof(char)) !=
-1);
Empty *e = new Empty();
e->~Empty();
assert(__msan_test_shadow(e, sizeof(*e)) != -1);
Simple *s = new Simple();
s->~Simple();
assert(__msan_test_shadow(s, sizeof(*s)) != -1);
Anon *a = new Anon();
a->~Anon();
assert(__msan_test_shadow(a, sizeof(*a)) != -1);
return 0;
}