public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64
@ 2021-10-27  5:22 sunil.k.pandey
  2021-10-27 13:30 ` Jakub Jelinek
  0 siblings, 1 reply; 5+ messages in thread
From: sunil.k.pandey @ 2021-10-27  5:22 UTC (permalink / raw)
  To: gcc-patches, gcc-regression, msebor

On Linux/x86_64,

88b504b7a8c5affb0ffa97990d22af2b199e36ed is the first bad commit
commit 88b504b7a8c5affb0ffa97990d22af2b199e36ed
Author: Martin Sebor <msebor@redhat.com>
Date:   Tue Oct 26 14:34:16 2021 -0600

    Detect overflow by atomic functions [PR102453].

caused

FAIL: gcc.dg/Warray-bounds-90.c (test for excess errors)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 100)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 103)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 105)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 107)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 110)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 112)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 114)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 121)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 124)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 127)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 129)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 132)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 134)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 136)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 139)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 141)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 144)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 146)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 66)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 69)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 73)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 77)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 85)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 88)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 91)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 93)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 96)
FAIL: gcc.dg/Warray-bounds-90.c  (test for warnings, line 98)
FAIL: libgomp.c/doacross-1.c (test for excess errors)

with GCC configured with

../../gcc/configure --prefix=/local/skpandey/gccwork/toolwork/gcc-bisect-master/master/r12-4725/usr --enable-clocale=gnu --with-system-zlib --with-demangler-in-ld --with-fpmath=sse --enable-languages=c,c++,fortran --enable-cet --without-isl --enable-libmpx x86_64-linux --disable-bootstrap

To reproduce:

$ cd {build_dir}/gcc && make check RUNTESTFLAGS="dg.exp=gcc.dg/Warray-bounds-90.c --target_board='unix{-m32}'"
$ cd {build_dir}/gcc && make check RUNTESTFLAGS="dg.exp=gcc.dg/Warray-bounds-90.c --target_board='unix{-m32\ -march=cascadelake}'"
$ cd {build_dir}/x86_64-linux/libgomp/testsuite && make check RUNTESTFLAGS="c.exp=libgomp.c/doacross-1.c --target_board='unix{-m64}'"
$ cd {build_dir}/x86_64-linux/libgomp/testsuite && make check RUNTESTFLAGS="c.exp=libgomp.c/doacross-1.c --target_board='unix{-m64\ -march=cascadelake}'"

(Please do not reply to this email, for question about this report, contact me at skpgkp2 at gmail dot com)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64
  2021-10-27  5:22 [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64 sunil.k.pandey
@ 2021-10-27 13:30 ` Jakub Jelinek
  2021-10-27 15:36   ` Martin Sebor
  0 siblings, 1 reply; 5+ messages in thread
From: Jakub Jelinek @ 2021-10-27 13:30 UTC (permalink / raw)
  To: Martin Sebor, sunil.k.pandey; +Cc: gcc-patches, gcc-regression

On Tue, Oct 26, 2021 at 10:22:19PM -0700, sunil.k.pandey via Gcc-patches wrote:
> FAIL: libgomp.c/doacross-1.c (test for excess errors)

At least this one is a clear false positive.
int a[256];
...
    #pragma omp for schedule(static, 1) ordered (1) nowait
    for (i = 0; i < 256; i++)
      {
        #pragma omp atomic write
        a[i] = 1;
        #pragma omp ordered depend(sink: i - 1)
        if (i)
          {
            #pragma omp atomic read
            l = a[i - 1];		// <-------- Here is the false positive warning: '__atomic_load_4' writing 4 bytes into a region of size 0 overflows the destination [-Wstring-overflow=]
					// note: at offset [-8589934592, -8] into destination object ‘a’ of size 1024
            if (l < 2)
              abort ();
          }
The loop iterates i from 0 to 255 and the if body is guarded with i != 0,
so __atomic_load_4 (&a[i - 1].
Due to the doacross loop vrp doesn't know that the loop iterates from 0 to
256, because different threads are given just some subset of that interval,
so it is effectively VARYING.  Perhaps it derives some quite useless range
from the i - 1 or i + 1 expressions on signed integer, but that doesn't mean
the warnings should assume the value is likely to be out of bounds.
And there is no warning on the a[i] either (which is also in bounds, but
if for the atomic load the warning code thinks i - 1 can be in
[-8589934592, -8] range, why doesn't it think that i can be in
[-8589934588, -4] range?

	Jakub


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64
  2021-10-27 13:30 ` Jakub Jelinek
