backport: re PR sanitizer/83014 (ICE in pretty-print with -fsanitize=bounds)

Backported from mainline
	2017-11-24  Jakub Jelinek  <jakub@redhat.com>
 
	PR sanitizer/83014
	* ubsan.c (ubsan_type_descriptor): Use pp_unsigned_wide_integer
	instead of pp_printf with HOST_WIDE_INT_PRINT_DEC.  Avoid calling
	tree_to_uhwi twice.

	* gcc.dg/ubsan/pr83014.c: New test.

From-SVN: r255715
This commit is contained in:
Jakub Jelinek 2017-12-15 22:58:13 +01:00 committed by Jakub Jelinek
parent 5a8687cc52
commit e57525d514
4 changed files with 23 additions and 3 deletions

View File

@ -2,6 +2,11 @@
Backported from mainline
2017-11-24 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/83014
* ubsan.c (ubsan_type_descriptor): Use pp_unsigned_wide_integer
instead of pp_printf with HOST_WIDE_INT_PRINT_DEC. Avoid calling
tree_to_uhwi twice.
* tree-object-size.c (pass_through_call): Do not handle
BUILT_IN_STPNCPY_CHK which is not a pass through call.

View File

@ -2,6 +2,9 @@
Backported from mainline
2017-11-24 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/83014
* gcc.dg/ubsan/pr83014.c: New test.
* gcc.dg/builtin-object-size-18.c: New test.

View File

@ -0,0 +1,12 @@
/* PR sanitizer/83014 */
/* { dg-do compile } */
/* { dg-options "-fsanitize=undefined" } */
int
foo (void)
{
int data[5];
data[0] = 0;
data[5] = 0;
return data[0];
}

View File

@ -433,10 +433,10 @@ ubsan_type_descriptor (tree type, enum ubsan_print_style pstyle)
&& TYPE_MAX_VALUE (dom) != NULL_TREE
&& TREE_CODE (TYPE_MAX_VALUE (dom)) == INTEGER_CST)
{
unsigned HOST_WIDE_INT m;
if (tree_fits_uhwi_p (TYPE_MAX_VALUE (dom))
&& tree_to_uhwi (TYPE_MAX_VALUE (dom)) + 1 != 0)
pp_printf (&pretty_name, HOST_WIDE_INT_PRINT_DEC,
tree_to_uhwi (TYPE_MAX_VALUE (dom)) + 1);
&& (m = tree_to_uhwi (TYPE_MAX_VALUE (dom))) + 1 != 0)
pp_unsigned_wide_integer (&pretty_name, m + 1);
else
pp_wide_int (&pretty_name,
wi::add (wi::to_widest (TYPE_MAX_VALUE (dom)), 1),