toplev.h: Add comment about the first parameter for warning().
authorDJ Delorie <dj@redhat.com>
Tue, 19 Jul 2005 20:19:16 +0000 (16:19 -0400)
committerDJ Delorie <dj@gcc.gnu.org>
Tue, 19 Jul 2005 20:19:16 +0000 (16:19 -0400)
* toplev.h: Add comment about the first parameter for warning().
* errors.h: Likewise.

* c.opt (Wpragmas): New.
* doc/invoke.texi: Document it.

* function.c (do_warn_unused_parameter): Add warning control to
warning call.
* c-decl.c (warn_if_shadowing): Likewise.
* c-lex.c (cb_def_pragma): Likewise.
* c-pragma.c (GCC_BAD, GCC_BAD2): Likewise.
(pop_alignment): Likewise.
(handle_pragma_pack): Likewise.
(apply_pragma_weak): Likewise.
(handle_pragma_weak): Likewise.
(handle_pragma_redefine_extname): Likewise.
(add_to_renaming_pragma_list): Likewise.
(handle_pragma_extern_prefix): Likewise.
(maybe_apply_renaming_pragma): Likewise.
(handle_pragma_visibility): Likewise.

* config/c4x/c4x-c.c (BAD): Likewise.
(c4x_parse_pragma): Likewise.
* config/ia64/ia64-c.c (ia64_hpux_handle_builtin_pragma): Likewise.
* config/rs6000/rs6000-c.c (SYNTAX_ERROR): Likewise.
(rs6000_pragma_longcall): Likewise.
* config/v850/v850-c.c (pop_data_area): Likewise.
(ghs_pragma_section): Likewise.
(ghs_pragma_section): Likewise.
(ghs_pragma_interrupt): Likewise.
(ghs_pragma_starttda): Likewise.
(ghs_pragma_startsda): Likewise.
(ghs_pragma_startzda): Likewise.
(ghs_pragma_endtda): Likewise.
(ghs_pragma_endsda): Likewise.
(ghs_pragma_endzda): Likewise.

From-SVN: r102168

13 files changed:
gcc/ChangeLog
gcc/c-decl.c
gcc/c-lex.c
gcc/c-pragma.c
gcc/c.opt
gcc/config/c4x/c4x-c.c
gcc/config/ia64/ia64-c.c
gcc/config/rs6000/rs6000-c.c
gcc/config/v850/v850-c.c
gcc/doc/invoke.texi
gcc/errors.h
gcc/function.c
gcc/toplev.h

index 3e3c6e3b1cbcb3367fb6bcb8dc67370b5d03353d..ec8a08eef0b08cc13e6f43bff86a8b7bc29a9335 100644 (file)
@@ -1,3 +1,42 @@
+2005-07-15  DJ Delorie  <dj@redhat.com>
+
+       * toplev.h: Add comment about the first parameter for warning().
+       * errors.h: Likewise.
+
+       * c.opt (Wpragmas): New.
+       * doc/invoke.texi: Document it.
+       
+       * function.c (do_warn_unused_parameter): Add warning control to
+       warning call.
+       * c-decl.c (warn_if_shadowing): Likewise.
+       * c-lex.c (cb_def_pragma): Likewise.
+       * c-pragma.c (GCC_BAD, GCC_BAD2): Likewise.
+       (pop_alignment): Likewise.
+       (handle_pragma_pack): Likewise.
+       (apply_pragma_weak): Likewise.
+       (handle_pragma_weak): Likewise.
+       (handle_pragma_redefine_extname): Likewise.
+       (add_to_renaming_pragma_list): Likewise.
+       (handle_pragma_extern_prefix): Likewise.
+       (maybe_apply_renaming_pragma): Likewise.
+       (handle_pragma_visibility): Likewise.
+       
+       * config/c4x/c4x-c.c (BAD): Likewise.
+       (c4x_parse_pragma): Likewise.
+       * config/ia64/ia64-c.c (ia64_hpux_handle_builtin_pragma): Likewise.
+       * config/rs6000/rs6000-c.c (SYNTAX_ERROR): Likewise.
+       (rs6000_pragma_longcall): Likewise.
+       * config/v850/v850-c.c (pop_data_area): Likewise.
+       (ghs_pragma_section): Likewise.
+       (ghs_pragma_section): Likewise.
+       (ghs_pragma_interrupt): Likewise.
+       (ghs_pragma_starttda): Likewise.
+       (ghs_pragma_startsda): Likewise.
+       (ghs_pragma_startzda): Likewise.
+       (ghs_pragma_endtda): Likewise.
+       (ghs_pragma_endsda): Likewise.
+       (ghs_pragma_endzda): Likewise.
+
 2005-07-19  Danny Berlin <dberlin@dberlin.org>
            Kenneth Zadeck <zadeck@naturalbridge.com>
 
