Commit 974348ee by Marek Polacek Committed by Marek Polacek

c-ubsan.c (ubsan_instrument_division): Remove unnecessary code.

	* c-ubsan.c (ubsan_instrument_division): Remove unnecessary code.
	(ubsan_instrument_shift): Likewise.

	* c-c++-common/ubsan/bounds-11.c: New test.
	* c-c++-common/ubsan/bounds-12.c: New test.

From-SVN: r228114
parent 15dbc1a6
2015-09-25 Marek Polacek <polacek@redhat.com> 2015-09-25 Marek Polacek <polacek@redhat.com>
* c-ubsan.c (ubsan_instrument_division): Remove unnecessary code.
(ubsan_instrument_shift): Likewise.
2015-09-25 Marek Polacek <polacek@redhat.com>
PR sanitizer/64906 PR sanitizer/64906
* c-ubsan.c (ubsan_instrument_division): Also pre-evaluate OP1. * c-ubsan.c (ubsan_instrument_division): Also pre-evaluate OP1.
......
...@@ -89,20 +89,7 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1) ...@@ -89,20 +89,7 @@ ubsan_instrument_division (location_t loc, tree op0, tree op1)
return NULL_TREE; return NULL_TREE;
/* In case we have a SAVE_EXPR in a conditional context, we need to /* In case we have a SAVE_EXPR in a conditional context, we need to
make sure it gets evaluated before the condition. If the OP0 is make sure it gets evaluated before the condition. */
an instrumented array reference, mark it as having side effects so
it's not folded away. */
if (flag_sanitize & SANITIZE_BOUNDS)
{
tree xop0 = op0;
while (CONVERT_EXPR_P (xop0))
xop0 = TREE_OPERAND (xop0, 0);
if (TREE_CODE (xop0) == ARRAY_REF)
{
TREE_SIDE_EFFECTS (xop0) = 1;
TREE_SIDE_EFFECTS (op0) = 1;
}
}
t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op0), t); t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op0), t);
t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op1), t); t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op1), t);
if (flag_sanitize_undefined_trap_on_error) if (flag_sanitize_undefined_trap_on_error)
...@@ -187,20 +174,7 @@ ubsan_instrument_shift (location_t loc, enum tree_code code, ...@@ -187,20 +174,7 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
return NULL_TREE; return NULL_TREE;
/* In case we have a SAVE_EXPR in a conditional context, we need to /* In case we have a SAVE_EXPR in a conditional context, we need to
make sure it gets evaluated before the condition. If the OP0 is make sure it gets evaluated before the condition. */
an instrumented array reference, mark it as having side effects so
it's not folded away. */
if (flag_sanitize & SANITIZE_BOUNDS)
{
tree xop0 = op0;
while (CONVERT_EXPR_P (xop0))
xop0 = TREE_OPERAND (xop0, 0);
if (TREE_CODE (xop0) == ARRAY_REF)
{
TREE_SIDE_EFFECTS (xop0) = 1;
TREE_SIDE_EFFECTS (op0) = 1;
}
}
t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op0), t); t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), unshare_expr (op0), t);
t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t, t = fold_build2 (TRUTH_OR_EXPR, boolean_type_node, t,
tt ? tt : integer_zero_node); tt ? tt : integer_zero_node);
......
2015-09-25 Marek Polacek <polacek@redhat.com> 2015-09-25 Marek Polacek <polacek@redhat.com>
* c-c++-common/ubsan/bounds-11.c: New test.
* c-c++-common/ubsan/bounds-12.c: New test.
2015-09-25 Marek Polacek <polacek@redhat.com>
PR sanitizer/64906 PR sanitizer/64906
* c-c++-common/ubsan/pr64906.c: New test. * c-c++-common/ubsan/pr64906.c: New test.
......
/* { dg-do run } */
/* { dg-options "-fsanitize=bounds" } */
struct S
{
unsigned long a[1];
int l;
};
static inline unsigned long
fn (const struct S *s, int i)
{
return s->a[i] / i;
}
int
main ()
{
struct S s;
fn (&s, 1);
}
/* { dg-output "index 1 out of bounds for type 'long unsigned int \\\[1\\\]'" } */
/* { dg-do run } */
/* { dg-options "-fsanitize=bounds" } */
struct S
{
unsigned long a[1];
int l;
};
static inline unsigned long
fn (const struct S *s, int i)
{
return s->a[i] << i;
}
int
main ()
{
struct S s;
fn (&s, 1);
}
/* { dg-output "index 1 out of bounds for type 'long unsigned int \\\[1\\\]'" } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment