diff --git a/v4/Makefile b/v4/Makefile index bd8a2905..cfee95fa 100644 --- a/v4/Makefile +++ b/v4/Makefile @@ -56,16 +56,20 @@ endif # AddressSanitizer and UndefinedBehaviorSanitizer at both widths and runs them. # The optimized run catches logic errors, this one catches the out-of-bounds # ring index and the width-dependent shift that a logic-only test cannot see. +# -fno-sanitize-recover=all makes every UBSan report fatal: without it UBSan +# prints the report and carries on, and the run still says "passed". +# +# Both binaries depend on this Makefile, so a flag change rebuilds them. define TEST_RULE -$(BINDIR)/$(1)-$(notdir $(2)): $(2) $$(SRCS) $$(wildcard $(HERE)/include/v4/*.h) +$(BINDIR)/$(1)-$(notdir $(2)): $(2) $$(SRCS) $$(wildcard $(HERE)/include/v4/*.h) $(HERE)/Makefile @mkdir -p $(BINDIR) $$(CC) $$(CFLAGS) -I$(HERE)/include -DV4_CELL_BITS=$(1) \ $(2) $$(SRCS) -o $$@ -$(BINDIR)/san-$(1)-$(notdir $(2)): $(2) $$(SRCS) $$(wildcard $(HERE)/include/v4/*.h) +$(BINDIR)/san-$(1)-$(notdir $(2)): $(2) $$(SRCS) $$(wildcard $(HERE)/include/v4/*.h) $(HERE)/Makefile @mkdir -p $(BINDIR) $$(CC) $$(CSTD) $$(WARN) -O1 -g -fno-omit-frame-pointer \ - -fsanitize=address,undefined -I$(HERE)/include -DV4_CELL_BITS=$(1) \ + -fsanitize=address,undefined -fno-sanitize-recover=all -I$(HERE)/include -DV4_CELL_BITS=$(1) \ $(2) $$(SRCS) -o $$@ endef