index aff59bc170f20fd80003ffe66bb759e8398f35a1..71a955380eca54c1f66c1da15991acfbc4561f2e 100644 (file)
@@ -1908,27 +1908,28 @@ warn_if_shadowing (tree new_decl)
 
        if (old_decl == error_mark_node)
          {
-           warning (0, "declaration of %q+D shadows previous non-variable",
-                    new_decl);
+           warning (OPT_Wshadow, "declaration of %q+D shadows previous "
+                    "non-variable", new_decl);
            break;
          }
        else if (TREE_CODE (old_decl) == PARM_DECL)
-         warning (0, "declaration of %q+D shadows a parameter", new_decl);
-       else if (DECL_FILE_SCOPE_P (old_decl))
-         warning (0, "declaration of %q+D shadows a global declaration",
+         warning (OPT_Wshadow, "declaration of %q+D shadows a parameter",
                   new_decl);
+       else if (DECL_FILE_SCOPE_P (old_decl))
+         warning (OPT_Wshadow, "declaration of %q+D shadows a global "
+                  "declaration", new_decl);
        else if (TREE_CODE (old_decl) == FUNCTION_DECL
                 && DECL_BUILT_IN (old_decl))
          {
-           warning (0, "declaration of %q+D shadows a built-in function",
-                    new_decl);
+           warning (OPT_Wshadow, "declaration of %q+D shadows "
+                    "a built-in function", new_decl);
            break;
          }
        else
-         warning (0, "declaration of %q+D shadows a previous local",
+         warning (OPT_Wshadow, "declaration of %q+D shadows a previous local",
                   new_decl);
 
-       warning (0, "%Jshadowed declaration is here", old_decl);
+       warning (OPT_Wshadow, "%Jshadowed declaration is here", old_decl);
 
        break;
       }
index 52f9b68223a0a259b617fe641a0ade368cd93c7f..1c832c50d15a648979fbedb5864d82eb4a73f1e4 100644 (file)
@@ -299,7 +299,8 @@ cb_def_pragma (cpp_reader *pfile, source_location loc)
            name = cpp_token_as_text (pfile, s);
        }
 
-      warning (0, "%Hignoring #pragma %s %s", &fe_loc, space, name);
+      warning (OPT_Wunknown_pragmas, "%Hignoring #pragma %s %s",
+              &fe_loc, space, name);
     }
 }
 
index 65b12ce54de9a29d413c0a0068f0e0cb3b99d5d7..1407a114c52513029d7e77bafe7056294c188705 100644 (file)
@@ -37,9 +37,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #include "vec.h"
 #include "target.h"
 
-#define GCC_BAD(gmsgid) do { warning (0, gmsgid); return; } while (0)
+#define GCC_BAD(gmsgid) \
+  do { warning (OPT_Wpragmas, gmsgid); return; } while (0)
 #define GCC_BAD2(gmsgid, arg) \
-  do { warning (0, gmsgid, arg); return; } while (0)
+  do { warning (OPT_Wpragmas, gmsgid, arg); return; } while (0)
 
 typedef struct align_stack GTY(())
 {
@@ -110,7 +111,7 @@ pop_alignment (tree id)
            break;
          }
       if (entry == NULL)
-       warning (0, "\
+       warning (OPT_Wpragmas, "\
 #pragma pack(pop, %s) encountered without matching #pragma pack(push, %s)"
                 , IDENTIFIER_POINTER (id), IDENTIFIER_POINTER (id));
     }
@@ -203,7 +204,7 @@ handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy))
     GCC_BAD ("malformed %<#pragma pack%> - ignored");
 
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of %<#pragma pack%>");
+    warning (OPT_Wpragmas, "junk at end of %<#pragma pack%>");
 
   if (flag_pack_struct)
     GCC_BAD ("#pragma pack has no effect with -fpack-struct - ignored");
@@ -259,8 +260,8 @@ apply_pragma_weak (tree decl, tree value)
   if (SUPPORTS_WEAK && DECL_EXTERNAL (decl) && TREE_USED (decl)
       && !DECL_WEAK (decl) /* Don't complain about a redundant #pragma.  */
       && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
-    warning (0, "applying #pragma weak %q+D after first use results "
-             "in unspecified behavior", decl);
+    warning (OPT_Wpragmas, "applying #pragma weak %q+D after first use "
+             "results in unspecified behavior", decl);
 
   declare_weak (decl);
 }
