diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9f0c949f71718ad7d4c1b5443a3cea0c61884371..76750938efc11a8a274e9366bcc28042885ab199 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Mon Jul 6 22:50:48 1998 Jason Merrill <jason@yorick.cygnus.com> + + * c-decl.c: Add warn_multichar. + (c_decode_option): Handle -Wno-multichar. + * c-lex.c (yylex): Check it. + * c-tree.h: Declare it. + * toplev.c (lang_options): Add it. + * invoke.texi: Document it. + Mon Jul 6 22:47:55 1998 J"orn Rennecke <amylaar@cygnus.co.uk> * gcse.c (hash_scan_insn): New argument IN_LIBCALL_BLOCK. Changed diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 5465e4027df5e60a90b0708339656738c9a61f21..9901db80e68dfee2a2b2b4b6ef9f00eebd4c29d1 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -577,6 +577,10 @@ int warn_unknown_pragmas = 0; /* Tri state variable. */ int warn_sign_compare = -1; +/* Nonzero means warn about use of multicharacter literals. */ + +int warn_multichar = 1; + /* Nonzero means `$' can be in an identifier. */ #ifndef DOLLARS_IN_IDENTIFIERS @@ -792,6 +796,10 @@ c_decode_option (argc, argv) warn_sign_compare = 1; else if (!strcmp (p, "-Wno-sign-compare")) warn_sign_compare = 0; + else if (!strcmp (p, "-Wmultichar")) + warn_multichar = 1; + else if (!strcmp (p, "-Wno-multichar")) + warn_multichar = 0; else if (!strcmp (p, "-Wunknown-pragmas")) /* Set to greater than 1, so that even unknown pragmas in system headers will be warned about. */ diff --git a/gcc/c-lex.c b/gcc/c-lex.c index c33ade528225c362fe293e8b225299bc0930004d..f82ad761d318188857b54f0e638894e628e1b24b 100644 --- a/gcc/c-lex.c +++ b/gcc/c-lex.c @@ -1872,7 +1872,7 @@ yylex () num_chars = max_chars; error ("character constant too long"); } - else if (num_chars != 1 && ! flag_traditional) + else if (num_chars != 1 && ! flag_traditional && warn_multichar) warning ("multi-character character constant"); /* If char type is signed, sign-extend the constant. */ diff --git a/gcc/c-tree.h b/gcc/c-tree.h index 3a9f4f83b7866db97e492a7871d443fdea224cde..7605cfe2e519d453193ca0f2dce6cae92caa150a 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -505,6 +505,10 @@ extern int warn_missing_braces; extern int warn_sign_compare; +/* Warn about multicharacter constants. */ + +extern int warn_multichar; + /* Nonzero means we are reading code that came from a system header file. */ extern int system_header_p; diff --git a/gcc/invoke.texi b/gcc/invoke.texi index a07fcf60a542a64ebc75db5ce2df2fb5a1560bf8..5bfac524c5c15e04d155388920c02f7e5593c5f3 100644 --- a/gcc/invoke.texi +++ b/gcc/invoke.texi @@ -122,7 +122,7 @@ in the following sections. -Wimplicit-function-declaration -Wimport -Werror-implicit-function-declaration -Winline -Wlarger-than-@var{len} -Wmain -Wmissing-declarations --Wmissing-prototypes -Wnested-externs -Wno-import +-Wmissing-prototypes -Wmultichar -Wnested-externs -Wno-import -Wold-style-cast -Woverloaded-virtual -Wparentheses -Wpointer-arith -Wredundant-decls -Wreorder -Wreturn-type -Wshadow -Wsign-compare -Wstrict-prototypes -Wswitch @@ -1287,6 +1287,11 @@ Same as @samp{-Wimplicit-int} and @samp{-Wimplicit-function-}@* Warn if the type of @samp{main} is suspicious. @samp{main} should be a function with external linkage, returning int, taking either zero arguments, two, or three arguments of appropriate types. + +@item -Wmultichar +Warn if a multicharacter constant (@samp{'FOOF'}) is used. Usually they +indicate a typo in the user's code, as they have implementation-defined +values, and should not be used in portable code. @item -Wparentheses Warn if parentheses are omitted in certain contexts, such diff --git a/gcc/toplev.c b/gcc/toplev.c index 6bc76632a2a55ac17ee2754788cb3a46ecfe8949..1126a4af2fcb7374546b34af7c5a3a1692ca7349 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -872,6 +872,8 @@ char *lang_options[] = "-Wno-missing-declarations", "-Wmissing-prototypes", "-Wno-missing-prototypes", + "-Wmultichar", + "-Wno-multichar", "-Wnested-externs", "-Wno-nested-externs", "-Wparentheses",