* Gabriel Ravier: > On 5/12/23 19:52, Florian Weimer wrote: >> * Florian Weimer: >> >>> In summary, all these seems to be good candidates for errors by default: >>> >>> * int-conversion as errors (already raised separately >>> * -Wint-conversion for ?: >>> * parameter names in non-prototype function declarations >>> * the union wait function pointer compatibility kludge >>> * return-with-out-value for non-void functions >>> * -Wincomatible-pointer-types warning for ?: (but no error yet, see below) >> I think we have another problem. >> >> We do not warn by default for: >> >> int x; >> unsigned *p; >> >> p = &x; >> >> Isn't that a conformance issue because the pointers are incompatible, >> requiring a diagnostic? >> >> Furthermore, Unlike the char case, this tends to introduce >> strict-aliasing violations, so there is a good reason to treat this >> variant as an error (even if we would only warn for char * and >> unsigned char *). > > Isn't this allowed by the standard ? 6.5.7. Expressions states: > > An object shall have its stored value accessed only by an lvalue > expression that has one of thefollowing types:[...] - a type that is the > signed or unsigned type corresponding to the effective type of the object
Ahh, so no strict aliasing violation at least. Still I think we are required to diagnose the constraint violation in the pointer assignment. (Cerberus quotes C11 ยง6.5.16.1#1, bullet 3 and 4 as violation.)