re PR sanitizer/70875 (ICE in get_ubsan_type_info_for_type with -fsanitize=undefined)

PR sanitizer/70875
	* ubsan.c (get_ubsan_type_info_for_type): Remove assert.

	* gcc.dg/ubsan/bounds-3.c: New test.

From-SVN: r235951
This commit is contained in:
Marek Polacek 2016-05-06 09:47:25 +00:00 committed by Marek Polacek
parent 3684b02efb
commit 29c94e65e1
4 changed files with 32 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2016-05-06 Marek Polacek <polacek@redhat.com>
PR sanitizer/70875
* ubsan.c (get_ubsan_type_info_for_type): Remove assert.
2016-05-06 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089

View File

@ -1,3 +1,8 @@
2016-05-06 Marek Polacek <polacek@redhat.com>
PR sanitizer/70875
* gcc.dg/ubsan/bounds-3.c: New test.
2016-05-06 Oleg Endo <olegendo@gcc.gnu.org>
PR target/54089

View File

@ -0,0 +1,22 @@
/* PR sanitizer/70875 */
/* { dg-do run } */
/* { dg-options "-fsanitize=bounds" } */
int
foo (int n, int k)
{
struct S
{
int i[n];
int value;
} s[2];
return s[k].value = 0;
}
int
main ()
{
return foo (2, 2);
}
/* { dg-output "index 2 out of bounds for type 'S \\\[2\\\]'" } */

View File

@ -302,7 +302,6 @@ ubsan_source_location (location_t loc)
static unsigned short
get_ubsan_type_info_for_type (tree type)
{
gcc_assert (TYPE_SIZE (type) && tree_fits_uhwi_p (TYPE_SIZE (type)));
if (TREE_CODE (type) == REAL_TYPE)
return tree_to_uhwi (TYPE_SIZE (type));
else if (INTEGRAL_TYPE_P (type))