http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60275
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Author: jakub Date: Wed Apr 23 08:20:12 2014 New Revision: 209672 URL: http://gcc.gnu.org/viewcvs?rev=209672&root=gcc&view=rev Log: PR sanitizer/60275 * common.opt (fsanitize-recover, fsanitize-undefined-trap-on-error): New options. * gcc.c (sanitize_spec_function): Don't return "" for "undefined" if flag_sanitize_undefined_trap_on_error. * sanitizer.def (BUILT_IN_UBSAN_HANDLE_DIVREM_OVERFLOW_ABORT, BUILT_IN_UBSAN_HANDLE_SHIFT_OUT_OF_BOUNDS_ABORT, BUILT_IN_UBSAN_HANDLE_VLA_BOUND_NOT_POSITIVE_ABORT, BUILT_IN_UBSAN_HANDLE_TYPE_MISMATCH_ABORT, BUILT_IN_UBSAN_HANDLE_ADD_OVERFLOW_ABORT, BUILT_IN_UBSAN_HANDLE_SUB_OVERFLOW_ABORT, BUILT_IN_UBSAN_HANDLE_MUL_OVERFLOW_ABORT, BUILT_IN_UBSAN_HANDLE_NEGATE_OVERFLOW_ABORT, BUILT_IN_UBSAN_HANDLE_LOAD_INVALID_VALUE_ABORT): New builtins. * ubsan.c (ubsan_instrument_unreachable): Return __builtin_trap () if flag_sanitize_undefined_trap_on_error. (ubsan_expand_null_ifn): Emit __builtin_trap () if flag_sanitize_undefined_trap_on_error and __ubsan_handle_type_mismatch_abort if !flag_sanitize_recover. (ubsan_expand_null_ifn, ubsan_build_overflow_builtin, instrument_bool_enum_load): Emit __builtin_trap () if flag_sanitize_undefined_trap_on_error and __builtin_handle_*_abort () if !flag_sanitize_recover. * doc/invoke.texi (-fsanitize-recover, -fsanitize-undefined-trap-on-error): Document. c-family/ * c-ubsan.c (ubsan_instrument_return): Return __builtin_trap () if flag_sanitize_undefined_trap_on_error. (ubsan_instrument_division, ubsan_instrument_shift, ubsan_instrument_vla): Likewise. Use __ubsan_handle_*_abort () if !flag_sanitize_recover. testsuite/ * g++.dg/ubsan/return-2.C: Revert 2014-03-24 changes, add -fno-sanitize-recover to dg-options. * g++.dg/ubsan/cxx11-shift-1.C: Remove c++11 target restriction, add -std=c++11 to dg-options. * g++.dg/ubsan/cxx11-shift-2.C: Likewise. * g++.dg/ubsan/cxx1y-vla.C: Remove c++1y target restriction, add -std=c++1y to dg-options. * c-c++-common/ubsan/undefined-1.c: Revert 2014-03-24 changes, add -fno-sanitize-recover to dg-options. * c-c++-common/ubsan/overflow-sub-1.c: Likewise. * c-c++-common/ubsan/vla-4.c: Likewise. * c-c++-common/ubsan/pr59503.c: Likewise. * c-c++-common/ubsan/vla-3.c: Likewise. * c-c++-common/ubsan/save-expr-1.c: Likewise. * c-c++-common/ubsan/overflow-add-1.c: Likewise. * c-c++-common/ubsan/shift-3.c: Likewise. * c-c++-common/ubsan/overflow-1.c: Likewise. * c-c++-common/ubsan/overflow-negate-2.c: Likewise. * c-c++-common/ubsan/vla-2.c: Likewise. * c-c++-common/ubsan/overflow-mul-1.c: Likewise. * c-c++-common/ubsan/pr60613-1.c: Likewise. * c-c++-common/ubsan/shift-6.c: Likewise. * c-c++-common/ubsan/overflow-mul-3.c: Likewise. * c-c++-common/ubsan/overflow-add-3.c: New test. * c-c++-common/ubsan/overflow-add-4.c: New test. * c-c++-common/ubsan/div-by-zero-6.c: New test. * c-c++-common/ubsan/div-by-zero-7.c: New test. Added: trunk/gcc/testsuite/c-c++-common/ubsan/div-by-zero-6.c trunk/gcc/testsuite/c-c++-common/ubsan/div-by-zero-7.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-add-3.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-add-4.c Modified: trunk/gcc/ChangeLog trunk/gcc/c-family/ChangeLog trunk/gcc/c-family/c-ubsan.c trunk/gcc/common.opt trunk/gcc/doc/invoke.texi trunk/gcc/gcc.c trunk/gcc/sanitizer.def trunk/gcc/testsuite/ChangeLog trunk/gcc/testsuite/c-c++-common/ubsan/overflow-1.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c trunk/gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c trunk/gcc/testsuite/c-c++-common/ubsan/pr59503.c trunk/gcc/testsuite/c-c++-common/ubsan/pr60613-1.c trunk/gcc/testsuite/c-c++-common/ubsan/save-expr-1.c trunk/gcc/testsuite/c-c++-common/ubsan/shift-3.c trunk/gcc/testsuite/c-c++-common/ubsan/shift-6.c trunk/gcc/testsuite/c-c++-common/ubsan/undefined-1.c trunk/gcc/testsuite/c-c++-common/ubsan/vla-2.c trunk/gcc/testsuite/c-c++-common/ubsan/vla-3.c trunk/gcc/testsuite/c-c++-common/ubsan/vla-4.c trunk/gcc/testsuite/g++.dg/ubsan/cxx11-shift-1.C trunk/gcc/testsuite/g++.dg/ubsan/cxx11-shift-2.C trunk/gcc/testsuite/g++.dg/ubsan/cxx1y-vla.C trunk/gcc/testsuite/g++.dg/ubsan/return-2.C trunk/gcc/ubsan.c