From: Jakub Jelinek Date: Mon, 25 Jun 2018 16:54:49 +0000 (+0200) Subject: backport: re PR sanitizer/83014 (ICE in pretty-print with -fsanitize=bounds) X-Git-Tag: releases/gcc-6.5.0~245 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c50b5e2484a347e493e7f59731e16a3a15e85474;p=thirdparty%2Fgcc.git backport: re PR sanitizer/83014 (ICE in pretty-print with -fsanitize=bounds) Backported from mainline 2017-11-24 Jakub Jelinek 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: r262038 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1bf9540d50b3..d69483ce35cf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,7 +2,12 @@ Backported from mainline 2017-11-24 Jakub Jelinek - + + 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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 10146f45ea0a..431ad7c09b6f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -2,6 +2,9 @@ Backported from mainline 2017-11-24 Jakub Jelinek + + PR sanitizer/83014 + * gcc.dg/ubsan/pr83014.c: New test. * gcc.dg/builtin-object-size-18.c: New test. diff --git a/gcc/testsuite/gcc.dg/ubsan/pr83014.c b/gcc/testsuite/gcc.dg/ubsan/pr83014.c new file mode 100644 index 000000000000..de626043cc6e --- /dev/null +++ b/gcc/testsuite/gcc.dg/ubsan/pr83014.c @@ -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]; +} diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 0b4ddbc4dcb0..4541e58ab3ce 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -413,10 +413,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),