From d0db89893f32405918a613be61232735d8356002 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 3 Feb 2009 18:09:11 -0500 Subject: [PATCH] typeck.c (cp_build_unary_op): Only complain about taking address of main if pedantic. * typeck.c (cp_build_unary_op): Only complain about taking address of main if pedantic. From-SVN: r143911 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 11 +++++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/main-4.C | 5 +++++ gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C | 6 ++---- 5 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/main-4.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 9d425ab1dfa..c2765daac81 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 1c7df31c9bb..c58d40b9195 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 9d50d7fc989..67369d996cd 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 00000000000..ad2dd709827 --- /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 2bd4f3d76c2..b441eff650a 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; } -- 2.30.2