aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2015-01-06 10:52:06 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2015-01-06 10:52:06 +0100
commitfb153d02da077fb18f52372dab68a8cc52ea3a54 (patch)
tree3c149bb9e260ef1bff00bd67e7a0331e2b04a951 /gcc/opts.c
parenta1954e97e7e41395c48e6913b5902b466bac83b6 (diff)
downloadgcc-fb153d02da077fb18f52372dab68a8cc52ea3a54.zip
gcc-fb153d02da077fb18f52372dab68a8cc52ea3a54.tar.gz
gcc-fb153d02da077fb18f52372dab68a8cc52ea3a54.tar.bz2
opts.c (common_handle_option): Add support for -fno-sanitize=all and -f{,no-}sanitize-recover=all.
* opts.c (common_handle_option): Add support for -fno-sanitize=all and -f{,no-}sanitize-recover=all. * doc/invoke.texi: Document -fno-sanitize=all, -f{,no-}sanitize-recover=all. Document that -fsanitize=float-cast-overflow is not enabled by -fsanitize=undefined. Fix up documentation of -f{,no-}sanitize-recover. * c-c++-common/asan/sanitize-all-1.c: New test. * c-c++-common/ubsan/sanitize-all-1.c: New test. * c-c++-common/ubsan/sanitize-all-2.c: New test. * c-c++-common/ubsan/sanitize-all-3.c: New test. * c-c++-common/ubsan/sanitize-all-4.c: New test. From-SVN: r219241
Diffstat (limited to 'gcc/opts.c')
-rw-r--r--gcc/opts.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/opts.c b/gcc/opts.c
index 1e7a2cc..8a16116 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1588,6 +1588,7 @@ common_handle_option (struct gcc_options *opts,
sizeof "returns-nonnull-attribute" - 1 },
{ "object-size", SANITIZE_OBJECT_SIZE,
sizeof "object-size" - 1 },
+ { "all", ~0, sizeof "all" - 1 },
{ NULL, 0, 0 }
};
const char *comma;
@@ -1611,7 +1612,15 @@ common_handle_option (struct gcc_options *opts,
&& memcmp (p, spec[i].name, len) == 0)
{
/* Handle both -fsanitize and -fno-sanitize cases. */
- if (value)
+ if (value && spec[i].flag == ~0U)
+ {
+ if (code == OPT_fsanitize_)
+ error_at (loc, "-fsanitize=all option is not valid");
+ else
+ *flag |= ~(SANITIZE_USER_ADDRESS | SANITIZE_THREAD
+ | SANITIZE_LEAK);
+ }
+ else if (value)
*flag |= spec[i].flag;
else
*flag &= ~spec[i].flag;