[msan] Test for aggregates passing through ellipsis.

llvm-svn: 203795
This commit is contained in:
Evgeniy Stepanov 2014-03-13 13:18:15 +00:00
parent 7ab838eb56
commit 9fa9a49853
1 changed files with 35 additions and 0 deletions

View File

@ -2428,6 +2428,41 @@ struct StructByVal {
int a, b, c, d, e, f;
};
static void vaargsfn_structbyval(int guard, ...) {
va_list vl;
va_start(vl, guard);
{
StructByVal s = va_arg(vl, StructByVal);
EXPECT_NOT_POISONED(s.a);
EXPECT_POISONED(s.b);
EXPECT_NOT_POISONED(s.c);
EXPECT_POISONED(s.d);
EXPECT_NOT_POISONED(s.e);
EXPECT_POISONED(s.f);
}
{
StructByVal s = va_arg(vl, StructByVal);
EXPECT_NOT_POISONED(s.a);
EXPECT_POISONED(s.b);
EXPECT_NOT_POISONED(s.c);
EXPECT_POISONED(s.d);
EXPECT_NOT_POISONED(s.e);
EXPECT_POISONED(s.f);
}
va_end(vl);
}
TEST(MemorySanitizer, VAArgStructByVal) {
StructByVal s;
s.a = 1;
s.b = *GetPoisoned<int>();
s.c = 2;
s.d = *GetPoisoned<int>();
s.e = 3;
s.f = *GetPoisoned<int>();
vaargsfn_structbyval(0, s, s);
}
NOINLINE void StructByValTestFunc(struct StructByVal s) {
EXPECT_NOT_POISONED(s.a);
EXPECT_POISONED(s.b);