New warning, `missing-noreturn':
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>
Tue, 20 Oct 1998 07:32:08 +0000 (07:32 +0000)
committerKaveh Ghazi <ghazi@gcc.gnu.org>
Tue, 20 Oct 1998 07:32:08 +0000 (07:32 +0000)
        * c-decl.c (warn_missing_noreturn): New global variable.
        (c_decode_option): Check for new flags -W{no-}missing-noreturn.
        (finish_function): Implement missing noreturn warning.
        * c-tree.h (warn_missing_noreturn): Declare extern.
        * invoke.texi: Document new flags.
        * toplev.c (documented_lang_options): Add description.

From-SVN: r23197

gcc/ChangeLog
gcc/c-decl.c
gcc/c-tree.h
gcc/invoke.texi
gcc/toplev.c

index a532b2a..6a6280d 100644 (file)
@@ -1,3 +1,15 @@
+Tue Oct 20 10:12:17 1998  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * c-decl.c (warn_missing_noreturn): New global variable.
+       (c_decode_option): Check for new flags -W{no-}missing-noreturn.
+       (finish_function): Implement missing noreturn warning.
+
+       * c-tree.h (warn_missing_noreturn): Declare extern.
+
+       * invoke.texi: Document new flags.
+
+       * toplev.c (documented_lang_options): Add description.
+
 Tue Oct 20 22:16:11 1998  Michael Hayes  <m.hayes@elec.canterbury.ac.nz>
 
        * config/c4x/c4x.c (c4x_parallel_process): Disable until BCT
index 1cf5b45..df102ac 100644 (file)
@@ -515,6 +515,10 @@ int warn_cast_qual;
 
 int warn_bad_function_cast;
 
+/* Warn about functions which might be candidates for attribute noreturn. */
+
+int warn_missing_noreturn;
+
 /* Warn about traditional constructs whose meanings changed in ANSI C.  */
 
 int warn_traditional;
@@ -728,6 +732,10 @@ c_decode_option (argc, argv)
     warn_bad_function_cast = 1;
   else if (!strcmp (p, "-Wno-bad-function-cast"))
     warn_bad_function_cast = 0;
+  else if (!strcmp (p, "-Wmissing-noreturn"))
+    warn_missing_noreturn = 1;
+  else if (!strcmp (p, "-Wno-missing-noreturn"))
+    warn_missing_noreturn = 0;
   else if (!strcmp (p, "-Wpointer-arith"))
     warn_pointer_arith = 1;
   else if (!strcmp (p, "-Wno-pointer-arith"))
@@ -7192,6 +7200,12 @@ finish_function (nested)
 
   current_function_returns_null |= can_reach_end;
 
+  if (warn_missing_noreturn
+      && !TREE_THIS_VOLATILE (fndecl)
+      && !current_function_returns_null
+      && !current_function_returns_value)
+    warning ("function might be possible candidate for attribute `noreturn'");
+
   if (TREE_THIS_VOLATILE (fndecl) && current_function_returns_null)
     warning ("`noreturn' function does return");
   else if (warn_return_type && can_reach_end
index 3e73299..fec60cb 100644 (file)
@@ -469,6 +469,10 @@ extern int warn_cast_qual;
 
 extern int warn_bad_function_cast;
 
+/* Warn about functions which might be candidates for attribute noreturn. */
+
+extern int warn_missing_noreturn;
+
 /* Warn about traditional constructs whose meanings changed in ANSI C.  */
 
 extern int warn_traditional;
index cf46198..f6ecd64 100644 (file)
@@ -123,7 +123,7 @@ in the following sections.
 -Wimplicit-function-declaration  -Wimport
 -Werror-implicit-function-declaration  -Winline
 -Wlarger-than-@var{len}  -Wlong-long
--Wmain  -Wmissing-declarations
+-Wmain  -Wmissing-declarations  -Wmissing-noreturn
 -Wmissing-prototypes  -Wmultichar  -Wnested-externs  -Wno-import  
 -Wno-non-template-friend -Wold-style-cast  -Woverloaded-virtual  
 -Wparentheses -Wpointer-arith  -Wredundant-decls  -Wreorder  
@@ -1617,6 +1617,13 @@ Do so even if the definition itself provides a prototype.
 Use this option to detect global functions that are not declared in
 header files.
 
+@item -Wmissing-noreturn
+Warn about functions which might be candidates for attribute @code{noreturn}.
+Note these are only possible candidates, not absolute ones.  Care should
+be taken to manually verify functions actually do not ever return before
+adding the @code{noreturn} attribute, otherwise subtle code generation
+bugs could be introduced.
+
 @item -Wredundant-decls
 Warn if anything is declared more than once in the same scope, even in
 cases where multiple declaration is valid and changes nothing.
index 8ad8eeb..5040987 100644 (file)
@@ -974,6 +974,9 @@ documented_lang_options[] =
   { "-Wbad-function-cast",
     "Warn about casting functions to incompatible types" },
   { "-Wno-bad-function-cast", "" },
+  { "-Wmissing-noreturn",
+    "Warn about functions which might be candidates for attribute noreturn" },
+  { "-Wno-missing-noreturn", "" },
   { "-Wcast-qual", "Warn about casts which discard qualifiers"},
   { "-Wno-cast-qual", "" },
   { "-Wchar-subscripts", "Warn about subscripts whose type is 'char'"},