2021年3月8日(月) 23:58 Christian Schoenebeck <qemu_...@crudebyte.com>: > > Yes, but the optimizer part could be disabled with > -fno-delete-null-pointer-checks which would render it a pure diagnostic > feature: > > https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-nonnull-function-attribute > > Is there an example where the compiler failed to detect a NULL user case? > > Best regards, > Christian Schoenebeck > >
-fno-delete-null-pointer-checks also prevents the compiler to infer that a pointer is never NULL with the fact it is dereferenced somewhere else. It also disables -fisolate-erroneous-paths-dereference, which turns code paths with NULL pointer dereferences into traps. I suspect these side effects are too important to ignore. Perhaps we may define QEMU_NONNULL as once it was, and document that it affects runtime behaviors and should not be blindly added to functions that already exist. We may also be able to enable -fisolate-erroneous-paths-attribute, which turns code paths with NULL pointer passing to such functions into traps, if we explicitly state that it has runtime effects. Regards, Akihiko Odaki