diff --git a/Makefile.include b/Makefile.include index d57f4fc33..3209ca8c8 100644 --- a/Makefile.include +++ b/Makefile.include @@ -14,7 +14,19 @@ endif # if you want to publish the board into the sources as an uppercase #define BB = $(shell echo $(BOARD)|tr 'a-z' 'A-Z') CPUDEF = $(shell echo $(CPU)|tr 'a-z' 'A-Z') -CFLAGS += -DBOARD=$(BB) -DCPU_$(CPUDEF) -fno-delete-null-pointer-checks +CFLAGS += -DBOARD=$(BB) -DCPU_$(CPUDEF) + +# Add `-fno-delete-null-pointer-checks` flag iff the compiler supports it. +# GCC removes moves tests whether `x == NULL`, if previously `x` or even `x->y` was accessed. +# 0x0 might be a sane memory location for embedded systems, so the test must not be removed. +# Right now clang does not use the *delete-null-pointer* optimization, and does not understand the parameter. +# Related issues: #628, #664. +ifeq ($(shell $(CC) -fno-delete-null-pointer-checks -E - 2>/dev/null >/dev/null &1 1>/dev/null