Do not instrument register variables in object-size sanitizer (PR sanitizer/70878).

2017-04-11  Martin Liska  <mliska@suse.cz>

	PR sanitizer/70878
	* ubsan.c (instrument_object_size): Do not instrument register
	variables.
2017-04-11  Martin Liska  <mliska@suse.cz>

	PR sanitizer/70878
	* gcc.dg/ubsan/pr70878.c: New test.

From-SVN: r246837
This commit is contained in:
Martin Liska 2017-04-11 15:08:08 +02:00 committed by Martin Liska
parent cb278caa18
commit 9f67937000
4 changed files with 25 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-04-11 Martin Liska <mliska@suse.cz>
PR sanitizer/70878
* ubsan.c (instrument_object_size): Do not instrument register
variables.
2017-04-11 Jakub Jelinek <jakub@redhat.com>
PR target/80381

View File

@ -1,3 +1,8 @@
2017-04-11 Martin Liska <mliska@suse.cz>
PR sanitizer/70878
* gcc.dg/ubsan/pr70878.c: New test.
2017-04-11 Jakub Jelinek <jakub@redhat.com>
PR target/80381

View File

@ -0,0 +1,9 @@
/* PR sanitizer/80878 */
/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && lp64 } } } */
/* { dg-options "-fsanitize=object-size" } */
void * sbrk ()
{
volatile register unsigned int sp_r1 __asm__ ("ebx");
return __builtin_strcat ((char*)sp_r1, 0); /* { dg-warning "cast to pointer from integer of different size" } */
}

View File

@ -1806,7 +1806,11 @@ instrument_object_size (gimple_stmt_iterator *gsi, bool is_lhs)
bool decl_p = DECL_P (inner);
tree base;
if (decl_p)
base = inner;
{
if (DECL_REGISTER (inner))
return;
base = inner;
}
else if (TREE_CODE (inner) == MEM_REF)
base = TREE_OPERAND (inner, 0);
else