Do not error for no_sanitize attributes (PR sanitizer/82490).
authorMartin Liska <mliska@suse.cz>
Wed, 11 Oct 2017 12:31:59 +0000 (14:31 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 11 Oct 2017 12:31:59 +0000 (12:31 +0000)
2017-10-11  Martin Liska  <mliska@suse.cz>

PR sanitizer/82490
* opts.c (parse_no_sanitize_attribute): Do not use error_value
variable.
* opts.h (parse_no_sanitize_attribute): Remove last argument.
2017-10-11  Martin Liska  <mliska@suse.cz>

PR sanitizer/82490
* c-attribs.c (handle_no_sanitize_attribute): Report directly
Wattributes warning.
2017-10-11  Martin Liska  <mliska@suse.cz>

PR sanitizer/82490
* c-c++-common/ubsan/attrib-5.c: New test.

From-SVN: r253640

gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-attribs.c
gcc/opts.c
gcc/opts.h
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/ubsan/attrib-5.c [new file with mode: 0644]

index 61ad754936cde3efee8d1c15b00b49c5b2df58e5..7dba1098f6a1b110f11d78aa57cbf3e79630f7cc 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-11  Martin Liska  <mliska@suse.cz>
+
+       PR sanitizer/82490
+       * opts.c (parse_no_sanitize_attribute): Do not use error_value
+       variable.
+       * opts.h (parse_no_sanitize_attribute): Remove last argument.
+
 2017-10-11  Martin Liska  <mliska@suse.cz>
 
        * print-rtl.c (print_insn): Move declaration of idbuf
index b63673035f451c4bbc5def857b4fd59beff6a156..51e1b771aad9841e5c6193310422a1a1937ce7fe 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-11  Martin Liska  <mliska@suse.cz>
+
+       PR sanitizer/82490
+       * c-attribs.c (handle_no_sanitize_attribute): Report directly
+       Wattributes warning.
+
 2017-10-10  Richard Sandiford  <richard.sandiford@linaro.org>
 
        * c-ada-spec.c (dump_generic_ada_node): Use wi::to_wide when
index 4e6754fba2002a3a7ce6355317702a966e20c231..bd8ca306c2d2793501d5a5b26e1d9a9f01bf2bea 100644 (file)
@@ -613,15 +613,8 @@ handle_no_sanitize_attribute (tree *node, tree name, tree args, int,
       return NULL_TREE;
     }
 
-  char *error_value = NULL;
   char *string = ASTRDUP (TREE_STRING_POINTER (id));
-  unsigned int flags = parse_no_sanitize_attribute (string, &error_value);
-
-  if (error_value)
-    {
-      error ("wrong argument: \"%s\"", error_value);
-      return NULL_TREE;
-    }
+  unsigned int flags = parse_no_sanitize_attribute (string);
 
   add_no_sanitize_value (*node, flags);
 
index 5aa5d066dbe29efd284cca231867021f0da4b0d1..adf3d89851d6f0ea5822dff9c24c851f54e29084 100644 (file)
@@ -1700,11 +1700,10 @@ parse_sanitizer_options (const char *p, location_t loc, int scode,
 }
 
 /* Parse string values of no_sanitize attribute passed in VALUE.
-   Values are separated with comma.  Wrong argument is stored to
-   WRONG_ARGUMENT variable.  */
+   Values are separated with comma.  */
 
 unsigned int
-parse_no_sanitize_attribute (char *value, char **wrong_argument)
+parse_no_sanitize_attribute (char *value)
 {
   unsigned int flags = 0;
   unsigned int i;
@@ -1722,7 +1721,8 @@ parse_no_sanitize_attribute (char *value, char **wrong_argument)
          }
 
       if (sanitizer_opts[i].name == NULL)
-       *wrong_argument = q;
+       warning (OPT_Wattributes,
+                "%<%s%> attribute directive ignored", q);
 
       q = strtok (NULL, ",");
     }
index 2774e2c8b40bdb042bf9a251b7dd1dca72b2bb41..109386157258366a88cc0265aa873e68739feafd 100644 (file)
@@ -390,7 +390,7 @@ extern void handle_common_deferred_options (void);
 unsigned int parse_sanitizer_options (const char *, location_t, int,
                                      unsigned int, int, bool);
 
-unsigned int parse_no_sanitize_attribute (char *value, char **wrong_argument);
+unsigned int parse_no_sanitize_attribute (char *value);
 extern bool common_handle_option (struct gcc_options *opts,
                                  struct gcc_options *opts_set,
                                  const struct cl_decoded_option *decoded,
index 1f51a7217bc28c44300a7021dc58fc1a07ef38a5..04adb938767100b5c49086bace0227379ece0dab 100644 (file)
@@ -1,3 +1,8 @@
+2017-10-11  Martin Liska  <mliska@suse.cz>
+
+       PR sanitizer/82490
+       * c-c++-common/ubsan/attrib-5.c: New test.
+
 2017-10-11  Martin Liska  <mliska@suse.cz>
 
        Revert r253637:
diff --git a/gcc/testsuite/c-c++-common/ubsan/attrib-5.c b/gcc/testsuite/c-c++-common/ubsan/attrib-5.c
new file mode 100644 (file)
index 0000000..fee1df1
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-fsanitize=undefined" } */
+
+__attribute__((no_sanitize("foobar")))
+static void
+float_cast2 (void)
+{ /* { dg-warning "attribute directive ignored" } */
+  volatile double d = 300;
+  volatile signed char c;
+  c = d;
+}