@@ -342,7 +343,7 @@ handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy))
       t = c_lex (&x);
     }
   if (t != CPP_EOF)
-    warning (0, "junk at end of #pragma weak");
+    warning (OPT_Wpragmas, "junk at end of #pragma weak");
 
   decl = identifier_global_value (name);
   if (decl && DECL_P (decl))
@@ -415,7 +416,7 @@ handle_pragma_redefine_extname (cpp_reader * ARG_UNUSED (dummy))
     GCC_BAD ("malformed #pragma redefine_extname, ignored");
   t = c_lex (&x);
   if (t != CPP_EOF)
-    warning (0, "junk at end of #pragma redefine_extname");
+    warning (OPT_Wpragmas, "junk at end of #pragma redefine_extname");
 
   if (!flag_mudflap && !targetm.handle_pragma_redefine_extname)
     {
@@ -438,8 +439,8 @@ handle_pragma_redefine_extname (cpp_reader * ARG_UNUSED (dummy))
          name = targetm.strip_name_encoding (name);
 
          if (strcmp (name, IDENTIFIER_POINTER (newname)))
-           warning (0, "#pragma redefine_extname ignored due to conflict with "
-                    "previous rename");
+           warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to "
+                    "conflict with previous rename");
        }
       else
        change_decl_assembler_name (decl, newname);
@@ -461,8 +462,8 @@ add_to_renaming_pragma_list (tree oldname, tree newname)
   if (previous)
     {
       if (TREE_VALUE (previous) != newname)
-       warning (0, "#pragma redefine_extname ignored due to conflict with "
-                "previous #pragma redefine_extname");
+       warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to "
+                "conflict with previous #pragma redefine_extname");
       return;
     }
   
@@ -483,7 +484,7 @@ handle_pragma_extern_prefix (cpp_reader * ARG_UNUSED (dummy))
     GCC_BAD ("malformed #pragma extern_prefix, ignored");
   t = c_lex (&x);
   if (t != CPP_EOF)
-    warning (0, "junk at end of #pragma extern_prefix");
+    warning (OPT_Wpragmas, "junk at end of #pragma extern_prefix");
 
   if (targetm.handle_pragma_extern_prefix)
     /* Note that the length includes the null terminator.  */
@@ -516,7 +517,7 @@ maybe_apply_renaming_pragma (tree decl, tree asmname)
       oldname = targetm.strip_name_encoding (oldname);
 
       if (asmname && strcmp (TREE_STRING_POINTER (asmname), oldname))
-         warning (0, "asm declaration ignored due to "
+         warning (OPT_Wpragmas, "asm declaration ignored due to "
                   "conflict with previous rename");
 
       /* Take any pending redefine_extname off the list.  */
@@ -525,7 +526,7 @@ maybe_apply_renaming_pragma (tree decl, tree asmname)
          {
            /* Only warn if there is a conflict.  */
            if (strcmp (IDENTIFIER_POINTER (TREE_VALUE (t)), oldname))
-             warning (0, "#pragma redefine_extname ignored due to "
+             warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to "
                       "conflict with previous rename");
 
            *p = TREE_CHAIN (t);
@@ -547,7 +548,7 @@ maybe_apply_renaming_pragma (tree decl, tree asmname)
          {
            if (strcmp (TREE_STRING_POINTER (asmname),
                        IDENTIFIER_POINTER (newname)) != 0)
-             warning (0, "#pragma redefine_extname ignored due to "
+             warning (OPT_Wpragmas, "#pragma redefine_extname ignored due to "
                       "conflict with __asm__ declaration");
            return asmname;
          }
@@ -661,7 +662,7 @@ handle_pragma_visibility (cpp_reader *dummy ATTRIBUTE_UNUSED)
         }
     }
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of %<#pragma GCC visibility%>");
+    warning (OPT_Wpragmas, "junk at end of %<#pragma GCC visibility%>");
 }
 
 #endif
index f13fbe86cd084d2ebbbd3b71f5ad9ea1c9d2956c..908efd61f9c1db946551811d9c7addabe0da69dc 100644 (file)
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -331,6 +331,10 @@ Wpointer-to-int-cast
 C ObjC Var(warn_pointer_to_int_cast) Init(1)
 Warn when a pointer is cast to an integer of a different size
 
+Wpragmas
+C ObjC C++ ObjC++ Var(warn_pragmas) Init(1)
+Warn about misuses of pragmas
+
 Wprotocol
 ObjC ObjC++ Var(warn_protocol) Init(1)
 Warn if inherited methods are unimplemented
