new
authorJonathan Larmour <jlarmour@cygnus.co.uk>
Sun, 7 Feb 1999 15:40:17 +0000 (15:40 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 7 Feb 1999 15:40:17 +0000 (10:40 -0500)
From-SVN: r25071

14 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/README
gcc/testsuite/g++.dg/special/conpr-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/conpr-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/conpr-2a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/conpr-3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/conpr-3a.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/conpr-3b.C [new file with mode: 0644]
gcc/testsuite/g++.dg/special/ecos.exp [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/typedef6.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/nttp1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/nttp2.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/ttp55.C [new file with mode: 0644]
gcc/testsuite/lib/g++-dg.exp [new file with mode: 0644]

index 4cfd3fa735cb7321ca6f2f7ddd6e56e91bf727d3..d51803cadb6f8daf5f9eb6436a241c99af3c85e6 100644 (file)
@@ -1,3 +1,20 @@
+1999-02-07  Jonathan Larmour  <jlarmour@cygnus.co.uk>
+
+       * g++.dg/special/ecos.exp: New driver for new tests with special
+       requirements
+       
+       * g++.dg/special/conpr-1.C: New test
+       * g++.dg/special/conpr-2.C: New test
+       * g++.dg/special/conpr-2a.C: New test
+       * g++.dg/special/conpr-3.C: New test
+       * g++.dg/special/conpr-3a.C: New test
+       * g++.dg/special/conpr-3b.C: New test
+       
+       * lib/g++-dg.exp: New driver file, based on lib/gcc-dg.exp to
+       allow g++ to use the dg driver
+
+       * README: Add comment about g++.dg directory
+
 Sat Feb  6 18:00:38 1999  Jeffrey A Law  (law@cygnus.com)
 
        * README: Update email addresses.
index 84cd39199212ade2bf7dbf73f47ed54366501dd0..2b336f5b29d2bfe24edabf4c559ca860249e2422 100644 (file)
@@ -7,7 +7,7 @@ need a current DejaGnu snapshot, which is available from
 ftp://egcs.cygnus.com/pub/egcs/infrastructure, for example.
 
 Most of these tests were originally developed and/or collected by
-Cygnus Support, but these days many are being added by the EGCS
+Cygnus Solutions, but these days many are being added by the EGCS
 developers.
 
 These tests are included "as is". If any of them fails, do not report
@@ -22,8 +22,8 @@ the EGCS tree. `make check-g++` runs the C++ testsuite only.
 
 STRUCTURE OF THE TESTSUITE
 
-All C++ tests reside in subdirectories of g++.old-deja, based on the
-following structure:
+Almost all C++ tests reside in subdirectories of g++.old-deja, based on
+the following structure:
 
   g++.benjamin Tests by Benjamin Koz
   g++.bob
@@ -43,3 +43,8 @@ following structure:
   g++.rfg
   g++.robertl  Tests from egcs-bugs@egcs.cygnus.com, gathered by Robert Lipe
        
+g++.old-deja uses a fixed driver for all g++ tests based on the old
+DejaGnu drivers. But just because its old, doesn't mean its redundant!
+Tests that want to use the normal dg.exp driver can be put in g++.dg instead.
+This may be required for platform-specific tests, or tests with other
+special requirements.
diff --git a/gcc/testsuite/g++.dg/special/conpr-1.C b/gcc/testsuite/g++.dg/special/conpr-1.C
new file mode 100644 (file)
index 0000000..8ab6bfe
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+public:
+    foo_t(void) { x=1; }
+    int get(void) { return x; }
+};
+
+static foo_t foo __attribute__((init_priority(5000)));
+
+int main(void) {
+
+    if (foo.get())
+        exit(0);
+    else
+        abort();
+}
diff --git a/gcc/testsuite/g++.dg/special/conpr-2.C b/gcc/testsuite/g++.dg/special/conpr-2.C
new file mode 100644 (file)
index 0000000..07ba8ab
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+    static int count;
+public:
+    foo_t(void) { x=++count; }
+    int get(void) { return x; }
+};
+
+int foo_t::count;
+
+extern foo_t foo1, foo2;
+
+int main(void) {
+
+    if ( (foo1.get() != 2) || (foo2.get() != 1) )
+        abort();
+    exit(0);
+}
diff --git a/gcc/testsuite/g++.dg/special/conpr-2a.C b/gcc/testsuite/g++.dg/special/conpr-2a.C
new file mode 100644 (file)
index 0000000..69fb7d6
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+    static int count;
+public:
+    foo_t(void) { x=++count; }
+    int get(void) { return x; }
+};
+
+foo_t foo1 __attribute__((init_priority(6000)));
+foo_t foo2 __attribute__((init_priority(5000)));
diff --git a/gcc/testsuite/g++.dg/special/conpr-3.C b/gcc/testsuite/g++.dg/special/conpr-3.C
new file mode 100644 (file)
index 0000000..07ba8ab
--- /dev/null
@@ -0,0 +1,20 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+    static int count;
+public:
+    foo_t(void) { x=++count; }
+    int get(void) { return x; }
+};
+
+int foo_t::count;
+
+extern foo_t foo1, foo2;
+
+int main(void) {
+
+    if ( (foo1.get() != 2) || (foo2.get() != 1) )
+        abort();
+    exit(0);
+}
diff --git a/gcc/testsuite/g++.dg/special/conpr-3a.C b/gcc/testsuite/g++.dg/special/conpr-3a.C
new file mode 100644 (file)
index 0000000..b237bb5
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+    static int count;
+public:
+    foo_t(void) { x=++count; }
+    int get(void) { return x; }
+};
+
+foo_t foo1 __attribute__((init_priority(6000)));
diff --git a/gcc/testsuite/g++.dg/special/conpr-3b.C b/gcc/testsuite/g++.dg/special/conpr-3b.C
new file mode 100644 (file)
index 0000000..b5efa0c
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do run } */
+
+class foo_t {
+    int x;
+    static int count;
+public:
+    foo_t(void) { x=++count; }
+    int get(void) { return x; }
+};
+
+foo_t foo2 __attribute__((init_priority(5000)));
diff --git a/gcc/testsuite/g++.dg/special/ecos.exp b/gcc/testsuite/g++.dg/special/ecos.exp
new file mode 100644 (file)
index 0000000..34a54b7
--- /dev/null
@@ -0,0 +1,75 @@
+# Copyright (C) 1999 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
+
+# Please email any bugs, comments, and/or additions to this file to:
+# jlarmour@cygnus.co.uk
+
+# This file was written by Jonathan Larmour (jlarmour@cygnus.co.uk).
+
+# G++ testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib g++-dg.exp
+
+###########
+# conpr-1.C
+###########
+
+dg-init
+dg-runtest "$srcdir/$subdir/conpr-1.C" "-finit-priority" ""
+dg-finish
+
+
+###########
+# conpr-2.C
+###########
+
+dg-init
+
+set lines [g++_target_compile "$srcdir/$subdir/conpr-2a.C" "conpr-2a.o" object "additional_flags=-finit-priority"]
+if ![string match "" $lines] then {
+    fail "conpr-2a.o"
+} else {
+    dg-runtest "$srcdir/$subdir/conpr-2.C" "conpr-2a.o" "-finit-priority" 
+    file delete conpr-2a.o
+}
+dg-finish
+
+
+###########
+# conpr-3.C
+###########
+
+dg-init
+
+set lines [g++_target_compile "$srcdir/$subdir/conpr-3a.C" "conpr-3a.o" object "additional_flags=-finit-priority"]
+if ![string match "" $lines] then {
+    fail "conpr-3a.o"
+} else {
+    set lines [g++_target_compile "$srcdir/$subdir/conpr-3b.C" "conpr-3b.o" object "additional_flags=-finit-priority"]
+    if ![string match "" $lines] then {
+        fail "conpr-3b.o"
+    } else {
+        # run it with objects both ways around!
+        dg-runtest "$srcdir/$subdir/conpr-3.C" "conpr-3a.o conpr-3b.o" "-finit-priority"
+        dg-runtest "$srcdir/$subdir/conpr-3.C" "conpr-3b.o conpr-3a.o" "-finit-priority"
+        file delete conpr-3a.o conpr-3b.o
+    }
+}
+dg-finish
+
+
+### EOF ecos.exp
diff --git a/gcc/testsuite/g++.old-deja/g++.other/typedef6.C b/gcc/testsuite/g++.old-deja/g++.other/typedef6.C
new file mode 100644 (file)
index 0000000..53b8166
--- /dev/null
@@ -0,0 +1,17 @@
+// Submitted by Jason Merrill <jason@cygnus.com>.
+// Bug: g++ fails to see through the T typedef in the C ctor.
+// Build don't link:
+
+struct A {
+  A (int) { }
+};
+
+typedef A T;
+
+struct B: public virtual T {
+  B (): T(1) { }
+};
+
+struct C: public B {
+  C (): T(1) { }
+};
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C b/gcc/testsuite/g++.old-deja/g++.pt/nttp1.C
new file mode 100644 (file)
index 0000000..36b7438
--- /dev/null
@@ -0,0 +1,21 @@
+// Test for nested template template parameter feature
+
+template <template<template <class> class> class TTT> struct C
+{
+       int f();
+};
+
+template <template<template <class> class> class TTT> int C<TTT>::f()
+{
+       return 0;
+}
+
+template <template <class> class TT> struct D
+{
+};
+
+int main()
+{
+       C<D> c;
+       c.f();
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C b/gcc/testsuite/g++.old-deja/g++.pt/nttp2.C
new file mode 100644 (file)
index 0000000..08781da
--- /dev/null
@@ -0,0 +1,30 @@
+// Test for nested template template parameter feature
+
+template <template<template <class> class> class TTT> struct C
+{
+       int f() { return 0; }
+};
+
+template <template <class> class TT> struct D
+{
+       int     a;
+};
+
+template <template <class> class TT> struct E
+{
+       int     a;
+       int     b;
+};
+
+template <template <template <template<class> class> class> class TTT> 
+int g(TTT<E> t)
+{
+       TTT<D> tt;
+       return tt.f();
+}
+
+int main()
+{
+       C<E> c;
+       g(c);
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C b/gcc/testsuite/g++.old-deja/g++.pt/ttp55.C
new file mode 100644 (file)
index 0000000..10af608
--- /dev/null
@@ -0,0 +1,23 @@
+// Build don't link:
+
+// Testing overloading of function argument involving template template
+// parameters
+
+// Reported by Thomus Kunert <kunert@physik.tu-dresden.de>
+
+template<class A>
+class H{};
+
+template <class T>
+void f( const T& ){}                      // #1
+
+template< template<class, class> class X, 
+       class A, class B>
+void f( const X<A,B> & x )                // #2
+{}
+
+int main()
+{
+    H<int> h;
+    f(h);                                 // #3
+}
diff --git a/gcc/testsuite/lib/g++-dg.exp b/gcc/testsuite/lib/g++-dg.exp
new file mode 100644 (file)
index 0000000..cad429e
--- /dev/null
@@ -0,0 +1,83 @@
+#   Copyright (C) 1997, 1999 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-g++@prep.ai.mit.edu
+
+# Define g++ callbacks for dg.exp.
+
+load_lib dg.exp
+
+proc g++-dg-test { prog do_what extra_tool_flags } {
+    # Set up the compiler flags, based on what we're going to do.
+
+    switch $do_what {
+       "preprocess" {
+           set compile_type "preprocess"
+           set output_file "[file rootname [file tail $prog]].i"
+       }
+       "compile" {
+           set compile_type "assembly"
+           set output_file "[file rootname [file tail $prog]].s"
+       }
+       "assemble" {
+           set compile_type "object"
+           set output_file "[file rootname [file tail $prog]].o"
+       }
+       "link" {
+           set compile_type "executable"
+           set output_file "a.out"
+           # The following line is needed for targets like the i960 where
+           # the default output file is b.out.  Sigh.
+       }
+       "run" {
+           set compile_type "executable"
+           # FIXME: "./" is to cope with "." not being in $PATH.
+           # Should this be handled elsewhere?
+           # YES.
+           set output_file "./a.out"
+           # This is the only place where we care if an executable was
+           # created or not.  If it was, dg.exp will try to run it.
+           remote_file build delete $output_file;
+       }
+       default {
+           perror "$do_what: not a valid dg-do keyword"
+           return ""
+       }
+    }
+    set options ""
+    if { $extra_tool_flags != "" } {
+       lappend options "additional_flags=$extra_tool_flags"
+    }
+
+    set comp_output [g++_target_compile "$prog" "$output_file" "$compile_type" $options];
+
+    return [list $comp_output $output_file]
+}
+
+
+proc g++-dg-prune { system text } {
+
+    # If we see "region xxx is full" then the testcase is too big for ram.
+    # This is tricky to deal with in a large testsuite like c-torture so
+    # deal with it here.  Just mark the testcase as unsupported.
+    if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] {
+       # The format here is important.  See dg.exp.
+       return "::unsupported::memory full"
+    }
+
+    return $text
+}