From 3adb9cb9af7fc3ae9d857bb11eb6e8a530718d5a Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 7 Feb 2002 07:36:46 -0500 Subject: c-decl.c (finish_function): Warn about a non-void function with no return statement and no abnormal exit. * c-decl.c (finish_function): Warn about a non-void function with no return statement and no abnormal exit. (current_function_returns_abnormally): New variable. (start_function): Clear it. (struct c_language_function): Add returns_abnormally. (push_c_function_context): Save it. (pop_c_function_context): Restore it. (builtin_function): Set TREE_THIS_VOLATILE on return fns. (grokdeclarator): Set C_FUNCTION_IMPLICIT_INT on functions without an explicit return type. * c-tree.h: Declare current_function_returns_abnormally. (C_FUNCTION_IMPLICIT_INT): New macro. * c-typeck.c (build_function_call): Set it. (c_expand_return): Set current_function_returns_value even if the value is erroneous. From-SVN: r49579 --- gcc/testsuite/gcc.dg/Wreturn-type2.c | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/Wreturn-type2.c (limited to 'gcc') diff --git a/gcc/testsuite/gcc.dg/Wreturn-type2.c b/gcc/testsuite/gcc.dg/Wreturn-type2.c new file mode 100644 index 0000000..d57a914 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wreturn-type2.c @@ -0,0 +1,7 @@ +/* Test for cases that should not get the unconditional warning about + missing return. */ +/* { dg-do compile } */ + +f() {} /* { dg-bogus "" "no return warning" } */ +int g() { abort (); } /* { dg-bogus "" "no return warning" } */ +int main() {} /* { dg-bogus "" "no return warning" } */ -- cgit v1.1