llvm-project/llvm/test/Instrumentation
Adhemerval Zanella e600c99a4e [sanitizer] [msan] Fix origin store of array types
This patch fixes the memory sanitizer origin store instrumentation for
array types.  This can be triggered by cases where frontend lowers
function return to array type instead of aggregation.

For instance, the C code:

--
struct mypair {
 int64_t x;
 int y;
};

mypair my_make_pair(int64_t x, int y)  {
 mypair p;
 p.x = x;
 p.y = y;
 return p;
}

int foo (int p)
{
  mypair z = my_make_pair(p, 0);
  return z.y + z.x;
}
--

It will be lowered with target set to aarch64-linux and -O0 to:

--
[...]
define i32 @_Z3fooi(i32 %p) #0 {
[...]
%call = call [2 x i64] @_Z12my_make_pairxi(i64 %conv, i32 0)
%1 = bitcast %struct.mypair* %z to [2 x i64]*
store [2 x i64] %call, [2 x i64]* %1, align 8
[...]
--

The origin store will emit a 'icmp' to test each store value again the
TLS origin array.  However since 'icmp' does not support ArrayType the
memory instrumentation phase will bail out with an error.

This patch change it by using the same strategy used for struct type on
array.

It fixes the 'test/msan/insertvalue_origin.cc' for aarch64 (the -O0 case).

llvm-svn: 257375
2016-01-11 19:55:27 +00:00
..
AddressSanitizer [ASAN] Add doFinalization to reset state 2015-12-05 14:42:34 +00:00
BoundsChecking Add a bunch of CHECK missing colons in tests. NFC. 2015-03-14 01:43:57 +00:00
DataFlowSanitizer [sanitizer] [dfsan] Unify aarch64 mapping 2015-11-27 12:42:39 +00:00
InstrProfiling Partial fix for PR25912, see comment 13. Should fix the sanitizer bootstrap bot 2015-12-22 01:18:49 +00:00
MemorySanitizer [sanitizer] [msan] Fix origin store of array types 2016-01-11 19:55:27 +00:00
SanitizerCoverage Create llvm.global_ctors in the new format. 2015-12-06 16:18:25 +00:00
ThreadSanitizer Revert "Change memcpy/memset/memmove to have dest and source alignments." 2015-11-19 05:56:52 +00:00