From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32478 invoked by alias); 23 Apr 2014 08:20:50 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 32396 invoked by uid 55); 23 Apr 2014 08:20:47 -0000 From: "jakub at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug sanitizer/60275] [UBSAN] Add -f[no-]sanitize-recover/-fsanitize-undefined-trap-on-error to make UBSAN's runtime errors fatal Date: Wed, 23 Apr 2014 08:20:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: sanitizer X-Bugzilla-Version: 4.9.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: jakub at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: mpolacek at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-SW-Source: 2014-04/txt/msg01665.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60275 --- Comment #6 from Jakub Jelinek --- 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