#   Copyright (C) 1988, 1990, 1991, 1992, 1997 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., 675 Mass Ave, Cambridge, MA 02139, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gcc@prep.ai.mit.edu

# This file was written by Jeff Law. (law@cs.utah.edu)

#
# These tests come from Torbjorn Granlund (tege@cygnus.com)
# C torture test suite.
#

load_lib mike-gcc.exp

# Test 920507-1.c
prebase

set src_code 920507-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 920616-2.c
prebase

set src_code 920616-2.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 920721-2.c
prebase

set src_code 920721-2.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 920824-1.c
prebase

set src_code 920824-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 920923-1.c
prebase

set src_code 920923-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 921102-1.c
prebase

set src_code 921102-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 921116-1.c
prebase

set src_code 921116-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 930301-1.c
prebase

set src_code 930301-1.c
set compiler_output ".*:4:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 930622-1.c
prebase

set src_code 930622-1.c
set compiler_output ".*:5:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 930622-2.c
prebase

set src_code 930622-2.c
set compiler_output ".*:4:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 930714-1.c
prebase

set src_code 930714-1.c
# Not really sure what the error should be here...
set compiler_output ".*:18.*:23"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups

# Test 931203-1.c
prebase

set src_code 931203-1.c
set compiler_output ".*:10"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 940112-1.c
prebase

set src_code 940112-1.c
set compiler_output ".*:7"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 940227-1.c
prebase

set src_code 940227-1.c
set compiler_output ".*:5.*:5"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 940510-1.c
prebase

set src_code 940510-1.c
set compiler_output ".*:1.*:1"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 940712-1.c
prebase

set src_code 940712-1.c
set compiler_output ".*:8.*:4"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 950825-1.c
prebase
set src_code 950825-1.c
set compiler_output ".*:1.*:1.*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 950921-1.c
prebase
set src_code 950921-1.c
set compiler_output ".*:3.*:3.*:9.*:9:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 951025-1.c
prebase
set src_code 951025-1.c
set compiler_output ".*:\[12\]:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 951123-1.c
prebase
set src_code 951123-1.c
set compiler_output ".*:2:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 951227-1.c
prebase
set src_code 951227-1.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test 971104-1.c
prebase
set src_code 971104-1.c
set compiler_output ".*:25:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups

# Test 990416-1.c
prebase
set src_code 990416-1.c
set compiler_output ".*:4:.*:6:.*:6:.*:6:.*:6:.*:6:.*:7:.*:7:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups

# Test init-1.c
prebase
set src_code init-1.c
set compiler_output ".*:12.*:12.*:13.*:13.*:14.*:14.*:15.*:15.*:16.*:16:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test init-2.c
prebase
set src_code init-2.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test invalid_asm.c
prebase
set src_code invalid_asm.c
set compiler_output ".*:1:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups


# Test va-arg-1.c
# It is debatable if this test should be included at all.
# varags may be implemented by macros, which may not actually
# reference the bogus argument.
prebase

set src_code va-arg-1.c
set compiler_output ".*:6:"

set groups {passed gcc-noncompile}

postbase $src_code $run $groups
