From patchwork Fri Jun 10 03:52:10 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jason Merrill X-Patchwork-Id: 99840 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 447E8B6FB8 for ; Fri, 10 Jun 2011 13:52:36 +1000 (EST) Received: (qmail 21801 invoked by alias); 10 Jun 2011 03:52:34 -0000 Received: (qmail 21763 invoked by uid 22791); 10 Jun 2011 03:52:32 -0000 X-SWARE-Spam-Status: No, hits=-6.3 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_HI, SPF_HELO_PASS, TW_JB, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 10 Jun 2011 03:52:12 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id p5A3qCBI018151 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Thu, 9 Jun 2011 23:52:12 -0400 Received: from [127.0.0.1] ([10.3.113.14]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id p5A3qBld032274 for ; Thu, 9 Jun 2011 23:52:11 -0400 Message-ID: <4DF194EA.8030808@redhat.com> Date: Thu, 09 Jun 2011 23:52:10 -0400 From: Jason Merrill User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110428 Fedora/3.1.10-1.fc14 Lightning/1.0b2 Thunderbird/3.1.10 MIME-Version: 1.0 To: gcc-patches List Subject: C++ PATCHes to fix issues with running the testsuite in C++0x mode Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Periodically I run the G++ testsuite with --target_board=unix/-std=gnu++0x to catch any regressions relative to C++98 mode. Here are the fixes from this round: overflow.patch -- we were forgetting about overflow in some cases, causing us to treat an expression as a constant expression when it should not be. build-non.patch -- the call to fold_non_dependent_expr was generating a hard error on one testcase, so I've changed it to pass tf_none. parse-const.patch -- returning error_mark_node in the case of a non-constant expression was causing poorer diagnostics in some testcases, and returning the expression after complaining doesn't seem to break anything. compound-lit.patch -- some places in the compiler expect a compound literal to have TREE_HAS_CONSTRUCTOR set, but we weren't setting it anymore. This patch fixes some ext/ testcases. cx-testsuite.patch -- various adjustments to either update tests to allow C++0x mode output or specify that they are only for C++98 mode. Tested x86_64-pc-linux-gnu, applying to trunk. commit cb52a4df30a31f1916d8d4ee8237a938ae3002fb Author: Jason Merrill Date: Thu Jun 9 13:59:23 2011 -0400 * lib/prune.exp: Prune "note"s. * g++.dg/uninit-pred-3_b.C: Remove dg-excess-errors. * g++.dg/ext/injected-ttp.C: Specify -std=c++98. * g++.dg/template/dependent-expr3.C: Likewise. * g++.dg/parse/template7.C: Likewise. * g++.old-deja/g++.bugs/900119_01.C: Likewise. * g++.old-deja/g++.jason/rfg10.C: Likewise. * g++.old-deja/g++.pt/friend38.C: Likewise. * g++.old-deja/g++.pt/crash32.C: Likewise. * g++.old-deja/g++.other/init4.C: Likewise. * g++.old-deja/g++.other/friend8.C: Likewise. * g++.dg/ext/complex7.C: Adjust expected output. * g++.dg/diagnostic/method1.C: Likewise. * g++.dg/parse/parameter-declaration-2.C: Likewise. * g++.dg/parse/crash33.C: Likewise. * g++.dg/other/warning1.C: Likewise. * g++.dg/init/pr29571.C: Likewise. * g++.dg/warn/overflow-warn-1.C: Likewise. * g++.dg/warn/overflow-warn-3.C: Likewise. * g++.dg/warn/overflow-warn-4.C: Likewise. * g++.old-deja/g++.oliva/template1.C: Likewise. diff --git a/gcc/testsuite/g++.dg/diagnostic/method1.C b/gcc/testsuite/g++.dg/diagnostic/method1.C index 8e1225d..4a78104 100644 --- a/gcc/testsuite/g++.dg/diagnostic/method1.C +++ b/gcc/testsuite/g++.dg/diagnostic/method1.C @@ -18,3 +18,5 @@ baz () { bar (); } + +// { dg-prune-output "without object" } diff --git a/gcc/testsuite/g++.dg/ext/complex7.C b/gcc/testsuite/g++.dg/ext/complex7.C index 9d5463f..5b3eead 100644 --- a/gcc/testsuite/g++.dg/ext/complex7.C +++ b/gcc/testsuite/g++.dg/ext/complex7.C @@ -4,3 +4,5 @@ class A { static const _Complex double x = 1.0 + 2.0i; }; + +// { dg-prune-output "constexpr. needed" } diff --git a/gcc/testsuite/g++.dg/ext/injected-ttp.C b/gcc/testsuite/g++.dg/ext/injected-ttp.C index 405bee8..5ef4a4e 100644 --- a/gcc/testsuite/g++.dg/ext/injected-ttp.C +++ b/gcc/testsuite/g++.dg/ext/injected-ttp.C @@ -1,7 +1,7 @@ // Test for doing the right thing with injected-class-name used as template // type argument. This is an extension from DR 176. -// { dg-options "-pedantic" } +// { dg-options "-pedantic -std=c++98" } template struct A { }; diff --git a/gcc/testsuite/g++.dg/init/pr29571.C b/gcc/testsuite/g++.dg/init/pr29571.C index 9e8e609..c9bfa28 100644 --- a/gcc/testsuite/g++.dg/init/pr29571.C +++ b/gcc/testsuite/g++.dg/init/pr29571.C @@ -3,6 +3,6 @@ struct A { static const int i = 0/0 + ""; // { dg-warning "division by zero" } - // { dg-error "field initializer is not constant" "" { target *-*-* } 5 } + // { dg-error "field initializer is not constant|not a constant-expression" "" { target *-*-* } 5 } static const int j = int(i); }; diff --git a/gcc/testsuite/g++.dg/other/warning1.C b/gcc/testsuite/g++.dg/other/warning1.C index 77653a1..c65ae0f 100644 --- a/gcc/testsuite/g++.dg/other/warning1.C +++ b/gcc/testsuite/g++.dg/other/warning1.C @@ -7,8 +7,8 @@ extern "C" int printf(const char *, ...); struct S { - static const float inf = 1.0f / 0.0f; // { dg-warning "1.0|float|initialization" } - static const float nan = 0.0f / 0.0f; // { dg-warning "0.0|float|initialization" } + static const float inf = 1.0f / 0.0f; // { dg-warning "1.0|float|initializ" } + static const float nan = 0.0f / 0.0f; // { dg-warning "0.0|float|initializ" } }; int main() diff --git a/gcc/testsuite/g++.dg/parse/crash33.C b/gcc/testsuite/g++.dg/parse/crash33.C index 2ab84df..5ccb652 100644 --- a/gcc/testsuite/g++.dg/parse/crash33.C +++ b/gcc/testsuite/g++.dg/parse/crash33.C @@ -4,5 +4,8 @@ template void foo() [ - throw; // { dg-error "expected" } -} // { dg-error "expected" } + throw; +} + +// { dg-prune-output "expected" } +// { dg-prune-output "array bound" } diff --git a/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C b/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C index 7a9a24f..6116630 100644 --- a/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C +++ b/gcc/testsuite/g++.dg/parse/parameter-declaration-2.C @@ -1 +1,2 @@ void f (int i, int p[i]); // { dg-error "use of parameter .i. outside function body" } +// { dg-prune-output "array bound" } diff --git a/gcc/testsuite/g++.dg/parse/template7.C b/gcc/testsuite/g++.dg/parse/template7.C index d7dfef7..930e259 100644 --- a/gcc/testsuite/g++.dg/parse/template7.C +++ b/gcc/testsuite/g++.dg/parse/template7.C @@ -1,3 +1,5 @@ +// { dg-options -std=c++98 } + template void f(); // { dg-message "note" } diff --git a/gcc/testsuite/g++.dg/template/dependent-expr3.C b/gcc/testsuite/g++.dg/template/dependent-expr3.C index 97fddbd..bf14c49 100644 --- a/gcc/testsuite/g++.dg/template/dependent-expr3.C +++ b/gcc/testsuite/g++.dg/template/dependent-expr3.C @@ -1,3 +1,4 @@ +// { dg-options -std=c++98 } // { dg-do compile } // Origin: jbrandmeyer at users dot sourceforge dot net // PR c++/12573: COMPONENT_REFs must be inspected for dependness. diff --git a/gcc/testsuite/g++.dg/uninit-pred-3_b.C b/gcc/testsuite/g++.dg/uninit-pred-3_b.C index cfe2113..a66e04b 100644 --- a/gcc/testsuite/g++.dg/uninit-pred-3_b.C +++ b/gcc/testsuite/g++.dg/uninit-pred-3_b.C @@ -65,7 +65,7 @@ class M { void P (int64 t) { - int cc; /* { dg-excess-errors "note: 'cc' was declared here" } */ + int cc; if (!GetC (&cc)) return; diff --git a/gcc/testsuite/g++.dg/warn/overflow-warn-1.C b/gcc/testsuite/g++.dg/warn/overflow-warn-1.C index 22c512a..7cd76e7 100644 --- a/gcc/testsuite/g++.dg/warn/overflow-warn-1.C +++ b/gcc/testsuite/g++.dg/warn/overflow-warn-1.C @@ -13,7 +13,7 @@ enum e { in the standard). */ E2 = 2 || 1 / 0, /* { dg-bogus "warning: division by zero" "" { xfail *-*-* } 14 } */ E3 = 1 / 0, /* { dg-warning "division by zero" } */ - /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant expression" "enum error" { target *-*-* } 15 } */ + /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant.expression" "enum error" { target *-*-* } 15 } */ /* But as in DR#031, the 1/0 in an evaluated subexpression means the whole expression violates the constraints. */ E4 = 0 * (1 / 0), /* { dg-warning "division by zero" } */ diff --git a/gcc/testsuite/g++.dg/warn/overflow-warn-3.C b/gcc/testsuite/g++.dg/warn/overflow-warn-3.C index d88c87a..73c0e00 100644 --- a/gcc/testsuite/g++.dg/warn/overflow-warn-3.C +++ b/gcc/testsuite/g++.dg/warn/overflow-warn-3.C @@ -13,7 +13,7 @@ enum e { in the standard). */ E2 = 2 || 1 / 0, /* { dg-bogus "warning: division by zero" "" { xfail *-*-* } 14 } */ E3 = 1 / 0, /* { dg-warning "division by zero" } */ - /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant expression" "enum error" { target *-*-* } 15 } */ + /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant.expression" "enum error" { target *-*-* } 15 } */ /* But as in DR#031, the 1/0 in an evaluated subexpression means the whole expression violates the constraints. */ E4 = 0 * (1 / 0), /* { dg-warning "division by zero" } */ diff --git a/gcc/testsuite/g++.dg/warn/overflow-warn-4.C b/gcc/testsuite/g++.dg/warn/overflow-warn-4.C index 374d294..24b3959 100644 --- a/gcc/testsuite/g++.dg/warn/overflow-warn-4.C +++ b/gcc/testsuite/g++.dg/warn/overflow-warn-4.C @@ -13,7 +13,7 @@ enum e { in the standard). */ E2 = 2 || 1 / 0, /* { dg-bogus "warning: division by zero" "" { xfail *-*-* } } */ E3 = 1 / 0, /* { dg-warning "division by zero" } */ - /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant expression" "enum error" { target *-*-* } 15 } */ + /* { dg-error "enumerator value for 'E3' is not an integer constant|not a constant.expression" "enum error" { target *-*-* } 15 } */ /* But as in DR#031, the 1/0 in an evaluated subexpression means the whole expression violates the constraints. */ E4 = 0 * (1 / 0), /* { dg-warning "division by zero" } */ diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C index ace4e4b..0d181c7 100644 --- a/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C @@ -1,3 +1,4 @@ +// { dg-options "-pedantic-errors -std=c++98" } // { dg-do assemble } // g++ 1.36.1 bug 900119_01 @@ -8,7 +9,7 @@ // keywords: member declaration, member initialization -// { dg-prune-output "non-static data member initializers" } +// { dg-prune-output "is a static data member" } int global_int; @@ -18,7 +19,7 @@ public: static int class0_member_1 = 99; /* { dg-error "" } */ int &class0_member_2 = global_int; /* { dg-error "" } */ - class0 () : class0_member_2 (global_int) { } /* { dg-error "" } */ + class0 () : class0_member_2 (global_int) { } }; @@ -27,7 +28,7 @@ struct struct0 { static int struct0_member_1 = 99; /* { dg-error "" } */ int &struct0_member_2 = global_int; /* { dg-error "" } */ - struct0 () : struct0_member_2 (global_int) { } /* { dg-error "" } */ + struct0 () : struct0_member_2 (global_int) { } }; // g++ does not allow unions to have more than one member with an initializer @@ -43,7 +44,7 @@ union union1 { union union2 { int &union2_member_0 = global_int; /* { dg-error "" } */ - union2 () : union2_member_0 (global_int) { } /* { dg-error "" } */ + union2 () : union2_member_0 (global_int) { } }; int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C index 58af19c..8769f5a 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C @@ -1,5 +1,5 @@ // { dg-do assemble } -// { dg-options "-pedantic-errors" } +// { dg-options "-pedantic-errors -std=c++98" } // Bug: g++ doesn't notice the overflow in the enum values. #include index 995ac91..0000000 index 0000000..995ac91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog-2005 @@ -0,0 +1,127 @@ +2005-04-03 Alexandre Oliva + + PR c++/19199 + * expr2.C: Fixed. + +2003-06-04 J"orn Rennecke + + * template1.C (bar): Remove xfail marker. + +2002-07-06 Alexandre Oliva + + * linkage1.C, linkage1-main.cc: New test. + +2001-02-15 Alexandre Oliva + + * friend1.C: New test. + +2000-05-28 Alexandre Oliva + + * expr2.C: New test. + +2000-04-19 Alexandre Oliva + + * stkalign.C: New test. + +1999-12-22 Alexandre Oliva + + * nameret2.C: New test. + + * nameret1.C: New test. + + * template10.C: New test. + +1999-11-21 Alexandre Oliva + + * delete2.C, delete3.C, delete4.C, delete5.C: New tests. + +1999-11-19 Alexandre Oliva + + * template7.C: Crash test passes, bug error is now bogus. + +1999-11-11 Alexandre Oliva + + * template9.C: New test. + +1999-09-18 Alexandre Oliva + + * overload1.C: New test. + + * inline1.C: New test. + +1999-08-25 Alexandre Oliva + + * thunk1.C: New test. + +1999-08-06 Alexandre Oliva + + * dwarf2.C, dwarf3.C: Added XFAIL for Solaris/x86. Removed + -gdwarf. + * dwarf1.C: Removed -gdwarf. + +1999-08-05 Alexandre Oliva + + * new1.C, template8.C: Removed XFAIL. + * template3.C: Re-introduced XFAIL. :-( + +1999-08-03 Alexandre Oliva + + * ext1.C: New test. + + * dwarf1.C, dwarf2.C, dwarf3.C: New tests. + +1999-07-20 Alexandre Oliva + + * template8.C, typeof1.C: New test. + +1999-07-17 Alexandre Oliva + + * template6.C, delete1.C, template7.C: New test. + +1999-07-13 Alexandre Oliva + + * template5.C: New test. + + * template4.C: New test. + + * expr1.C: New test. + + * partspec1.C: New test. + +1999-07-05 Alexandre Oliva + + * typename1.C, typename2.C: New tests. + + * template3.C: Fixed. + + * ns3.C: New test. + +1999-07-03 Alexandre Oliva + + * ctor1.C: New test. + + * template3.C: New test. + +1999-07-02 Alexandre Oliva + + * ns1.C: Typo. + * ns2.C: New test. + + * template2.C: New test. + + * ns1.C: New test. + +1999-07-01 Alexandre Oliva + + * new1.C: New test. + + * partord1.C: New test. + + * template1.C: New test. + + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/template1.C b/gcc/testsuite/g++.old-deja/g++.oliva/template1.C index ce39496..908a069 100644 --- a/gcc/testsuite/g++.old-deja/g++.oliva/template1.C +++ b/gcc/testsuite/g++.old-deja/g++.oliva/template1.C @@ -7,7 +7,7 @@ template struct foo { - static void bar(double (*)[dim]) {} // { dg-error "'dim' was not declared" } + static void bar(double (*)[dim]) {} // { dg-error "'dim' was not declared|array bound" } }; void bar() { diff --git a/gcc/testsuite/g++.old-deja/g++.other/friend8.C b/gcc/testsuite/g++.old-deja/g++.other/friend8.C index bbe4bf5..c1e93d9 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/friend8.C +++ b/gcc/testsuite/g++.old-deja/g++.other/friend8.C @@ -1,3 +1,4 @@ +// { dg-options "-std=c++98 -pedantic-errors" } // { dg-do assemble } // // Copyright (C) 2000 Free Software Foundation, Inc. diff --git a/gcc/testsuite/g++.old-deja/g++.other/init4.C b/gcc/testsuite/g++.old-deja/g++.other/init4.C index f877f2a..92562ef 100644 --- a/gcc/testsuite/g++.old-deja/g++.other/init4.C +++ b/gcc/testsuite/g++.old-deja/g++.other/init4.C @@ -1,3 +1,4 @@ +// { dg-options -std=c++98 } // { dg-do assemble } class error { diff --git a/gcc/testsuite/g++.old-deja/g++.pt/crash32.C b/gcc/testsuite/g++.old-deja/g++.pt/crash32.C index 64ed229..0be26ea 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/crash32.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/crash32.C @@ -1,3 +1,4 @@ +// { dg-options "-std=c++98 -pedantic-errors" } // { dg-do assemble } // Origin: Jason Merrill diff --git a/gcc/testsuite/g++.old-deja/g++.pt/friend38.C b/gcc/testsuite/g++.old-deja/g++.pt/friend38.C index 429e421..f2343d0 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/friend38.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/friend38.C @@ -1,3 +1,4 @@ +// { dg-options "-std=c++98 -pedantic-errors" } // { dg-do assemble } // Overly simplified from testcase by "B. K. Oxley" diff --git a/gcc/testsuite/lib/prune.exp b/gcc/testsuite/lib/prune.exp index 58b59a4..f5cbc4c 100644 --- a/gcc/testsuite/lib/prune.exp +++ b/gcc/testsuite/lib/prune.exp @@ -30,6 +30,9 @@ proc prune_gcc_output { text } { regsub -all "(^|\n)Please submit.*instructions\[^\n\]*" $text "" text regsub -all "(^|\n)\[0-9\]\[0-9\]* errors\." $text "" text + # Ignore informational notes. + regsub -all "(^|\n)\[^\n\]*: note: \[^\n\]*" $text "" text + # Ignore harmless -fpic warnings. regsub -all "(^|\n)\[^\n\]*: warning: -f(pic|PIC) ignored for target\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*: warning: -f(pic|PIC)( and -fpic are| is)? not supported\[^\n\]*" $text "" text