From a594cff3b56f22153e50759c9eb4e0dbe54f3388 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Wed, 3 Jan 2018 20:43:47 +0000 Subject: [PATCH] PR c/83559 - -Wsuggest-attribute=const conflicts with -Wattributes warning about const attribute on function returning void 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 | 7 +++++++ gcc/doc/extend.texi | 2 +- gcc/ipa-pure-const.c | 15 ++++++++++++--- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/const-2.c | 22 ++++++++++++++++++++++ gcc/testsuite/gcc.dg/pure-3.c | 24 ++++++++++++++++++++++++ 6 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/const-2.c create mode 100644 gcc/testsuite/gcc.dg/pure-3.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 10e8d9ee513..8786a911087 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-01-03 Martin Sebor + + 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 * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Use diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 50967f5a752..5f0f4b86cb2 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -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 diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c index fee253e315a..a80b6845633 100644 --- a/gcc/ipa-pure-const.c +++ b/gcc/ipa-pure-const.c @@ -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 *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 *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 *warned_about; - warned_about + warned_about = suggest_attribute (OPT_Wsuggest_attribute_const, decl, known_finite, warned_about, "const"); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 55ed428cae7..23c5d1ccbd8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-01-03 Martin Sebor + + PR c/83559 + * gcc.dg/const-2.c: New test. + * gcc.dg/pure-3.c: New test. + 2018-01-03 Martin Sebor * 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 index 00000000000..e48005dfb0a --- /dev/null +++ b/gcc/testsuite/gcc.dg/const-2.c @@ -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 index 00000000000..2eeb8a30e9c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pure-3.c @@ -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" } */ +{ +} -- 2.30.2