diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-12-05 10:17:32 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-12-05 10:17:32 +0100 |
commit | 81e4859a97804dfe76eb090f8b4d6a68361ce658 (patch) | |
tree | c4d6edfef9584b804b4cad0a69edcc27fc9758f2 /gcc | |
parent | 9896696391d7b9ddcc3bd4631d18877f14edd557 (diff) | |
download | gcc-81e4859a97804dfe76eb090f8b4d6a68361ce658.zip gcc-81e4859a97804dfe76eb090f8b4d6a68361ce658.tar.gz gcc-81e4859a97804dfe76eb090f8b4d6a68361ce658.tar.bz2 |
cp-gimplify.c (cp_maybe_instrument_return): Don't add __builtin_unreachable if -O0 or if -fsanitize=unreachable.
* cp-gimplify.c (cp_maybe_instrument_return): Don't add
__builtin_unreachable if -O0 or if -fsanitize=unreachable.
* g++.dg/missing-return.C: Add -O to dg-options.
From-SVN: r255403
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/missing-return.C | 2 |
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8760a70..5f7a574 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2017-12-05 Jakub Jelinek <jakub@redhat.com> + + * cp-gimplify.c (cp_maybe_instrument_return): Don't add + __builtin_unreachable if -O0 or if -fsanitize=unreachable. + 2017-12-04 Jason Merrill <jason@redhat.com> PR c++/83273 - constexpr if allows non-constant condition diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 68a253a..934f674 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -1554,6 +1554,18 @@ cp_maybe_instrument_return (tree fndecl) || !targetm.warn_func_return (fndecl)) return; + if (!sanitize_flags_p (SANITIZE_RETURN, fndecl) + /* Don't add __builtin_unreachable () if not optimizing, it will not + improve any optimizations in that case, just break UB code. + Don't add it if -fsanitize=unreachable -fno-sanitize=return either, + UBSan covers this with ubsan_instrument_return above where sufficient + information is provided, while the __builtin_unreachable () below + if return sanitization is disabled will just result in hard to + understand runtime error without location. */ + && (!optimize + || sanitize_flags_p (SANITIZE_UNREACHABLE, fndecl))) + return; + tree t = DECL_SAVED_TREE (fndecl); while (t) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 16eee3d..aeacec4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-12-05 Jakub Jelinek <jakub@redhat.com> + + * g++.dg/missing-return.C: Add -O to dg-options. + 2017-12-04 Jeff Law <law@redhat.com> PR tree-optimization/78496 diff --git a/gcc/testsuite/g++.dg/missing-return.C b/gcc/testsuite/g++.dg/missing-return.C index f7fcfeb..5f8e2cc 100644 --- a/gcc/testsuite/g++.dg/missing-return.C +++ b/gcc/testsuite/g++.dg/missing-return.C @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-Wreturn-type -fdump-tree-optimized" } */ +/* { dg-options "-Wreturn-type -fdump-tree-optimized -O" } */ int foo(int a) { |