https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523
--- Comment #25 from David Brown <david at westcontrol dot com> --- (In reply to Andrew Pinski from comment #24) > (In reply to LIU Hao from comment #22) > > Yes, GCC should be told to shut up about dereferencing artificial address > > values. > > NO. > Take: > ``` > static inline int f(int *a) > { > return a[10]; > } > > int g() > { > return f(0); > } > ``` > The warning is there for the above case really (and similar ones with struct > offsets). Where you originally have a null pointer and have an offset from > there; by the time the warning happens, the IR does not know if it was > originally from an offset of a null pointer or if the value was written in. > The paramater is there to "tune" the heurstic to figure out if it is null > pointer deference or if it is some real (HW) address. Maybe > -fno-delete-null-pointer-checks should imply --param=min-pagesize=0, though > some folks want the warning indepdent of trying to delete null pointer > checks. It is worth noting, I think, that although on a target like the AVR (and most embedded systems without an MMU) the address 0 is a real part of memory, and can really be read and/or written, any code that tries to dereference a 0 pointer is almost always wrong. I don't want gcc to consider 0 as an acceptable address on these targets - I want it to warn me if it sees a null pointer dereference. If I really want to target address 0, as I might occasionally do, I'll use a pointer to volatile - /then/ I'd like gcc to believe me without question. I don't know if every embedded developer feels the same way. (Georg-Johann could chime in with his opinion.)