diff options
author | Kaveh R. Ghazi <ghazi@caip.rutgers.edu> | 1998-10-20 07:32:08 +0000 |
---|---|---|
committer | Kaveh Ghazi <ghazi@gcc.gnu.org> | 1998-10-20 07:32:08 +0000 |
commit | 0ca3fb0a168e9db2bd5405855d3932f62b08b7c9 (patch) | |
tree | 3a1a6a1311b867a1768dacc4273f79b79d375b1f /gcc/c-decl.c | |
parent | f1c374cbf13459be57011c157b5ebba66cc1e02d (diff) | |
download | gcc-0ca3fb0a168e9db2bd5405855d3932f62b08b7c9.zip gcc-0ca3fb0a168e9db2bd5405855d3932f62b08b7c9.tar.gz gcc-0ca3fb0a168e9db2bd5405855d3932f62b08b7c9.tar.bz2 |
New warning, `missing-noreturn':
* 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
Diffstat (limited to 'gcc/c-decl.c')
-rw-r--r-- | gcc/c-decl.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 1cf5b45..df102ac 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -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 |