From: jason Date: Tue, 3 Feb 2009 23:09:11 +0000 (+0000) Subject: * typeck.c (cp_build_unary_op): Only complain about taking address X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e95b8b7e115dc0ae6b32abf95fa1099b74154a5b;p=thirdparty%2Fgcc.git * typeck.c (cp_build_unary_op): Only complain about taking address of main if pedantic. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@143911 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9d425ab1dfa0..c2765daac816 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-02-03 Jason Merrill + + * typeck.c (cp_build_unary_op): Only complain about taking address + of main if pedantic. + 2009-02-03 Jakub Jelinek PR inline-asm/39059 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 1c7df31c9bb2..c58d40b91955 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4473,12 +4473,15 @@ cp_build_unary_op (enum tree_code code, tree xarg, int noconvert, arg = build1 (CONVERT_EXPR, type, arg); return arg; } - else if (DECL_MAIN_P (arg)) + else if (pedantic && DECL_MAIN_P (arg)) { /* ARM $3.4 */ - if (complain & tf_error) - permerror (input_location, "ISO C++ forbids taking address of function %<::main%>"); - else + /* Apparently a lot of autoconf scripts for C++ packages do this, + so only complain if -pedantic. */ + if (complain & (flag_pedantic_errors ? tf_error : tf_warning)) + pedwarn (input_location, OPT_pedantic, + "ISO C++ forbids taking address of function %<::main%>"); + else if (flag_pedantic_errors) return error_mark_node; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9d50d7fc9893..67369d996cd0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-02-03 Jason Merrill + + * g++.dg/warn/main-4.C: New test. + * g++.old-deja/g++.bugs/900227_01.C: Remove &main warnings. + 2009-02-03 Andrew Pinski PR C++/36607 diff --git a/gcc/testsuite/g++.dg/warn/main-4.C b/gcc/testsuite/g++.dg/warn/main-4.C new file mode 100644 index 000000000000..ad2dd7098277 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/main-4.C @@ -0,0 +1,5 @@ +// This pattern is used by a lot of autoconf scripts, so don't +// complain about it unless -pedantic. +// { dg-options "" } + +int main () { main (); return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C index 2bd4f3d76c25..b441eff650ac 100644 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C @@ -33,9 +33,7 @@ int main (); -short s = (short) &main; // { dg-error "taking address" "addr" { xfail h8*-*-* xstormy16-*-* } } -// { dg-error "loses precision" "lose" { xfail h8*-*-* xstormy16-*-* } 36 } -char c = (char) &main; // { dg-error "taking address" } -// { dg-error "loses precision" "lose" { target *-*-* } 38 } +short s = (short) &main; // { dg-error "loses precision" "lose" { xfail h8*-*-* xstormy16-*-* } } +char c = (char) &main; // { dg-error "loses precision" "lose" } int main () { return 0; }