re PR sanitizer/66908 (Uninitialized variable when compiled with UBsan)
PR sanitizer/66908 * c-ubsan.c: Include gimplify.h. (ubsan_instrument_division): Unshare OP0 and OP1. (ubsan_instrument_shift): Likewise. * c-c++-common/ubsan/pr66908.c: New test. From-SVN: r226110
This commit is contained in:
parent
62fb67d77a
commit
dc891fe75e
4 changed files with 34 additions and 0 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-07-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR sanitizer/66908
|
||||
* c-ubsan.c: Include gimplify.h.
|
||||
(ubsan_instrument_division): Unshare OP0 and OP1.
|
||||
(ubsan_instrument_shift): Likewise.
|
||||
|
||||
2015-07-20 Marek Polacek <polacek@redhat.com>
|
||||
Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "internal-fn.h"
|
||||
#include "stor-layout.h"
|
||||
#include "builtins.h"
|
||||
#include "gimplify.h"
|
||||
|
||||
/* Instrument division by zero and INT_MIN / -1. If not instrumenting,
|
||||
return NULL_TREE. */
|
||||
|
@ -54,6 +55,9 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
|
|||
gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (op0))
|
||||
== TYPE_MAIN_VARIANT (TREE_TYPE (op1)));
|
||||
|
||||
op0 = unshare_expr (op0);
|
||||
op1 = unshare_expr (op1);
|
||||
|
||||
if (TREE_CODE (type) == INTEGER_TYPE
|
||||
&& (flag_sanitize & SANITIZE_DIVIDE))
|
||||
t = fold_build2 (EQ_EXPR, boolean_type_node,
|
||||
|
@ -134,6 +138,9 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
|
|||
HOST_WIDE_INT op0_prec = TYPE_PRECISION (type0);
|
||||
tree uprecm1 = build_int_cst (op1_utype, op0_prec - 1);
|
||||
|
||||
op0 = unshare_expr (op0);
|
||||
op1 = unshare_expr (op1);
|
||||
|
||||
t = fold_convert_loc (loc, op1_utype, op1);
|
||||
t = fold_build2 (GT_EXPR, boolean_type_node, t, uprecm1);
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-07-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR sanitizer/66908
|
||||
* c-c++-common/ubsan/pr66908.c: New test.
|
||||
|
||||
2015-07-23 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* gcc.dg/autopar/outer-4.c: Add xfail.
|
||||
|
|
15
gcc/testsuite/c-c++-common/ubsan/pr66908.c
Normal file
15
gcc/testsuite/c-c++-common/ubsan/pr66908.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* PR sanitizer/66908 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-fsanitize=shift,bounds -O2 -Werror=maybe-uninitialized" } */
|
||||
/* { dg-additional-options "-std=gnu90" { target c } } */
|
||||
|
||||
struct S { int a[22]; };
|
||||
static int const e[22] = { };
|
||||
|
||||
void
|
||||
foo (struct S const *s, unsigned int m, unsigned int *res)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i = 0; i < 22; ++i)
|
||||
res[i] = ((s->a[i] + e[i]) << m);
|
||||
}
|
Loading…
Add table
Reference in a new issue