diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/builtins.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr92891.c | 16 |
4 files changed, 28 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c8ff694..fedf736 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-12-10 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/92891 + * builtins.c (gimple_call_alloc_size): Convert size to sizetype + before returning it. + 2019-12-10 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92796 diff --git a/gcc/builtins.c b/gcc/builtins.c index 53de17c..205ac39 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -3755,7 +3755,7 @@ gimple_call_alloc_size (gimple *stmt) return NULL_TREE; if (argidx2 > nargs && TREE_CODE (size) == INTEGER_CST) - return size; + return fold_convert (sizetype, size); /* To handle ranges do the math in wide_int and return the product of the upper bounds as a constant. Ignore anti-ranges. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ce9f6a..37de7de 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-12-10 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/92891 + * gcc.c-torture/compile/pr92891.c: New test. + 2019-12-10 Vladimir Makarov <vmakarov@redhat.com> PR rtl-optimization/92796 diff --git a/gcc/testsuite/gcc.c-torture/compile/pr92891.c b/gcc/testsuite/gcc.c-torture/compile/pr92891.c new file mode 100644 index 0000000..7490c90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr92891.c @@ -0,0 +1,16 @@ +/* PR tree-optimization/92891 */ + +int a, b; +char *foo (int) __attribute__((alloc_size(1))); + +void +bar (void) +{ + char *e = foo (2); + while (a) + { + if (b <= 0) + continue; + e[b] = 0; + } +} |