| 1 |
306 |
jeremybenn |
# Copyright (C) 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
| 2 |
|
|
|
| 3 |
|
|
# This program is free software; you can redistribute it and/or modify
|
| 4 |
|
|
# it under the terms of the GNU General Public License as published by
|
| 5 |
|
|
# the Free Software Foundation; either version 3 of the License, or
|
| 6 |
|
|
# (at your option) any later version.
|
| 7 |
|
|
#
|
| 8 |
|
|
# This program is distributed in the hope that it will be useful,
|
| 9 |
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 10 |
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 11 |
|
|
# GNU General Public License for more details.
|
| 12 |
|
|
#
|
| 13 |
|
|
# You should have received a copy of the GNU General Public License
|
| 14 |
|
|
# along with GCC; see the file COPYING3. If not see
|
| 15 |
|
|
# .
|
| 16 |
|
|
|
| 17 |
|
|
load_lib gcc-dg.exp
|
| 18 |
|
|
load_lib torture-options.exp
|
| 19 |
|
|
|
| 20 |
|
|
# Define gfortran callbacks for dg.exp.
|
| 21 |
|
|
|
| 22 |
|
|
proc gfortran-dg-test { prog do_what extra_tool_flags } {
|
| 23 |
|
|
set result \
|
| 24 |
|
|
[gcc-dg-test-1 gfortran_target_compile $prog $do_what $extra_tool_flags]
|
| 25 |
|
|
|
| 26 |
|
|
set comp_output [lindex $result 0]
|
| 27 |
|
|
set output_file [lindex $result 1]
|
| 28 |
|
|
|
| 29 |
|
|
# gfortran error messages look like this:
|
| 30 |
|
|
# [name]:[locus]:
|
| 31 |
|
|
#
|
| 32 |
|
|
# some code
|
| 33 |
|
|
# 1
|
| 34 |
|
|
# Error: Some error at (1)
|
| 35 |
|
|
# or
|
| 36 |
|
|
# [name]:[locus]:
|
| 37 |
|
|
#
|
| 38 |
|
|
# some code
|
| 39 |
|
|
# 1
|
| 40 |
|
|
# [name]:[locus2]:
|
| 41 |
|
|
#
|
| 42 |
|
|
# some other code
|
| 43 |
|
|
# 2
|
| 44 |
|
|
# Error: Some error at (1) and (2)
|
| 45 |
|
|
# or
|
| 46 |
|
|
# [name]:[locus]:
|
| 47 |
|
|
#
|
| 48 |
|
|
# some code and some more code
|
| 49 |
|
|
# 1 2
|
| 50 |
|
|
# Error: Some error at (1) and (2)
|
| 51 |
|
|
#
|
| 52 |
|
|
# Where [locus] is either [line] or [line].[columns] .
|
| 53 |
|
|
#
|
| 54 |
|
|
# We collapse these to look like:
|
| 55 |
|
|
# [name]:[line]: Error: Some error at (1) and (2)
|
| 56 |
|
|
# or
|
| 57 |
|
|
# [name]:[line]: Error: Some error at (1) and (2)
|
| 58 |
|
|
# [name]:[line2]: Error: Some error at (1) and (2)
|
| 59 |
|
|
# We proceed in two steps: first we deal with the form with two
|
| 60 |
|
|
# different locus lines, then with the form with only one locus line.
|
| 61 |
|
|
#
|
| 62 |
|
|
# Note that these regexps only make sense in the combinations used below.
|
| 63 |
|
|
# Note also that is imperative that we first deal with the form with
|
| 64 |
|
|
# two loci.
|
| 65 |
|
|
set locus_regexp "(\[^\n\]*):(\[0-9\]*)\[^\n\]*:\n\n\[^\n\]*\n\[^\n\]*\n"
|
| 66 |
|
|
set diag_regexp "(\[^\n\]*)\n"
|
| 67 |
|
|
|
| 68 |
|
|
set two_loci "$locus_regexp$locus_regexp$diag_regexp"
|
| 69 |
|
|
set single_locus "$locus_regexp$diag_regexp"
|
| 70 |
|
|
regsub -all $two_loci $comp_output "\\1:\\2: \\5\n\\3:\\4: \\5\n" comp_output
|
| 71 |
|
|
regsub -all $single_locus $comp_output "\\1:\\2: \\3\n" comp_output
|
| 72 |
|
|
|
| 73 |
|
|
return [list $comp_output $output_file]
|
| 74 |
|
|
}
|
| 75 |
|
|
|
| 76 |
|
|
proc gfortran-dg-prune { system text } {
|
| 77 |
|
|
return [gcc-dg-prune $system $text]
|
| 78 |
|
|
}
|
| 79 |
|
|
|
| 80 |
|
|
# Utility routines.
|
| 81 |
|
|
|
| 82 |
|
|
# Modified dg-runtest that can cycle through a list of optimization options
|
| 83 |
|
|
# as c-torture does.
|
| 84 |
|
|
proc gfortran-dg-runtest { testcases default-extra-flags } {
|
| 85 |
|
|
global runtests
|
| 86 |
|
|
global DG_TORTURE_OPTIONS torture_with_loops
|
| 87 |
|
|
|
| 88 |
|
|
torture-init
|
| 89 |
|
|
set-torture-options $DG_TORTURE_OPTIONS
|
| 90 |
|
|
|
| 91 |
|
|
foreach test $testcases {
|
| 92 |
|
|
# If we're only testing specific files and this isn't one of
|
| 93 |
|
|
# them, skip it.
|
| 94 |
|
|
if ![runtest_file_p $runtests $test] {
|
| 95 |
|
|
continue
|
| 96 |
|
|
}
|
| 97 |
|
|
|
| 98 |
|
|
# look if this is dg-do-run test, in which case
|
| 99 |
|
|
# we cycle through the option list, otherwise we don't
|
| 100 |
|
|
if [expr [search_for $test "dg-do run"]] {
|
| 101 |
|
|
set option_list $torture_with_loops
|
| 102 |
|
|
} else {
|
| 103 |
|
|
set option_list [list { -O } ]
|
| 104 |
|
|
}
|
| 105 |
|
|
|
| 106 |
|
|
set nshort [file tail [file dirname $test]]/[file tail $test]
|
| 107 |
|
|
|
| 108 |
|
|
foreach flags $option_list {
|
| 109 |
|
|
verbose "Testing $nshort, $flags" 1
|
| 110 |
|
|
dg-test $test $flags ${default-extra-flags}
|
| 111 |
|
|
}
|
| 112 |
|
|
}
|
| 113 |
|
|
|
| 114 |
|
|
torture-finish
|
| 115 |
|
|
}
|
| 116 |
|
|
|
| 117 |
|
|
proc gfortran-dg-debug-runtest { target_compile trivial opt_opts testcases } {
|
| 118 |
|
|
global srcdir subdir DEBUG_TORTURE_OPTIONS
|
| 119 |
|
|
|
| 120 |
|
|
if ![info exists DEBUG_TORTURE_OPTIONS] {
|
| 121 |
|
|
set DEBUG_TORTURE_OPTIONS ""
|
| 122 |
|
|
set type_list [list "-gstabs" "-gstabs+" "-gxcoff" "-gxcoff+" "-gcoff" "-gdwarf-2" ]
|
| 123 |
|
|
foreach type $type_list {
|
| 124 |
|
|
set comp_output [$target_compile \
|
| 125 |
|
|
"$srcdir/$subdir/$trivial" "trivial.S" assembly \
|
| 126 |
|
|
"additional_flags=$type"]
|
| 127 |
|
|
if { [string match "exit status *" $comp_output] } {
|
| 128 |
|
|
continue
|
| 129 |
|
|
}
|
| 130 |
|
|
if { [string match \
|
| 131 |
|
|
"* target system does not support the * debug format*" \
|
| 132 |
|
|
$comp_output]
|
| 133 |
|
|
} {
|
| 134 |
|
|
continue
|
| 135 |
|
|
}
|
| 136 |
|
|
remove-build-file "trivial.S"
|
| 137 |
|
|
foreach level {1 "" 3} {
|
| 138 |
|
|
if { ($type == "-gdwarf-2") && ($level != "") } {
|
| 139 |
|
|
lappend DEBUG_TORTURE_OPTIONS [list "${type}" "-g${level}"]
|
| 140 |
|
|
foreach opt $opt_opts {
|
| 141 |
|
|
lappend DEBUG_TORTURE_OPTIONS \
|
| 142 |
|
|
[list "${type}" "-g${level}" "$opt" ]
|
| 143 |
|
|
}
|
| 144 |
|
|
} else {
|
| 145 |
|
|
lappend DEBUG_TORTURE_OPTIONS [list "${type}${level}"]
|
| 146 |
|
|
foreach opt $opt_opts {
|
| 147 |
|
|
lappend DEBUG_TORTURE_OPTIONS \
|
| 148 |
|
|
[list "${type}${level}" "$opt" ]
|
| 149 |
|
|
}
|
| 150 |
|
|
}
|
| 151 |
|
|
}
|
| 152 |
|
|
}
|
| 153 |
|
|
}
|
| 154 |
|
|
|
| 155 |
|
|
verbose -log "Using options $DEBUG_TORTURE_OPTIONS"
|
| 156 |
|
|
|
| 157 |
|
|
global runtests
|
| 158 |
|
|
|
| 159 |
|
|
foreach test $testcases {
|
| 160 |
|
|
# If we're only testing specific files and this isn't one of
|
| 161 |
|
|
# them, skip it.
|
| 162 |
|
|
if ![runtest_file_p $runtests $test] {
|
| 163 |
|
|
continue
|
| 164 |
|
|
}
|
| 165 |
|
|
|
| 166 |
|
|
set nshort [file tail [file dirname $test]]/[file tail $test]
|
| 167 |
|
|
|
| 168 |
|
|
foreach flags $DEBUG_TORTURE_OPTIONS {
|
| 169 |
|
|
set doit 1
|
| 170 |
|
|
# gcc-specific checking removed here
|
| 171 |
|
|
|
| 172 |
|
|
if { $doit } {
|
| 173 |
|
|
verbose -log "Testing $nshort, $flags" 1
|
| 174 |
|
|
dg-test $test $flags ""
|
| 175 |
|
|
}
|
| 176 |
|
|
}
|
| 177 |
|
|
}
|
| 178 |
|
|
}
|