diff mbox series

Add option to control warnings added through attribure "warning"

Message ID 9f2769e0-c177-701c-85e4-485a1065e47b@inango-systems.com
State New
Headers show
Series Add option to control warnings added through attribure "warning" | expand

Commit Message

Nikolai Merinov Sept. 30, 2018, 7:52 p.m. UTC
Hello,

I prepared patch that give more precise control over __attribute__((warning)). Currently when you use "warning" attribute with "-Werror" option warning become error and there is no way to ignore this error.

With suggested changes it will be possible to use "-Werror -Wno-error=warning-attribute" to compile code with warning attributes. This particular case added as new testcase.

I tested suggested changes in two cases: with gcc-trunk compiled on GuixSD with GCC 5.5 on amd64 machine and as patch to gcc 6.2.0 inside of Yocto 2.2 environment on Ubuntu 14.04 on amd64 machine.

Regards,
Nikolai

gcc/Changelog

2018-09-29  Nikolai Merinov <n.merinov@inango-systems.com>

         * gcc/common.opt: Add -Wwarning-attribute.
         * gcc/doc/invoke.texi: Add documentation for -Wno-warning-attribute.
         * gcc/testsuite/gcc.dg/Wno-warning-attribute.c: New test.
         * gcc/expr.c (expand_expr_real_1): Add new attribute to warning_at
         call to allow user configure behavior of "warning" attribute
diff mbox series

Patch

Index: gcc/common.opt
===================================================================
--- gcc/common.opt	(revision 264725)
+++ gcc/common.opt	(working copy)
@@ -571,6 +571,10 @@  Wcpp
 Common Var(warn_cpp) Init(1) Warning
 Warn when a #warning directive is encountered.
 
+Wwarning-attribute
+Common Var(warn_warning_attribute) Init(1) Warning
+Warn about uses of __attribute__((warning)) declarations.
+
 Wdeprecated-declarations
 Common Var(warn_deprecated_decl) Init(1) Warning
 Warn about uses of __attribute__((deprecated)) declarations.
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 264725)
+++ gcc/doc/invoke.texi	(working copy)
@@ -291,6 +291,7 @@  Objective-C and Objective-C++ Dialects}.
 -Wclobbered  -Wcomment  -Wconditionally-supported @gol
 -Wconversion  -Wcoverage-mismatch  -Wno-cpp  -Wdangling-else  -Wdate-time @gol
 -Wdelete-incomplete @gol
+-Wno-warning-attribute @gol
 -Wno-deprecated  -Wno-deprecated-declarations  -Wno-designated-init @gol
 -Wdisabled-optimization @gol
 -Wno-discarded-qualifiers  -Wno-discarded-array-qualifiers @gol
@@ -6940,6 +6941,15 @@  confused with the digit 0, and so is not the defau
 useful as a local coding convention if the programming environment 
 cannot be fixed to display these characters distinctly.
 
+@item -Wno-warning-attribute
+@opindex Wno-warning-attribute
+@opindex Wwarning-attribute
+Do not warn about usage of functions (@pxref{Function Attributes})
+declared with @code{warning} attribute. By default, this warning is
+enabled.  @option{-Wno-warning-attribute} can be used to disable the
+warning or @option{-Wno-error=warning-attribute} can be used to
+disable the error when compiled with @option{-Werror} flag.
+
 @item -Wno-deprecated
 @opindex Wno-deprecated
 @opindex Wdeprecated
Index: gcc/expr.c
===================================================================
--- gcc/expr.c	(revision 264725)
+++ gcc/expr.c	(working copy)
@@ -10930,7 +10930,8 @@  expand_expr_real_1 (tree exp, rtx target, machine_
 					 DECL_ATTRIBUTES (fndecl))) != NULL)
 	  {
 	    const char *ident = lang_hooks.decl_printable_name (fndecl, 1);
-	    warning_at (tree_nonartificial_location (exp), 0,
+	    warning_at (tree_nonartificial_location (exp),
+			OPT_Wwarning_attribute,
 			"%Kcall to %qs declared with attribute warning: %s",
 			exp, identifier_to_locale (ident),
 			TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
Index: gcc/testsuite/gcc.dg/Wno-warning-attribute.c
===================================================================
--- gcc/testsuite/gcc.dg/Wno-warning-attribute.c	(revision 0)
+++ gcc/testsuite/gcc.dg/Wno-warning-attribute.c	(working copy)
@@ -0,0 +1,8 @@ 
+/* { dg-do compile } */
+/* { dg-options "-Werror -Wno-error=warning-attribute" } */
+
+int f1(void) __attribute__ ((warning("Please avoid f1")));
+int func1(void)
+{
+  return f1(); /* { dg-warning "'f1' declared with attribute warning: Please avoid f1" } */
+}