Index: compiler-rt/trunk/lib/ubsan/ubsan_flags.inc =================================================================== --- compiler-rt/trunk/lib/ubsan/ubsan_flags.inc +++ compiler-rt/trunk/lib/ubsan/ubsan_flags.inc @@ -25,5 +25,5 @@ UBSAN_FLAG(bool, report_error_type, false, "Print specific error type instead of 'undefined-behavior' in summary.") UBSAN_FLAG(bool, silence_unsigned_overflow, false, - "Do not print error reports for unsigned integer overflow. " - "Used to provide fuzzing signal without blowing up logs.") + "Do not print non-fatal error reports for unsigned integer overflow. " + "Used to provide fuzzing signal without blowing up logs.") Index: compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc =================================================================== --- compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc +++ compiler-rt/trunk/lib/ubsan/ubsan_handlers.cc @@ -119,7 +119,9 @@ if (ignoreReport(Loc, Opts, ET)) return; - if (!IsSigned && flags()->silence_unsigned_overflow) + // If this is an unsigned overflow in non-fatal mode, potentially ignore it. + if (!IsSigned && !Opts.FromUnrecoverableHandler && + flags()->silence_unsigned_overflow) return; ScopedReport R(Opts, Loc, ET); Index: compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp =================================================================== --- compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp +++ compiler-rt/trunk/test/ubsan/TestCases/Integer/no-recover.cpp @@ -1,7 +1,9 @@ // RUN: %clangxx -fsanitize=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER // RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=all -fsanitize-recover=unsigned-integer-overflow %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefix=RECOVER // RUN: %env_ubsan_opts=silence_unsigned_overflow=1 %run %t 2>&1 | FileCheck %s --check-prefix=SILENT-RECOVER --allow-empty -// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow %s -o %t && not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT +// RUN: %clangxx -fsanitize=unsigned-integer-overflow -fno-sanitize-recover=unsigned-integer-overflow %s -o %t +// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT +// RUN: %env_ubsan_opts=silence_unsigned_overflow=1 not %run %t 2>&1 | FileCheck %s --check-prefix=ABORT #include