summaryrefslogtreecommitdiff
path: root/gcc/asan.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2017-04-05 13:17:15 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2017-04-05 13:17:15 +0000
commit6dc833787d9293dfc04cf56f02ac27ffaf2b4b99 (patch)
tree6423301157ac4961d6e04ab24b1d64431a50dfac /gcc/asan.c
parent3c342e7564a0f8d907a2cf9007afa10c190791af (diff)
downloadgcc-6dc833787d9293dfc04cf56f02ac27ffaf2b4b99.tar.gz
PR sanitizer/80308
* asan.c (asan_store_shadow_bytes): Fix location of last_chunk_value for big endian. * c-c++-common/asan/pr80308.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@246703 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/asan.c')
-rw-r--r--gcc/asan.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/asan.c b/gcc/asan.c
index f1098cbffac..bf564a46b28 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -2757,10 +2757,13 @@ asan_store_shadow_bytes (gimple_stmt_iterator *iter, location_t loc,
unsigned char c = (char) is_clobber ? ASAN_STACK_MAGIC_USE_AFTER_SCOPE : 0;
unsigned HOST_WIDE_INT val = 0;
+ unsigned last_pos = size;
+ if (last_chunk_size && !is_clobber)
+ last_pos = BYTES_BIG_ENDIAN ? 0 : size - 1;
for (unsigned i = 0; i < size; ++i)
{
unsigned char shadow_c = c;
- if (i == size - 1 && last_chunk_size && !is_clobber)
+ if (i == last_pos)
shadow_c = last_chunk_size;
val |= (unsigned HOST_WIDE_INT) shadow_c << (BITS_PER_UNIT * i);
}