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>
|
||||
|
||||
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.
|
||||
|
||||
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 type0 = TREE_TYPE (op0);
|
||||
tree type1 = TREE_TYPE (op1);
|
||||
if (!INTEGRAL_TYPE_P (type0))
|
||||
return NULL_TREE;
|
||||
|
||||
tree op1_utype = unsigned_type_for (type1);
|
||||
HOST_WIDE_INT op0_prec = TYPE_PRECISION (type0);
|
||||
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.
|
||||
Also punt on bit-fields. */
|
||||
if (!INTEGRAL_TYPE_P (type0)
|
||||
|| TYPE_OVERFLOW_WRAPS (type0)
|
||||
if (TYPE_OVERFLOW_WRAPS (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>
|
||||
|
||||
* 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