| // RUN: %clangxx_msan %s -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t |
| // RUN: %clangxx_msan %s -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t |
| // RUN: %clangxx_msan %s -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && %run %t |
| #include <sanitizer/msan_interface.h> |
| // TODO: remove empty dtors when msan use-after-dtor poisons |
| // for trivial classes with undeclared dtors |
| // Force alignment to next 4 bytes |
| // Force alignment, 8 more bytes |
| Packed *p = new 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)) != |
| assert(__msan_test_shadow(e, sizeof(*e)) != -1); |
| Simple *s = new Simple(); |
| assert(__msan_test_shadow(s, sizeof(*s)) != -1); |
| assert(__msan_test_shadow(a, sizeof(*a)) != -1); |