On Mon, Apr 22, 2013 at 06:11:26PM +0200, Marek Polacek wrote:
> We're getting SIGFPE, because one simply does not divide by zero.
> Fixed by doing the modulo only when size != 0.
> 
> Regtested/bootstrapped on x86_64-linux, ok for trunk and 4.8?
> 
> 2013-04-22  Marek Polacek  <pola...@redhat.com>
> 
>       PR sanitizer/56990
>       * tsan.c (instrument_expr): Don't count modulo if the size
>       is zero.
> 
>       * gcc.dg/pr56990.c: New test.
> 
> --- gcc/tsan.c.mp     2013-04-19 15:39:46.416450528 +0200
> +++ gcc/tsan.c        2013-04-22 17:23:54.115647673 +0200
> @@ -131,7 +131,8 @@ instrument_expr (gimple_stmt_iterator gs
>    if (TREE_READONLY (base))
>      return false;
>  
> -  if (bitpos % (size * BITS_PER_UNIT)
> +  if ((size != 0

IMHO for size == 0 we should return false too, there is no store or read to
be instrumented.  So
    if (size == 0
        || bitpos % (size * BITS_PER_UNIT)
        || bitsize != size * BITS_PER_UNIT)
      return false;
?


        Jakub

Reply via email to