index 644fe866ac51061262062b6a74eab0d8c7d5e856..fe3a92229816778412b7a8b2214b633a16e315a8 100644 (file)
@@ -57,7 +57,8 @@ static int c4x_parse_pragma (const char *, tree *, tree *);
    the STRING_CST node of the string.  If SECT is null, then this
    pragma doesn't take a section string.  Returns 0 for a good pragma,
    -1 for a malformed pragma.  */
-#define BAD(gmsgid, arg) do { warning (0, gmsgid, arg); return -1; } while (0)
+#define BAD(gmsgid, arg) \
+  do { warning (OPT_Wpragmas, gmsgid, arg); return -1; } while (0)
 
 static int
 c4x_parse_pragma (name, func, sect)
@@ -86,7 +87,7 @@ c4x_parse_pragma (name, func, sect)
     BAD ("missing ')' for '#pragma %s' - ignored", name);
 
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of '#pragma %s'", name);
+    warning (OPT_Wpragmas, "junk at end of '#pragma %s'", name);
 
   *func = f;
   return 0;
index d29d15a3f9bdbbdc348d30a178abca08d6b13e3a..d51a98d6ebc1ab40c3a0c8db108e2b33be4e3510 100644 (file)
@@ -49,7 +49,7 @@ ia64_hpux_handle_builtin_pragma (cpp_reader *pfile ATTRIBUTE_UNUSED)
        type = c_lex (&x);
     }
   if (type != CPP_EOF)
-    warning (0, "malformed #pragma builtin");
+    warning (OPT_Wpragmas, "malformed #pragma builtin");
 }
 
 /* List of standard math functions which do not set matherr by default
index 1e851e45b2c7c32e5a08c7521d89a15bc7b68e47..c125c78295164bfe0c9687f7faf874feabc4b4c2 100644 (file)
@@ -50,10 +50,10 @@ static tree altivec_resolve_overloaded_builtin (tree, tree);
    whether or not new function declarations receive a longcall
    attribute by default.  */
 
-#define SYNTAX_ERROR(gmsgid) do {                      \
-  warning (0, gmsgid);                                 \
-  warning (0, "ignoring malformed #pragma longcall");  \
-  return;                                              \
+#define SYNTAX_ERROR(gmsgid) do {                                      \
+  warning (OPT_Wpragmas, gmsgid);                                      \
+  warning (OPT_Wpragmas, "ignoring malformed #pragma longcall");       \
+  return;                                                              \
 } while (0)
 
 void
@@ -75,7 +75,7 @@ rs6000_pragma_longcall (cpp_reader *pfile ATTRIBUTE_UNUSED)
     SYNTAX_ERROR ("number must be 0 or 1");
 
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma longcall");
+    warning (OPT_Wpragmas, "junk at end of #pragma longcall");
 
   rs6000_default_long_calls = (n == integer_one_node);
 }
index a7acf99fd51dbc484b809ea37e35d4ba783cb327..cbb86cdd426bf8425aa5cab81a43c073971cb02c 100644 (file)
@@ -64,9 +64,11 @@ static int
 pop_data_area (v850_data_area data_area)
 {
   if (data_area_stack == NULL)
-    warning (0, "#pragma GHS endXXXX found without previous startXXX");
+    warning (OPT_Wpragmas, "#pragma GHS endXXXX found without "
+            "previous startXXX");
   else if (data_area != data_area_stack->data_area)
-    warning (0, "#pragma GHS endXXX does not match previous startXXX");
+    warning (OPT_Wpragmas, "#pragma GHS endXXX does not match "
+            "previous startXXX");
   else
     {
       data_area_stack_element * elem;
@@ -144,7 +146,7 @@ ghs_pragma_section (cpp_reader * pfile ATTRIBUTE_UNUSED)
       if (type == CPP_COMMA)
        repeat = 1;
       else if (type != CPP_EOF)
-       warning (0, "junk at end of #pragma ghs section");
+       warning (OPT_Wpragmas, "junk at end of #pragma ghs section");
       
       if      (streq (sect, "data"))    kind = GHS_SECTION_KIND_DATA;
       else if (streq (sect, "text"))    kind = GHS_SECTION_KIND_TEXT;
@@ -176,7 +178,7 @@ ghs_pragma_section (cpp_reader * pfile ATTRIBUTE_UNUSED)
   return;
 
  bad:
-  warning (0, "malformed #pragma ghs section");
+  warning (OPT_Wpragmas, "malformed #pragma ghs section");
   return;
 
  reset:
@@ -195,7 +197,7 @@ ghs_pragma_interrupt (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs interrupt");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs interrupt");
   
   mark_current_function_as_interrupt ();
 }
@@ -206,7 +208,7 @@ ghs_pragma_starttda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs starttda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs starttda");
   
   push_data_area (DATA_AREA_TDA);
 }
