This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/36091] false positive in bounds checking with forall
- From: "mikael dot morin at tele2 dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Oct 2008 14:37:41 -0000
- Subject: [Bug fortran/36091] false positive in bounds checking with forall
- References: <bug-36091-10391@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from mikael dot morin at tele2 dot fr 2008-10-23 14:37 -------
(In reply to comment #3)
> I am not 100% sure that the following is due to the patch in comment #1,
There is already something wrong on trunk, but I agree that the patch makes it
worse. As a side note I'm really impressed by how fast you found a not-working
case to my slowly and laboriously prepared code.
I've been playing a bit with the testcase on trunk.
This:
write(*,*) foo([1]+i)
produces this code fragment:
integer(kind=8) A.4[2];
struct array1_integer(kind=8) atmp.3;
atmp.3.dtype = 521;
atmp.3.dim[0].stride = 1;
atmp.3.dim[0].lbound = 0;
atmp.3.dim[0].ubound = 1;
atmp.3.data = (void *) &A.4;
atmp.3.offset = 0;
while this:
write(*,*) foo(i+[1])
produces this code fragment:
integer(kind=8) A.4[1];
struct array1_integer(kind=8) atmp.3;
atmp.3.dtype = 521;
atmp.3.dim[0].stride = 1;
atmp.3.dim[0].lbound = 0;
atmp.3.dim[0].ubound = 0;
atmp.3.data = (void *) &A.4;
atmp.3.offset = 0;
As you can see, the first case's array temporary has a size of 2, while it
should be of size 1.
The code however is correct as only the first element of the array is used.
With the patch, it is... wrong.
To be continued.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36091