From-SVN: r25071
This commit is contained in:
Jonathan Larmour 1999-02-07 15:40:17 +00:00 committed by Jason Merrill
parent 54281b2919
commit 561cb39b35
14 changed files with 366 additions and 3 deletions

View 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.

View 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.

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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)));

View File

@ -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);
}

View File

@ -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)));

View File

@ -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)));

View File

@ -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

View File

@ -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) { }
};

View File

@ -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();
}

View File

@ -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);
}

View File

@ -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
}

View File

@ -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
}