Messages in this thread | | | Date | Thu, 19 Jan 2023 21:31:21 -0600 | Subject | Re: Calculating array sizes in C - was: Re: Build regressions/improvements in v6.2-rc1 | From | Rob Landley <> |
| |
On 1/19/23 16:11, Michael.Karcher wrote: > Isn't this supposed to be caught by this check: >>>> >>>> a, __same_type(a, NULL) >>>> >>>> ? >>> >>> Yeah, but gcc thinks it is smarter than us... >>> Probably it drops the test, assuming UB cannot happen. >> Hmm, sounds like a GGC bug to me then. Not sure how to fix this then. > > > I don't see a clear bug at this point. We are talking about the C expression > > __same_type((void*)0, (void*)0)? 0 : sizeof((void*)0)/sizeof(*((void*0))
*(void*) is type "void" which does not have a size.
The problem is gcc "optimizing out" an earlier type check, the same way it "optimizes out" checks for signed integer math overflowing, or "optimizes out" a comparison to pointers from two different local variables from different function calls trying to calculate the amount of stack used, or "optimizes out" using char *x = (char *)1; as a flag value and then doing "if (!(x-1)) because it can "never happen"... > I suggest to file a bug against gcc complaining about a "spurious > warning", and using "-Werror -Wno-error-sizeof-pointer-div" until gcc is > adapted to not emit the warning about the pointer division if the result > is not used.
Remember when gcc got rewritten in c++ starting in 2007?
Historically the main marketing push of C++ was that it contains the whole of C and therefore MUST be just as good a language, the same way a mud pie contains an entire glass of water and therefore MUST be just as good a beverage. Anything C can do that C++ _can't_ do is seen as an existential threat by C++ developers. They've worked dilligently to "fix" C not being a giant pile of "undefined behavior" the way C++ is for 15 years now.
I have... opinions on this.
> Regards, > Michael Karcher
Rob
| |