On Mon, Nov 17, 2014 at 06:40:00PM -0800, Alexey Samsonov wrote: > I've just prepared a patch implementing -fsanitize-recover=<list> in > Clang (http://reviews.llvm.org/D6302), writing here to make sure we're > on > the same page w.r.t. flag semantics: > > * -fsanitize-recover: Enable recovery for all checks enabled by > -fsanitize= which support it. > * -fno-sanitize-recover: Disable recovery for all checks.
That is not what I think we've agreed on and what is implemented in GCC. -fsanitize-recover only enables recovery of the undefined plus undefined-like sanitizers, in particular it doesn't enable recover from kernel-address, because -fsanitize-recover should be a deprecated option and kernel-address never used it before. So, in GCC -fsanitize-recover stands for -fsanitize-recover=undefined,float-divide-by-zero,float-cast-overflow and -fno-sanitize-recover stands for -fno-sanitize-recover=undefined,float-divide-by-zero,float-cast-overflow > * -fsanitize-recover=<list>: Enable recovery for all selected checks > or group of checks. It is forbidden to list unrecoverable sanitizers > here (e.g., "-fsanitize-recover=address" will produce an error). We only error on -fsanitize-recover=address -fsanitize-recover=thread -fsanitize-recover=leak but not say on -fsanitize-recover=unreachable which is part of undefined; unreachable isn't recoverable silently. Likewise -fsanitize-recover=return. Otherwise one couldn't use -fsanitize-recover=undefined which is useful. > * -fno-sanitize-recover=<list>: Disable recovery for selected checks > or group of checks. Jakub