diff options
author | Marat Zakirov <m.zakirov@samsung.com> | 2014-11-18 08:46:39 +0000 |
---|---|---|
committer | Marat Zakirov <m.zakirov@samsung.com> | 2014-11-18 08:46:39 +0000 |
commit | d4de9ae771db6086ba2ca45dd4f66a81c70ae46b (patch) | |
tree | fa0e89f662222008a55de589be3b96b6f1bc3ecf | |
parent | 986b5ba9e4ef6163fdcebd2bae51d7fce0feb8b0 (diff) |
gcc
2014-11-18 Marat Zakirov <m.zakirov@samsung.com>
* opts.c (finish_options): Disable aggressive opts for sanitizer.
(common_handle_option): Move code to finish_options.
gcc/testsuite
2014-11-18 Marat Zakirov <m.zakirov@samsung.com>
* c-c++-common/asan/aggressive-opts.c: New test.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@217690 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/opts.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/asan/aggressive-opts.c | 28 |
4 files changed, 50 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c0649cf5d03..4877dc97747 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-11-18 Marat Zakirov <m.zakirov@samsung.com> + + * opts.c (finish_options): Disable aggressive opts for sanitizer. + (common_handle_option): Move code to finish_options. + 2014-11-18 Yury Gribov <y.gribov@samsung.com> PR sanitizer/63802 diff --git a/gcc/opts.c b/gcc/opts.c index d22882bf3a2..a83345b91e2 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -904,6 +904,19 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set, if (opts->x_flag_sanitize_recover & SANITIZE_LEAK) error_at (loc, "-fsanitize-recover=leak is not supported"); + + /* When instrumenting the pointers, we don't want to remove + the null pointer checks. */ + if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE + | SANITIZE_RETURNS_NONNULL_ATTRIBUTE)) + opts->x_flag_delete_null_pointer_checks = 0; + + /* Aggressive compiler optimizations may cause false negatives. */ + if (opts->x_flag_sanitize) + { + opts->x_flag_aggressive_loop_optimizations = 0; + opts->x_flag_strict_overflow = 0; + } } #define LEFT_COLUMN 27 @@ -1622,12 +1635,6 @@ common_handle_option (struct gcc_options *opts, if (code != OPT_fsanitize_) break; - /* When instrumenting the pointers, we don't want to remove - the null pointer checks. */ - if (opts->x_flag_sanitize & (SANITIZE_NULL | SANITIZE_NONNULL_ATTRIBUTE - | SANITIZE_RETURNS_NONNULL_ATTRIBUTE)) - opts->x_flag_delete_null_pointer_checks = 0; - /* Kernel ASan implies normal ASan but does not yet support all features. */ if (opts->x_flag_sanitize & SANITIZE_KERNEL_ADDRESS) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8a924cc5f0e..fbae34cb8c0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-11-18 Marat Zakirov <m.zakirov@samsung.com> + + * c-c++-common/asan/aggressive-opts.c: New test. + 2014-11-18 Yury Gribov <y.gribov@samsung.com> PR sanitizer/63802 diff --git a/gcc/testsuite/c-c++-common/asan/aggressive-opts.c b/gcc/testsuite/c-c++-common/asan/aggressive-opts.c new file mode 100644 index 00000000000..979b6118d1d --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/aggressive-opts.c @@ -0,0 +1,28 @@ +/* { dg-options "-fdump-tree-asan" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O3" } } */ + +int ext; + +int +Perl_do_sv_dump() +{ + int freq[10]; + int i; + int max = 0; + + if (max < ext) + max = ext; + + for (i = 0; i <= max; i++) + if (freq[i]) + ext = 0; + + if (i > 20) + return freq[i]; + else + return 0; +} + +/* { dg-final { scan-tree-dump-times "ASAN_CHECK" 2 "asan1" } } */ +/* { dg-final { cleanup-tree-dump "asan1" } } */ |