# Copyright (C) 1999, 2001, 2003 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

# Test for whether or not __attribute__((init_priority)) is supported
# by the platform.

set comp_output [g++_target_compile \
		"$srcdir/$subdir/initp1.C" "initp1.S" assembly ""]
if { [string match "*init_priority*" $comp_output] } {
  return 0
}

# Initialize 'dg'.
dg-init

# Main loop.
dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" ""

# All done.
dg-finish