@ 2021-10-27 15:36   ` Martin Sebor
  2021-10-27 15:48     ` Tobias Burnus
  0 siblings, 1 reply; 5+ messages in thread
From: Martin Sebor @ 2021-10-27 15:36 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: gcc-patches, gcc-regression

On 10/27/21 7:30 AM, Jakub Jelinek wrote:
> On Tue, Oct 26, 2021 at 10:22:19PM -0700, sunil.k.pandey via Gcc-patches wrote:
>> FAIL: libgomp.c/doacross-1.c (test for excess errors)

I don't see this failure in my logs (or the other one) or any
evidence of the libhomp tests having run.  Does the libgomp
test suite need something special to enable?

> 
> At least this one is a clear false positive.
> int a[256];
> ...
>      #pragma omp for schedule(static, 1) ordered (1) nowait
>      for (i = 0; i < 256; i++)
>        {
>          #pragma omp atomic write
>          a[i] = 1;
>          #pragma omp ordered depend(sink: i - 1)
>          if (i)
>            {
>              #pragma omp atomic read
>              l = a[i - 1];		// <-------- Here is the false positive warning: '__atomic_load_4' writing 4 bytes into a region of size 0 overflows the destination [-Wstring-overflow=]
> 					// note: at offset [-8589934592, -8] into destination object ‘a’ of size 1024
>              if (l < 2)
>                abort ();
>            }
> The loop iterates i from 0 to 255 and the if body is guarded with i != 0,
> so __atomic_load_4 (&a[i - 1].
> Due to the doacross loop vrp doesn't know that the loop iterates from 0 to
> 256, because different threads are given just some subset of that interval,
> so it is effectively VARYING.

The warning is in the IL below:

   <bb 167> [local count: 30]:
   _865 = ivtmp.273_871 + 4294967294;
   _923 = (int) _865;
   _308 = (sizetype) _923;
   _707 = _308 * 4;
   _924 = &a + _707;
   _926 = __atomic_load_4 (_924, 0);

The code calls range_of_expr (vr, val, stmt) where val is _707
and stmt is the assignment _924 = &a + _707.  The result is
the VR_RANGE [-8589934592, -8].  The code is in get_range() in
tree-ssa-strlen.c of all places.  The warning uses the range
as is, treating it as signed.  The debug_ranger() output for
the block is below.  Am I missing something here?

=========== BB 167 ============
Imports: _926
Exports: _926  l.0_927
          l.0_927 : _926(I)
_243	int VARYING
ivtmp.272_874	unsigned int [2147483648, +INF]
Relational : (_865 != ivtmp.273_871)
     <bb 167> [local count: 30]:
     _865 = ivtmp.273_871 + 4294967294;
     _923 = (int) _865;
     _308 = (sizetype) _923;
     _707 = _308 * 4;
     _924 = &a + _707;
     _926 = __atomic_load_4 (_924, 0);
     l.0_927 = (int) _926;
     if (l.0_927 <= 1)
       goto <bb 13>; [0.00%]
     else
       goto <bb 166>; [100.00%]

_308 : sizetype [18446744071562067968, 18446744073709551614]
_707 : sizetype [18446744065119617024, 18446744073709551608]
_923 : int [-INF, -2]
_924 : int * [1B, +INF]
167->13  (T) _926 : 	unsigned int [0, 1][2147483648, +INF]
167->13  (T) l.0_927 : 	int [-INF, 1]
167->166  (F) _926 : 	unsigned int [2, 2147483647]
167->166  (F) l.0_927 : 	int [2, +INF]

Martin

> Perhaps it derives some quite useless range
> from the i - 1 or i + 1 expressions on signed integer, but that doesn't mean
> the warnings should assume the value is likely to be out of bounds.
> And there is no warning on the a[i] either (which is also in bounds, but
> if for the atomic load the warning code thinks i - 1 can be in
> [-8589934592, -8] range, why doesn't it think that i can be in
> [-8589934588, -4] range?
> 
> 	Jakub
> 


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64
  2021-10-27 15:36   ` Martin Sebor
@ 2021-10-27 15:48     ` Tobias Burnus
  2021-10-27 16:06       ` Martin Sebor
  0 siblings, 1 reply; 5+ messages in thread
From: Tobias Burnus @ 2021-10-27 15:48 UTC (permalink / raw)
  To: Martin Sebor, Jakub Jelinek; +Cc: gcc-regression, gcc-patches

On 27.10.21 17:36, Martin Sebor via Gcc-patches wrote:

> On 10/27/21 7:30 AM, Jakub Jelinek wrote:
>> On Tue, Oct 26, 2021 at 10:22:19PM -0700, sunil.k.pandey via
>> Gcc-patches wrote:
>>> FAIL: libgomp.c/doacross-1.c (test for excess errors)
>
> I don't see this failure in my logs (or the other one) or any
> evidence of the libhomp tests having run.  Does the libgomp
> test suite need something special to enable?

I don't know whether it can be disabled - but I bet you have build
libgomp. Thus:

Did you run "make check" in the main build directory or in $(BUILD)/gcc?
– only the former runs it.

You can run it directly (from the main $(BUILD) dir) as "make
check-target-libgomp" – or just got to $(BUILD)/*/libgomp/ and run "make
check" there. – In the latter directory, you an also use RUNTESTFLAGS=
to run only a specific test.

(The * above is the target triplet; here, it is x86_64-pc-linux-gnu.)

Besides libgomp, there are some other libraries with testsuites outside
gcc/testsuite, like libstdc++-v3/testsuite or libatomic/testsuite or ...

Tobias
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64
  2021-10-27 15:48     ` Tobias Burnus
@ 2021-10-27 16:06       ` Martin Sebor
  0 siblings, 0 replies; 5+ messages in thread
From: Martin Sebor @ 2021-10-27 16:06 UTC (permalink / raw)
  To: Tobias Burnus, Jakub Jelinek; +Cc: gcc-regression, gcc-patches

On 10/27/21 9:48 AM, Tobias Burnus wrote:
> On 27.10.21 17:36, Martin Sebor via Gcc-patches wrote:
> 
>> On 10/27/21 7:30 AM, Jakub Jelinek wrote:
>>> On Tue, Oct 26, 2021 at 10:22:19PM -0700, sunil.k.pandey via
>>> Gcc-patches wrote:
>>>> FAIL: libgomp.c/doacross-1.c (test for excess errors)
>>
>> I don't see this failure in my logs (or the other one) or any
>> evidence of the libhomp tests having run.  Does the libgomp
>> test suite need something special to enable?
> 
> I don't know whether it can be disabled - but I bet you have build
> libgomp. Thus:
> 
> Did you run "make check" in the main build directory or in $(BUILD)/gcc?
> – only the former runs it.

Thanks.  I figured out why I didn't see it.  I was looking at
the wrong log file, one from testing just the one patch for
the atomic built-ins, rather than the one for all three that
I pushed yesterday (including the one to make a greater use
of the ranger).  The warning only shows with all of them
applied.

Martin

> 
> You can run it directly (from the main $(BUILD) dir) as "make
> check-target-libgomp" – or just got to $(BUILD)/*/libgomp/ and run "make
> check" there. – In the latter directory, you an also use RUNTESTFLAGS=
> to run only a specific test.
> 
> (The * above is the target triplet; here, it is x86_64-pc-linux-gnu.)
> 
> Besides libgomp, there are some other libraries with testsuites outside
> gcc/testsuite, like libstdc++-v3/testsuite or libatomic/testsuite or ...
> 
> Tobias
> -----------------
> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 
> 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: 
> Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; 
> Registergericht München, HRB 106955


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-10-27 16:06 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-27  5:22 [r12-4725 Regression] FAIL: libgomp.c/doacross-1.c (test for excess errors) on Linux/x86_64 sunil.k.pandey
2021-10-27 13:30 ` Jakub Jelinek
2021-10-27 15:36   ` Martin Sebor
2021-10-27 15:48     ` Tobias Burnus
2021-10-27 16:06       ` Martin Sebor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).