mirror of git://gcc.gnu.org/git/gcc.git
re PR sanitizer/77823 (ICE: in ubsan_encode_value, at ubsan.c:137 with -fsanitize=undefined and vector types)
PR sanitizer/77823 * c-ubsan.c (ubsan_instrument_shift): Return NULL_TREE if type0 is not integral. * c-c++-common/ubsan/shift-9.c: New test. From-SVN: r240796
This commit is contained in:
parent
743a9cf79a
commit
04a3244335
|
|
@ -1,5 +1,9 @@
|
||||||
2016-10-05 Jakub Jelinek <jakub@redhat.com>
|
2016-10-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/77823
|
||||||
|
* c-ubsan.c (ubsan_instrument_shift): Return NULL_TREE if type0
|
||||||
|
is not integral.
|
||||||
|
|
||||||
* c-common.c (c_common_reswords): Update comment for C++11.
|
* c-common.c (c_common_reswords): Update comment for C++11.
|
||||||
|
|
||||||
2016-10-04 Jason Merrill <jason@redhat.com>
|
2016-10-04 Jason Merrill <jason@redhat.com>
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,9 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
|
||||||
tree t, tt = NULL_TREE;
|
tree t, tt = NULL_TREE;
|
||||||
tree type0 = TREE_TYPE (op0);
|
tree type0 = TREE_TYPE (op0);
|
||||||
tree type1 = TREE_TYPE (op1);
|
tree type1 = TREE_TYPE (op1);
|
||||||
|
if (!INTEGRAL_TYPE_P (type0))
|
||||||
|
return NULL_TREE;
|
||||||
|
|
||||||
tree op1_utype = unsigned_type_for (type1);
|
tree op1_utype = unsigned_type_for (type1);
|
||||||
HOST_WIDE_INT op0_prec = TYPE_PRECISION (type0);
|
HOST_WIDE_INT op0_prec = TYPE_PRECISION (type0);
|
||||||
tree uprecm1 = build_int_cst (op1_utype, op0_prec - 1);
|
tree uprecm1 = build_int_cst (op1_utype, op0_prec - 1);
|
||||||
|
|
@ -126,8 +129,7 @@ ubsan_instrument_shift (location_t loc, enum tree_code code,
|
||||||
|
|
||||||
/* If this is not a signed operation, don't perform overflow checks.
|
/* If this is not a signed operation, don't perform overflow checks.
|
||||||
Also punt on bit-fields. */
|
Also punt on bit-fields. */
|
||||||
if (!INTEGRAL_TYPE_P (type0)
|
if (TYPE_OVERFLOW_WRAPS (type0)
|
||||||
|| TYPE_OVERFLOW_WRAPS (type0)
|
|
||||||
|| GET_MODE_BITSIZE (TYPE_MODE (type0)) != TYPE_PRECISION (type0))
|
|| GET_MODE_BITSIZE (TYPE_MODE (type0)) != TYPE_PRECISION (type0))
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-10-05 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR sanitizer/77823
|
||||||
|
* c-c++-common/ubsan/shift-9.c: New test.
|
||||||
|
|
||||||
2016-10-05 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
2016-10-05 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
|
||||||
|
|
||||||
* gcc.dg/torture/pr69941.c: Use __INT32_TYPE__ instead
|
* gcc.dg/torture/pr69941.c: Use __INT32_TYPE__ instead
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
/* PR sanitizer/77823 */
|
||||||
|
/* { dg-do compile { target int128 } } */
|
||||||
|
/* { dg-options "-fsanitize=undefined -Wno-psabi -w" } */
|
||||||
|
|
||||||
|
typedef unsigned V __attribute__((vector_size(32)));
|
||||||
|
typedef unsigned __int128 W __attribute__((vector_size(32)));
|
||||||
|
|
||||||
|
V
|
||||||
|
foo (V v)
|
||||||
|
{
|
||||||
|
return v << 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
V
|
||||||
|
bar (V v, V w)
|
||||||
|
{
|
||||||
|
return v << w;
|
||||||
|
}
|
||||||
|
|
||||||
|
W
|
||||||
|
baz (W v)
|
||||||
|
{
|
||||||
|
return v << 30;
|
||||||
|
}
|
||||||
|
|
||||||
|
W
|
||||||
|
boo (W v, W w)
|
||||||
|
{
|
||||||
|
return v << w;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue