PR c/83559 - -Wsuggest-attribute=const conflicts with -Wattributes warning about...
authorMartin Sebor <msebor@redhat.com>
Wed, 3 Jan 2018 20:43:47 +0000 (20:43 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Wed, 3 Jan 2018 20:43:47 +0000 (13:43 -0700)
gcc/ChangeLog:

PR c/83559
* doc/extend.texi (attribute const): Fix a typo.
* ipa-pure-const.c ((warn_function_const, warn_function_pure): Avoid
issuing -Wsuggest-attribute for void functions.

gcc/testsuite/ChangeLog:

PR c/83559
* gcc.dg/const-2.c: New test.
* gcc.dg/pure-3.c: New test.

From-SVN: r256188

gcc/ChangeLog
gcc/doc/extend.texi
gcc/ipa-pure-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/const-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pure-3.c [new file with mode: 0644]

index 10e8d9ee513588cc3720bc61b73a43295a0d16e9..8786a9110871725a5406ad8615e7c2543e94d702 100644 (file)
@@ -1,3 +1,10 @@
+2018-01-03  Martin Sebor  <msebor@redhat.com>
+
+       PR c/83559
+       * doc/extend.texi (attribute const): Fix a typo.
+       * ipa-pure-const.c ((warn_function_const, warn_function_pure): Avoid
+       issuing -Wsuggest-attribute for void functions.
+
 2018-01-03  Martin Sebor  <msebor@redhat.com>
 
        * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Use
index 50967f5a7523e28999efc1eacd206318ac058f6c..5f0f4b86cb28149159c8daee45d6628c6e43742a 100644 (file)
@@ -2500,7 +2500,7 @@ definition than the similar @code{pure} attribute below because it prohibits
 the function from reading global variables.  Consequently, the presence of
 the attribute on a function declarations allows GCC to emit more efficient
 code for some calls to the function.  Decorating the same function with
-both the @code{const} and the @code{pure} attribute is diagnnosed.
+both the @code{const} and the @code{pure} attribute is diagnosed.
 
 @cindex pointer arguments
 Note that a function that has pointer arguments and examines the data
index fee253e315ab3bd242b3913f1896e5a36bfddb23..a80b6845633e009373486323345f0584ad3dc1ef 100644 (file)
@@ -213,9 +213,13 @@ suggest_attribute (int option, tree decl, bool known_finite,
 static void
 warn_function_pure (tree decl, bool known_finite)
 {
-  static hash_set<tree> *warned_about;
+  /* Declaring a void function pure makes no sense and is diagnosed
+     by -Wattributes because calling it would have no effect.  */
+  if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
+    return;
 
-  warned_about 
+  static hash_set<tree> *warned_about;
+  warned_about
     = suggest_attribute (OPT_Wsuggest_attribute_pure, decl,
                         known_finite, warned_about, "pure");
 }
@@ -226,8 +230,13 @@ warn_function_pure (tree decl, bool known_finite)
 static void
 warn_function_const (tree decl, bool known_finite)
 {
+  /* Declaring a void function const makes no sense is diagnosed
+     by -Wattributes because calling it would have no effect.  */
+  if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
+    return;
+
   static hash_set<tree> *warned_about;
-  warned_about 
+  warned_about
     = suggest_attribute (OPT_Wsuggest_attribute_const, decl,
                         known_finite, warned_about, "const");
 }
index 55ed428cae77df2e00b64a493a0ec7790024d955..23c5d1ccbd840720baed04b8e29e6c7bd5a34c11 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-03  Martin Sebor  <msebor@redhat.com>
+
+       PR c/83559
+       * gcc.dg/const-2.c: New test.
+       * gcc.dg/pure-3.c: New test.
+
 2018-01-03  Martin Sebor  <msebor@redhat.com>
 
        * gcc.dg/Wrestrict-3.c: New test.
diff --git a/gcc/testsuite/gcc.dg/const-2.c b/gcc/testsuite/gcc.dg/const-2.c
new file mode 100644 (file)
index 0000000..e48005d
--- /dev/null
@@ -0,0 +1,22 @@
+/* PR tree-optimization/83559 - -Wsuggest-attribute=const conflicts with
+   -Wattributes warning about const attribute on function returning void
+   { dg-do compile { target nonpic } }
+   { dg-options "-O2 -Wsuggest-attribute=const" } */
+
+int f_i_v (void)    /* { dg-warning "candidate for attribute .const." } */
+{
+  return 0;
+}
+
+int f_i ()          /* { dg-warning "candidate for attribute .const." } */
+{
+  return 0;
+}
+
+void f_v_v (void)   /* { dg-bogus "candidate" } */
+{
+}
+
+void f_v ()         /* { dg-bogus "candidate" } */
+{
+}
diff --git a/gcc/testsuite/gcc.dg/pure-3.c b/gcc/testsuite/gcc.dg/pure-3.c
new file mode 100644 (file)
index 0000000..2eeb8a3
--- /dev/null
@@ -0,0 +1,24 @@
+/* PR tree-optimization/83559 - -Wsuggest-attribute=const conflicts with
+   -Wattributes warning about const attribute on function returning void
+   { dg-do compile { target nonpic } }
+   { dg-options "-O2 -Wsuggest-attribute=pure" } */
+
+int global;
+
+int f_i_v (void)    /* { dg-warning "candidate for attribute .pure." } */
+{
+  return global;
+}
+
+int f_i ()          /* { dg-warning "candidate for attribute .pure." } */
+{
+  return global;
+}
+
+void f_v_v (void)   /* { dg-bogus "candidate" } */
+{
+}
+
+void f_v ()         /* { dg-bogus "candidate" } */
+{
+}