public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc r12-6840] options: Fix up -fsanitize-coverage= [PR104158]
Date: Mon, 24 Jan 2022 10:53:53 +0000 (GMT)	[thread overview]
Message-ID: <20220124105353.CFAF53858409@sourceware.org> (raw)

https://gcc.gnu.org/g:cd0377a460db9d8b286e03a701227ebd62132c89

commit r12-6840-gcd0377a460db9d8b286e03a701227ebd62132c89
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Mon Jan 24 11:51:49 2022 +0100

    options: Fix up -fsanitize-coverage= [PR104158]
    
    This is incremental patch to fix up -fsanitize-coverage= option
    handling, allow -fno-sanitize-coverage= again, allow both
    options together in one option or make
    -fsanitize-coverage=trace-pc -fsanitize-coverage=trace-cmp
    actually enable both suboptions rather than the last one.
    
    2022-01-24  Jakub Jelinek  <jakub@redhat.com>
    
            PR sanitizer/104158
            * common.opt (flag_sanitize_coverage): Remove Variable entry.
            (fsanitize-coverage=): Remove RejectNegative property, add
            Var(flag_sanitize_coverage) and EnumSet properties.
            (trace-pc): Add Set(1) property.
            (trace-cmp): Add Set(2) property.
            * opts.cc (common_handle_option): Don't handle
            OPT_fsanitize_coverage_.
    
            * gcc.dg/spellcheck-options-24.c: New test.
            * gcc.dg/sancov/pr104158-1.c: New test.
            * gcc.dg/sancov/pr104158-2.c: New test.
            * gcc.dg/sancov/pr104158-3.c: New test.
            * gcc.dg/sancov/pr104158-4.c: New test.
            * gcc.dg/sancov/pr104158-5.c: New test.
            * gcc.dg/sancov/pr104158-6.c: New test.
            * gcc.dg/sancov/pr104158-7.c: New test.

Diff:
---
 gcc/common.opt                               | 10 +++-------
 gcc/opts.cc                                  |  4 ----
 gcc/testsuite/gcc.dg/sancov/pr104158-1.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-2.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-3.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-4.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-5.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-6.c     | 11 +++++++++++
 gcc/testsuite/gcc.dg/sancov/pr104158-7.c     |  5 +++++
 gcc/testsuite/gcc.dg/spellcheck-options-24.c |  5 +++++
 10 files changed, 79 insertions(+), 11 deletions(-)

diff --git a/gcc/common.opt b/gcc/common.opt
index fe7bcf66752..985e6ab6f81 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -223,10 +223,6 @@ unsigned int flag_sanitize
 Variable
 unsigned int flag_sanitize_recover = (SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT | SANITIZE_KERNEL_ADDRESS | SANITIZE_KERNEL_HWADDRESS) & ~(SANITIZE_UNREACHABLE | SANITIZE_RETURN)
 
-; What the coverage sanitizers should instrument
-Variable
-unsigned int flag_sanitize_coverage
-
 ; Flag whether a prefix has been added to dump_base_name
 Variable
 bool dump_base_name_prefixed = false
@@ -1076,17 +1072,17 @@ Common Driver Joined
 Select what to sanitize.
 
 fsanitize-coverage=
-Common Joined RejectNegative Enum(sanitize_coverage)
+Common Joined Enum(sanitize_coverage) Var(flag_sanitize_coverage) EnumSet
 Select type of coverage sanitization.
 
 Enum
 Name(sanitize_coverage) Type(int)
 
 EnumValue
-Enum(sanitize_coverage) String(trace-pc) Value(SANITIZE_COV_TRACE_PC)
+Enum(sanitize_coverage) String(trace-pc) Value(SANITIZE_COV_TRACE_PC) Set(1)
 
 EnumValue
-Enum(sanitize_coverage) String(trace-cmp) Value(SANITIZE_COV_TRACE_CMP)
+Enum(sanitize_coverage) String(trace-cmp) Value(SANITIZE_COV_TRACE_CMP) Set(2)
 
 fasan-shadow-offset=
 Common Joined RejectNegative Var(common_deferred_options) Defer
diff --git a/gcc/opts.cc b/gcc/opts.cc
index 733f3943871..fb906fa0aea 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -2621,10 +2621,6 @@ common_handle_option (struct gcc_options *opts,
 	  &= ~(SANITIZE_UNDEFINED | SANITIZE_UNDEFINED_NONDEFAULT);
       break;
 
-    case OPT_fsanitize_coverage_:
-      opts->x_flag_sanitize_coverage = value;
-      break;
-
     case OPT_O:
     case OPT_Os:
     case OPT_Ofast:
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-1.c b/gcc/testsuite/gcc.dg/sancov/pr104158-1.c
new file mode 100644
index 00000000000..2a3187982ca
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-1.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-cmp -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-2.c b/gcc/testsuite/gcc.dg/sancov/pr104158-2.c
new file mode 100644
index 00000000000..b143504e29d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-2.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-pc -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump-not "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-3.c b/gcc/testsuite/gcc.dg/sancov/pr104158-3.c
new file mode 100644
index 00000000000..e2a1cfbc635
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-3.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-cmp,trace-pc -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-4.c b/gcc/testsuite/gcc.dg/sancov/pr104158-4.c
new file mode 100644
index 00000000000..9c2e722436e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-4.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-pc,trace-cmp -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-5.c b/gcc/testsuite/gcc.dg/sancov/pr104158-5.c
new file mode 100644
index 00000000000..5b130d0efbf
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-5.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-cmp -fsanitize-coverage=trace-pc -fno-sanitize-coverage=trace-cmp -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump-not "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-6.c b/gcc/testsuite/gcc.dg/sancov/pr104158-6.c
new file mode 100644
index 00000000000..3eed1d7206d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-6.c
@@ -0,0 +1,11 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-cmp -fsanitize-coverage=trace-pc -fno-sanitize-coverage=trace-pc,trace-cmp -fdump-tree-optimized" } */
+/* { dg-final { scan-tree-dump-not "__sanitizer_cov_trace_cmp" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "__sanitizer_cov_trace_pc" "optimized" } } */
+
+int
+foo (int a, int b)
+{
+  return a == b;
+}
diff --git a/gcc/testsuite/gcc.dg/sancov/pr104158-7.c b/gcc/testsuite/gcc.dg/sancov/pr104158-7.c
new file mode 100644
index 00000000000..aacd23e9512
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/sancov/pr104158-7.c
@@ -0,0 +1,5 @@
+/* PR sanitizer/104158 */
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-cmp,trace-cmp -fdump-tree-optimized" } */
+/* { dg-error "invalid argument in option '-fsanitize-coverage=trace-cmp,trace-cmp'" "" { target *-*-* } 0 } */
+/* { dg-message "'trace-cmp' specified multiple times in the same option" "" { target *-*-* } 0 } */
diff --git a/gcc/testsuite/gcc.dg/spellcheck-options-24.c b/gcc/testsuite/gcc.dg/spellcheck-options-24.c
new file mode 100644
index 00000000000..1bd6cc29be7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/spellcheck-options-24.c
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-fsanitize-coverage=trace-pc,tracecmp" } */
+
+/* { dg-error "unrecognized argument in option '-fsanitize-coverage=trace-pc,tracecmp'" "" { target *-*-* } 0 } */
+/* { dg-message "valid arguments to '-fsanitize-coverage=' are: trace-cmp trace-pc; did you mean 'trace-cmp'?" "" { target *-*-* } 0 } */


                 reply	other threads:[~2022-01-24 10:53 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220124105353.CFAF53858409@sourceware.org \
    --to=jakub@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).