On 1/19/23 16:11, Michael.Karcher wrote:
Isn't this supposed to be caught by this check:
quoted
quoted
quoted
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
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel