From 2b65c0d1cf2a28274d7dc5a5acca9930a5a81c11 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Tue, 22 Jan 2013 12:31:39 +0000 Subject: [PATCH] [msan] Test handling of volatile bitfields. llvm-svn: 173154 --- compiler-rt/lib/msan/tests/msan_test.cc | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/compiler-rt/lib/msan/tests/msan_test.cc b/compiler-rt/lib/msan/tests/msan_test.cc index e8a64c2f13b0..8053423e58fc 100644 --- a/compiler-rt/lib/msan/tests/msan_test.cc +++ b/compiler-rt/lib/msan/tests/msan_test.cc @@ -1325,6 +1325,22 @@ TEST(MemorySanitizer, SignedCompareWithZero) { EXPECT_UMR(applySlt(0xF, 0xFFFFFFFF)); } +// Volatile bitfield store is implemented as load-mask-store +// Test that we don't warn on the store of (uninitialized) padding. +struct VolatileBitfieldStruct { + volatile unsigned x : 1; + unsigned y : 1; +}; + +TEST(MemorySanitizer, VolatileBitfield) { + VolatileBitfieldStruct *S = new VolatileBitfieldStruct; + S->x = 1; + unsigned tmp = S->x; + EXPECT_NOT_POISONED(tmp); + tmp = S->y; + EXPECT_POISONED(S->y); +} + TEST(MemorySanitizerDr, StoreInDSOTest) { if (!__msan_has_dynamic_component()) return; char* s = new char[10];