https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120780
--- Comment #14 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Siddhesh Poyarekar from comment #13) > (In reply to Jakub Jelinek from comment #12) > > (In reply to Siddhesh Poyarekar from comment #11) > > > OK, so we don't really need a FAM based reproducer either, here's one > > > without it. FAM just makes this case more likely because due to it, > > > __bdos > > > succeeds more often in the kernel code: > > > > And the problem with that is what? > > Using warning attribute with __bdos based guards makes no sense. > > __bdos is intentionally dynamic, so often it doesn't yield a constant, e.g. > > can result in minimum of a constant and some variable. > > With warning attribute you get a warning whenever it doesn't fold into a > > constant. > > Ahh sorry, I should have clarified, the kernel code is not exactly that, it > is of the form: > > if ((__builtin_constant_p > (__builtin_dynamic_object_size(sdata->mcast_rate, 1) > < sizeof (sdata->mcast_rate))) > && (__builtin_dynamic_object_size(sdata->mcast_rate, 1) > < sizeof (sdata->mcast_rate))) > __warn (); > > I'll fix it up with the test case. So, __bdos returns something larger than that? That would be weird. Or do the two calls result in different results?