# Copyright (C) 1999, 2001 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
set lines [g++_target_compile "$srcdir/$subdir/conpr-1.C" "$objdir/a.out" executable ""]
if [string match "*init_priority*" $lines] then {
    xfail "conpr-1.C"
    file delete $objdir/a.out
} elseif ![string match "" $lines] then {
    fail "conpr-1.C"
} else {
    dg-runtest "$srcdir/$subdir/conpr-1.C" "" "" 
    file delete $objdir/a.out
}
dg-finish


###########
# conpr-2.C
###########

dg-init

set lines [g++_target_compile "$srcdir/$subdir/conpr-2a.C" "conpr-2a.o" object ""]
if [string match "*init_priority*" $lines] then {
    xfail "conpr-2a.o"
} elseif ![string match "" $lines] then {
    fail "conpr-2a.o"
} else {
    dg-runtest "$srcdir/$subdir/conpr-2.C" "conpr-2a.o" "" 
    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 ""]
if [string match "*init_priority*" $lines] then {
    xfail "conpr-3a.o"
} elseif ![string match "" $lines] then {
    fail "conpr-3a.o"
} else {
    set lines [g++_target_compile "$srcdir/$subdir/conpr-3b.C" "conpr-3b.o" object ""]
    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" ""
        dg-runtest "$srcdir/$subdir/conpr-3.C" "conpr-3b.o conpr-3a.o" ""
        file delete conpr-3a.o conpr-3b.o
    }
}
dg-finish


### EOF ecos.exp
