From bfbcf632cf729f774b789bbccc0b3eada34c6cbb Mon Sep 17 00:00:00 2001 From: pinskia Date: Fri, 28 Oct 2005 20:25:55 +0000 Subject: [PATCH] 2005-10-28 Andrew Pinski PR C++/23229 * decl.c (grokfndecl): Create a new function type after erroring out about main not returning int. 2005-10-28 Andrew Pinski PR C++/23229 * g++.dg/warn/main-2.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105960 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 5 +++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/main-2.C | 19 +++++++++++++++++++ 4 files changed, 35 insertions(+) create mode 100644 gcc/testsuite/g++.dg/warn/main-2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fed864d..81da122 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-10-28 Andrew Pinski + + PR C++/23229 + * decl.c (grokfndecl): Create a new function type + after erroring out about main not returning int. + 2005-10-28 Josh Conner PR c++/22153 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index ef61d17..07278ff 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5716,7 +5716,12 @@ grokfndecl (tree ctype, if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)), integer_type_node)) { + tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl)); + tree newtype; error ("%<::main%> must return %"); + newtype = build_function_type (integer_type_node, + oldtypeargs); + TREE_TYPE (decl) = newtype; TREE_TYPE (TREE_TYPE (decl)) = integer_type_node; } inlinep = 0; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 35e9694..66577ef 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-28 Andrew Pinski + + PR C++/23229 + * g++.dg/warn/main-2.C: New test. + 2005-10-28 Steven G. Kargl PR fortran/24545 diff --git a/gcc/testsuite/g++.dg/warn/main-2.C b/gcc/testsuite/g++.dg/warn/main-2.C new file mode 100644 index 0000000..d38ef8e --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/main-2.C @@ -0,0 +1,19 @@ +// { dg-do compile } +// Make sure that the type of f1 does not change +// after the error of main about not returning +// int. +// From Pekka Vuorela +// PR c++/23229 + +void f1(); + +void +main() /* { dg-error "must return" } */ +{ + f1(); +} + +void f1() +{ +} + -- 2.7.4