diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 32f5df1ce38..554d85f5c32 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +1999-01-16 Jason Merrill + Manfred Hollstein + + * decl.c (grokdeclarator): Don't make 'main(){}' an error with only + -Wreturn-type. + 1999-01-16 Nathan Sidwell * cp-tree.h (struct lang_type): Added has_mutable flag. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b15cec55827..13c11bfcba7 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -9356,16 +9356,22 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist) } else { - if (! pedantic && ! warn_return_type - && funcdef_flag - && MAIN_NAME_P (dname) - && ctype == NULL_TREE - && in_namespace == NULL_TREE - && current_namespace == global_namespace) - /* Let `main () { }' slide, since it's so common. */; - else + /* We handle `main' specially here, because 'main () { }' is so + common. With no options, it is allowed. With -Wreturn-type, + it is a warning. It is only an error with -pedantic-errors. */ + int is_main = (funcdef_flag + && MAIN_NAME_P (dname) + && ctype == NULL_TREE + && in_namespace == NULL_TREE + && current_namespace == global_namespace); + + if (pedantic || ! is_main) cp_pedwarn ("ANSI C++ forbids declaration `%D' with no type", dname); + else if (warn_return_type) + cp_warning ("ANSI C++ forbids declaration `%D' with no type", + dname); + type = integer_type_node; } }