@@ -217,7 +219,7 @@ ghs_pragma_startsda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs startsda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs startsda");
   
   push_data_area (DATA_AREA_SDA);
 }
@@ -228,7 +230,7 @@ ghs_pragma_startzda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs startzda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs startzda");
   
   push_data_area (DATA_AREA_ZDA);
 }
@@ -239,7 +241,7 @@ ghs_pragma_endtda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs endtda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs endtda");
   
   pop_data_area (DATA_AREA_TDA);
 }
@@ -250,7 +252,7 @@ ghs_pragma_endsda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs endsda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs endsda");
   
   pop_data_area (DATA_AREA_SDA);
 }
@@ -261,7 +263,7 @@ ghs_pragma_endzda (cpp_reader * pfile ATTRIBUTE_UNUSED)
   tree x;
   
   if (c_lex (&x) != CPP_EOF)
-    warning (0, "junk at end of #pragma ghs endzda");
+    warning (OPT_Wpragmas, "junk at end of #pragma ghs endzda");
   
   pop_data_area (DATA_AREA_ZDA);
 }
index d4a504b8691f476bb8c0c124e1a8b36fd141666f..48764a632077c58117b88009854350896d249d64 100644 (file)
@@ -241,7 +241,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wsign-compare  -Wstrict-aliasing -Wstrict-aliasing=2 @gol
 -Wswitch  -Wswitch-default  -Wswitch-enum @gol
 -Wsystem-headers  -Wtrigraphs  -Wundef  -Wuninitialized @gol
--Wunknown-pragmas  -Wunreachable-code @gol
+-Wunknown-pragmas  -Wno-pragmas -Wunreachable-code @gol
 -Wunused  -Wunused-function  -Wunused-label  -Wunused-parameter @gol
 -Wunused-value  -Wunused-variable  -Wwrite-strings @gol
 -Wvariadic-macros}
@@ -2709,6 +2709,13 @@ GCC@.  If this command line option is used, warnings will even be issued
 for unknown pragmas in system header files.  This is not the case if
 the warnings were only enabled by the @option{-Wall} command line option.
 
+@item -Wno-pragmas
+@opindex Wno-pragmas
+@opindex Wpragmas
+Do not warn about misuses of pragmas, such as incorrect parameters,
+invalid syntax, or conflicts between pragmas.  See also
+@samp{-Wunknown-pragmas}.
+
 @item -Wstrict-aliasing
 @opindex Wstrict-aliasing
 This option is only active when @option{-fstrict-aliasing} is active.
index ecb0af123844c4085c98b3e438ebe8a4e3258111..5fefa07164412065be45467da307091ca3fdc489 100644 (file)
@@ -30,6 +30,10 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 #ifndef GCC_ERRORS_H
 #define GCC_ERRORS_H
 
+/* The first parameter is for compatibility with the non-generator
+   version of warning().  For those, you'd pass an OPT_W* value from
+   options.h, but in generator programs it has no effect, so it's OK
+   to just pass zero for calls from generator-only files.  */
 extern void warning (int, const char *, ...) ATTRIBUTE_PRINTF_2;
 extern void error (const char *, ...) ATTRIBUTE_PRINTF_1;
 extern void fatal (const char *, ...) ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF_1;
index 160c80dfaa0dee63857e8bb435eaef0c5dc33e6b..38f56a607e29edba63dd0e08f631f85644508c0f 100644 (file)
@@ -4315,7 +4315,7 @@ do_warn_unused_parameter (tree fn)
        decl; decl = TREE_CHAIN (decl))
     if (!TREE_USED (decl) && TREE_CODE (decl) == PARM_DECL
        && DECL_NAME (decl) && !DECL_ARTIFICIAL (decl))
-      warning (0, "unused parameter %q+D", decl);
+      warning (OPT_Wunused_parameter, "unused parameter %q+D", decl);
 }
 
 static GTY(()) rtx initial_trampoline;
index 48339dbd86ba074cc425a4c2066bb2063be0c19b..45797b133816f70d486ce4f18c15de1262d7716d 100644 (file)
@@ -57,6 +57,7 @@ extern void _fatal_insn (const char *, rtx, const char *, int, const char *)
 extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)
      ATTRIBUTE_NORETURN;
 extern void warning0 (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
+/* Pass one of the OPT_W* from options.h as the first parameter.  */
 extern void warning (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
 extern void error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
 extern void fatal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)