On Sat, Jul 15, 2017 at 07:18:56PM +0200, René Scharfe wrote: > -- >8 -- > Subject: [PATCH] Makefile: allow combining UBSan with other sanitizers > > Multiple sanitizers can be specified as a comma-separated list. Set > the flag NO_UNALIGNED_LOADS even if UndefinedBehaviorSanitizer is not > the only sanitizer to build with. Nice, I didn't know you could do comma-separation here. ;) I always just built the various sanitizers separately since I was testing whether each one worked. But if we can get UBSan to build cleanly, I agree that "make SANITIZE=address,undefined test" would be a nice thing to run periodically. > diff --git a/Makefile b/Makefile > index ba4359ef8d..9b98535a04 100644 > --- a/Makefile > +++ b/Makefile > @@ -1022,10 +1022,15 @@ ifdef DEVELOPER > CFLAGS += $(DEVELOPER_CFLAGS) > endif > > +comma := , > +empty := > +space := $(empty) $(empty) > + > ifdef SANITIZE > +SANITIZERS := $(foreach flag,$(subst $(comma),$(space),$(SANITIZE)),$(flag)) > BASIC_CFLAGS += -fsanitize=$(SANITIZE) -fno-sanitize-recover=$(SANITIZE) > BASIC_CFLAGS += -fno-omit-frame-pointer > -ifeq ($(SANITIZE),undefined) > +ifneq ($(filter undefined,$(SANITIZERS)),) The implementation is convoluted in the way that "make" usually forces us into. ;) I would have written it as: ifeq ($findstring $(SANITIZERS), undefined), undefined) but I think your version: 1. Isn't fooled by superstrings like a potential undefined-foo sanitizer. 2. Handles SANITIZE=undefined,undefined correctly. Neither are expected, but it doesn't hurt to be a bit more robust. -Peff