On 10/19/2016 09:16 AM, Eric Botcazou wrote:
m68k-suse-linux
visium-elf too.
The attached patch fixes the failures on m68k-suse-linux, visium-elf,
and arm-eabi.
There were a few problems.
One problem is that on lp64 targets (where sizeof(size_t) !=
sizeof(int)), the warning is slightly different-- and rightly so. I
have updated the test to handle both warnings on the respective targets.
The other problem is that the following snippet is incorrectly warning
on 32-bit targets:
if (n > 0 && n < 2000)
p = __builtin_alloca (n);
Looking at the gimple it seems like another case of VRP failing to give
any range information whatsoever. I have xfailed it as another case
where Andrew's upcoming work should theoretically fix this. The test is
fine on 64-bit targets.
Can y'all double check it on your respective targets as I only have a
crude cross build?
Thanks.
Aldy
commit 32b629dcab7b78e8181146338c4b077f1d55a0bf
Author: Aldy Hernandez <al...@redhat.com>
Date: Wed Oct 19 11:24:44 2016 -0400
* gcc.dg/Walloca-1.c: Adjust test for !lp64 targets.
* gcc.dg/Walloca-2.c: Same.
diff --git a/gcc/testsuite/gcc.dg/Walloca-1.c b/gcc/testsuite/gcc.dg/Walloca-1.c
index 34a20c3..32e4ab8 100644
--- a/gcc/testsuite/gcc.dg/Walloca-1.c
+++ b/gcc/testsuite/gcc.dg/Walloca-1.c
@@ -23,7 +23,8 @@ void foo1 (size_t len, size_t len2, size_t len3)
char *s = alloca (123);
useit (s); // OK, constant argument to alloca
- s = alloca (num); // { dg-warning "large due to conversion" }
+ s = alloca (num); // { dg-warning "large due to conversion" "" {
target lp64 } }
+ // { dg-warning "unbounded use of 'alloca'" "" { target { ! lp64 } } 26 }
useit (s);
s = alloca(90000); /* { dg-warning "is too large" } */
diff --git a/gcc/testsuite/gcc.dg/Walloca-2.c b/gcc/testsuite/gcc.dg/Walloca-2.c
index 284b34e..4695fda 100644
--- a/gcc/testsuite/gcc.dg/Walloca-2.c
+++ b/gcc/testsuite/gcc.dg/Walloca-2.c
@@ -8,7 +8,11 @@ g1 (int n)
{
void *p;
if (n > 0 && n < 2000)
- p = __builtin_alloca (n);
+ // FIXME: This is a bogus warning, and is currently happening on
+ // 32-bit targets because VRP is not giving us any range info for
+ // the argument to __builtin_alloca. This should be fixed by the
+ // upcoming range work.
+ p = __builtin_alloca (n); // { dg-bogus "unbounded use of 'alloca'" "" {
xfail { ! lp64 } } }
else
p = __builtin_malloc (n);
f (p);
@@ -31,8 +35,9 @@ g3 (int n)
void *p;
if (n > 0 && n < 3000)
{
- p = __builtin_alloca (n); // { dg-warning "'alloca' may be too large" }
- // { dg-message "note:.*argument may be as large as 2999" "note" {
target *-*-* } 34 }
+ p = __builtin_alloca (n); // { dg-warning "'alloca' may be too large" ""
{ target lp64} }
+ // { dg-message "note:.*argument may be as large as 2999" "note" {
target lp64 } 38 }
+ // { dg-warning "unbounded use of 'alloca'" "" { target { ! lp64 } } 38 }
}
else
p = __builtin_malloc (n);