Patchwork C++ PATCHes to fix issues with running the testsuite in C++0x mode

login
register
mail settings
Submitter Jason Merrill
Date June 10, 2011, 3:52 a.m.
Message ID <4DF194EA.8030808@redhat.com>
Download mbox | patch
Permalink /patch/99840/
State New
Headers show

Comments

Jason Merrill - June 10, 2011, 3:52 a.m.
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.

Patch

commit cb52a4df30a31f1916d8d4ee8237a938ae3002fb
Author: Jason Merrill <jason@redhat.com>
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 <int> ();
 }
+
+// { 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 <class T>
 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<int>
 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 <int I>
 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 <limits.h>
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  <aoliva@redhat.com>
+
+	PR c++/19199
+	* expr2.C: Fixed.
+
+2003-06-04  J"orn Rennecke <joern.rennecke@superh.com>
+
+	* template1.C (bar): Remove xfail marker.
+
+2002-07-06  Alexandre Oliva  <aoliva@redhat.com>
+
+	* linkage1.C, linkage1-main.cc: New test.
+
+2001-02-15  Alexandre Oliva  <aoliva@redhat.com>
+
+	* friend1.C: New test.
+
+2000-05-28  Alexandre Oliva  <aoliva@cygnus.com>
+
+	* expr2.C: New test.
+
+2000-04-19  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* stkalign.C: New test.
+
+1999-12-22  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* nameret2.C: New test.
+
+	* nameret1.C: New test.
+
+	* template10.C: New test.
+
+1999-11-21  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* delete2.C, delete3.C, delete4.C, delete5.C: New tests.
+
+1999-11-19  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* template7.C: Crash test passes, bug error is now bogus.
+
+1999-11-11  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* template9.C: New test.
+
+1999-09-18  Alexandre Oliva  <oliva@lsd.ic.unicamp.br>
+
+	* overload1.C: New test.
+
+	* inline1.C: New test.
+
+1999-08-25  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* thunk1.C: New test.
+
+1999-08-06  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* dwarf2.C, dwarf3.C: Added XFAIL for Solaris/x86.  Removed
+	-gdwarf.
+	* dwarf1.C: Removed -gdwarf.
+
+1999-08-05  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* new1.C, template8.C: Removed XFAIL.
+	* template3.C: Re-introduced XFAIL.  :-(
+
+1999-08-03  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* ext1.C: New test.
+
+	* dwarf1.C, dwarf2.C, dwarf3.C: New tests.
+
+1999-07-20  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* template8.C, typeof1.C: New test.
+
+1999-07-17  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* template6.C, delete1.C, template7.C: New test.
+
+1999-07-13  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* template5.C: New test.
+
+	* template4.C: New test.
+
+	* expr1.C: New test.
+
+	* partspec1.C: New test.
+
+1999-07-05  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* typename1.C, typename2.C: New tests.
+
+	* template3.C: Fixed.
+
+	* ns3.C: New test.
+
+1999-07-03  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* ctor1.C: New test.
+
+	* template3.C: New test.
+
+1999-07-02  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* ns1.C: Typo.
+	* ns2.C: New test.
+
+	* template2.C: New test.
+
+	* ns1.C: New test.
+
+1999-07-01  Alexandre Oliva  <oliva@dcc.unicamp.br>
+
+	* 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<int P = 0> 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 <jason@cygnus.com>
 
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" <binkley@bigfoot.com>
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