On Mon, Apr 27, 2015 at 10:06:26AM -0600, Jeff Law wrote:
> On 04/27/2015 08:47 AM, Marek Polacek wrote:
> >On Sat, Apr 25, 2015 at 10:18:59PM +0200, Gerald Pfeifer wrote:
> >>In case this example feels too contrived (even though it is an
> >>excerpt of Wine code), we now also warn about the following where
> >>the two types and variables are defined in different places and
> >>the size of one is set implicitly:
> >>
> >> typedef int r_fun_t (int);
> >>
> >> r_fun_t * text_funcs[] = {0,0,0};
> >>
> >> int report (unsigned t)
> >> {
> >> typedef int s_fun_t (long, char);
> >>
> >> static s_fun_t * GUI_funcs[3];
> >>
> >> return (t < sizeof text_funcs / sizeof text_funcs[0] &&
> >> t < sizeof GUI_funcs / sizeof GUI_funcs[0]);
> >> }
> >>
> >>(I also filed this as https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65891
> >>so that we keep track.)
> >
> >I'm afraid there isn't an easy solution to this; the problem is that we fold
> >sizeof early, so the warning sees
> >
> > t < sizeof 4 && t < 4
> >
> >and warns. Maybe using SIZEOF_EXPR would help...
> Can you file a bug for this for future reference? We may not tackle this
> specific issue in the current iteration of delayed folding, but it certainly
> helps to have BZs for specific issues that we'd like to fix once we can
> delay folding.
Gerald already opened PR65891 for this :).
Marek