Hi, an update on this feature:
For a more complicated testing case like the following:
#define MAX_LENGTH 10
int a[MAX_LENGTH];
void __attribute__ ((noinline)) foo (int i, bool is_day, bool is_dollar)
{
if (i < MAX_LENGTH)
{
if (is_day)
__builtin_printf ("day");
else
__builtin_printf ("night");
if (i == -1)
{
if (is_dollar)
__builtin_printf ("dollar");
else
__builtin_printf ("euro");
a[i] = -1; /* { dg-warning "is below array bounds of" } */
}
else
a[i] = i;
}
else
a[i] = i + 1; /* { dg-warning "is above array bounds of" } */
}
int main ()
{
for (int i = 0; i < MAX_LENGTH; i++)
foo (i, false, true);
return 0;
}
With my latest GCC + -fdiagnostics-show-context=3, we can get the following
very nice information:
[opc@qinzhao-aarch64-ol8 gcc]$ sh t
/home/opc/Work/GCC/latest-gcc-write/gcc/testsuite/gcc.dg/pr109071_11.c: In
function ‘foo’:
/home/opc/Work/GCC/latest-gcc-write/gcc/testsuite/gcc.dg/pr109071_11.c:29:6:
warning: array subscript 10 is above array bounds of ‘int[10]’ [-Warray-bounds=]
29 | a[i] = i + 1; /* { dg-warning "is above array bounds of" } */
| ~^~~
‘foo’: events 1-2
11 | if (i < MAX_LENGTH)
| ^
| |
| (1) when the condition is evaluated to false
......
29 | a[i] = i + 1; /* { dg-warning "is above array bounds of" } */
| ~~~~
| |
| (2) warning happens here
/home/opc/Work/GCC/latest-gcc-write/gcc/testsuite/gcc.dg/pr109071_11.c:7:5:
note: while referencing ‘a’
7 | int a[MAX_LENGTH];
| ^
/home/opc/Work/GCC/latest-gcc-write/gcc/testsuite/gcc.dg/pr109071_11.c:23:12:
warning: array subscript -1 is below array bounds of ‘int[10]’ [-Warray-bounds=]
23 | a[i] = -1; /* { dg-warning "is below array bounds of" } */
| ~^~~
‘foo’: events 1-3
11 | if (i < MAX_LENGTH)
| ~ | |
| (2) when the condition is evaluated to true
......
17 | if (i == -1)
| ^
| |
| (1) when the condition is evaluated to true
......
23 | a[i] = -1; /* { dg-warning "is below array bounds of" } */
| ~~~~
| |
| (3) warning happens here
/home/opc/Work/GCC/latest-gcc-write/gcc/testsuite/gcc.dg/pr109071_11.c:7:5:
note: while referencing ‘a’
7 | int a[MAX_LENGTH];
| ^
I am doing regression testing on this version, hopefully will send out the
patch very soon for review.
Qing
On Jun 30, 2025, at 12:51, Qing Zhao <[email protected]> wrote:
>
>
>
>> On Jun 30, 2025, at 07:33, Richard Biener <[email protected]> wrote:
> Yes, immediate dominator should work for such cases.
>> Maybe a simple heuristic
>> on number of line to not skip too far works, or simply ignore this
>> for now, or simply only use immediate dominators for the first
>> condition to be printed?
>
> I will experiment a little bit on this. Do you have any more complicate
> testing cases? That will be very helpful.
>
> Thanks a lot for all the help.
>
> Qing
>>