+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
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
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");
}
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");
}
+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.
--- /dev/null
+/* 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" } */
+{
+}
--- /dev/null
+/* 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" } */
+{
+}