[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-04-18 Thread mueller at gcc dot gnu dot org


--- Comment #6 from mueller at gcc dot gnu dot org  2007-04-18 21:09 ---
Subject: Bug 31227

Author: mueller
Date: Wed Apr 18 21:09:21 2007
New Revision: 123958

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=123958
Log:
2007-04-18  Dirk Mueller  [EMAIL PROTECTED]

   PR diagnostic/31227
   * tree-vrp.c (search_for_addr_array): New.
   (check_array_bounds): Suppress warning about
   address taken of array refs if its not de-referenced.

   * gcc.dg/Warray-bounds-3.c: New.

Added:
trunk/gcc/testsuite/gcc.dg/Warray-bounds-3.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/testsuite/ChangeLog
trunk/gcc/tree-vrp.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-04-18 Thread mueller at gcc dot gnu dot org


--- Comment #7 from mueller at gcc dot gnu dot org  2007-04-18 21:10 ---
Fixed in 4.3.


-- 

mueller at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-21 Thread mueller at gcc dot gnu dot org


--- Comment #3 from mueller at gcc dot gnu dot org  2007-03-21 09:05 ---
both are caused by our well known offender -fivopts. 

the problem why the existing workarounds don't work is because the adress is
first converted to unsigned int before +/- modification is done. the traversal
stops at the type conversion. I'm currently working on fixing that. 


-- 

mueller at gcc dot gnu dot org changed:

   What|Removed |Added

 AssignedTo|unassigned at gcc dot gnu   |mueller at gcc dot gnu dot
   |dot org |org
 Status|NEW |ASSIGNED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-21 Thread mueller at gcc dot gnu dot org


--- Comment #4 from mueller at gcc dot gnu dot org  2007-03-21 14:16 ---
Created an attachment (id=13242)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=13242action=view)
patch

this is the patch I'm currently testing. would be nice if you could confirm
that this is also fixing your obj-c++ bootstrap problem (which I cannot
reproduce). 

Thanks.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-21 Thread mueller at gcc dot gnu dot org


-- 

mueller at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|ASSIGNED|WAITING


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-21 Thread jakub at gcc dot gnu dot org


--- Comment #5 from jakub at gcc dot gnu dot org  2007-03-21 14:53 ---
obj-c++ bootstrap is actually where the warning triggered correctly, this
was on trunk checkout from yesterday and some tree codes were = 256,
while an array had just 256 entries and thus e.g.
  tree_contains_struct[CLASS_METHOD_DECL][TS_DECL_NON_COMMON] = 1;
(where CLASS_METHOD_DECL == 259 and TS_DECL_NON_COMMON == 1
and extern unsigned char tree_contains_struct[256][64];)
is supposed to warn.


-- 

jakub at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|WAITING |ASSIGNED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-16 Thread jakub at gcc dot gnu dot org


--- Comment #1 from jakub at gcc dot gnu dot org  2007-03-16 19:17 ---
Another testcase, this time from glibc's malloc.c:
struct malloc_chunk {
  long prev_size;
  long size;
  struct malloc_chunk* fd;
  struct malloc_chunk* bk;
};
typedef struct malloc_chunk* mchunkptr;
struct malloc_state {
  mchunkptrtop;
  mchunkptrlast_remainder;
  mchunkptrbins[128 * 2 - 2];
};
#define bin_at(m, i) \
  (mchunkptr) (((char *) ((m)-bins[((i) - 1) * 2])) \
 - __builtin_offsetof (struct malloc_chunk, fd))

void malloc_init_state(struct malloc_state *av)
{
  int i;
  mchunkptr bin;

  for (i = 1; i  128; ++i) {
bin = bin_at(av,i);
bin-fd = bin-bk = bin;
  }
}
at -O2 -Wall this warns:
warning: array subscript is below array bounds


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-16 Thread rguenth at gcc dot gnu dot org


--- Comment #2 from rguenth at gcc dot gnu dot org  2007-03-16 21:45 ---
  # cnt_67 = PHI 27(13)
L22:;
  D.1796_118 = time_14(D)-mon[27];
  ivtmp.56_8 = (unsigned int) D.1796_118;
  D.1797_117 = iov[27];
  ivtmp.59_7 = (unsigned int) D.1797_117;

  # ivtmp.59_76 = PHI ivtmp.59_112(17), ivtmp.59_7(14)
  # ivtmp.56_62 = PHI ivtmp.56_61(17), ivtmp.56_8(14)
  # cnt_105 = PHI cnt_60(17), 27(14)
L18:;
  D.1671_51 = MEM[index: ivtmp.56_62, offset: 0x0ff98];
  if (D.1671_51 != 0B) goto L19; else goto L21;

The proper way to warn about time_14(D)-mon[27] (even if it's invalid C
and arguably invalid IL) is to look at the possible dereference sites.

Of course a MEM without base but using (unsigned int)time_14(D)-mon[27]
as index and a negative offset doesn't make this easy.

This looks related to PR26726.


-- 

rguenth at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||rakdver at gcc dot gnu dot
   ||org
  BugsThisDependsOn||26726
 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2007-03-16 21:45:23
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227



[Bug tree-optimization/31227] [4.3 Regression] -Warray-bounds doesn't play together with loop optimizations

2007-03-16 Thread pinskia at gcc dot gnu dot org


-- 

pinskia at gcc dot gnu dot org changed:

   What|Removed |Added

   Keywords||diagnostic
   Target Milestone|--- |4.3.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31227