1 # Copyright
(C
) 2004-2014 Free Software Foundation
, Inc.
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.
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.
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 #
<http
://www.gnu.org
/licenses
/>.
18 load_lib torture
-options.exp
20 #
Define gfortran callbacks
for dg.exp.
22 proc gfortran
-dg
-test
{ prog do_what extra_tool_flags
} {
24 [gcc
-dg
-test
-1 gfortran_target_compile $prog $do_what $extra_tool_flags
]
26 set comp_output
[lindex $result
0]
27 set output_file
[lindex $result
1]
29 # gfortran error messages look like this
:
34 # Error
: Some error at
(1)
44 # Error
: Some error at
(1) and
(2)
48 # some code and some more code
50 # Error
: Some error at
(1) and
(2)
52 # Where
[locus
] is either
[line
] or
[line
].
[columns
] .
54 # We collapse these to look like
:
55 #
[name]:[line
]:[column
]: Error
: Some error at
(1) and
(2)
57 #
[name]:[line
]:[column
]: Error
: Some error at
(1) and
(2)
58 #
[name]:[line2
]:[column
]: 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.
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
65 set locus_regexp
"(\[^\n\]*):(\[0-9\]+)\[\.:\](\[0-9\]*)(-\[0-9\]*)?:\n\n\[^\n\]*\n\[^\n\]*\n"
66 set diag_regexp
"(\[^\n\]*)\n"
68 # Add column number
if none exists
69 set colnum_regexp
"(Warning: |Error: )?(\[^\n\]*):(\[0-9\]+):(\[ \n\])"
70 regsub
-all $colnum_regexp $comp_output
"\\2:\\3:0:\\4\\1" comp_output
72 set two_loci
"$locus_regexp$locus_regexp$diag_regexp"
73 set single_locus
"$locus_regexp$diag_regexp"
74 regsub
-all $two_loci $comp_output
"\\1:\\2:\\3: \\9\n\\5:\\6:\\7: \\9\n" comp_output
75 regsub
-all $single_locus $comp_output
"\\1:\\2:\\3: \\5\n" comp_output
77 # Add a line number
if none exists
78 regsub
-all
"(^|\n)(Warning: |Error: )" $comp_output "\\1:0:0: \\2" comp_output
80 return [list $comp_output $output_file
]
83 proc gfortran
-dg
-prune
{ system text } {
84 return [gcc
-dg
-prune $
system $
text]
89 # Modified dg
-runtest that can cycle through a list of optimization options
91 proc gfortran
-dg
-runtest
{ testcases flags default
-extra
-flags
} {
93 global DG_TORTURE_OPTIONS torture_with_loops
96 set-torture
-options $DG_TORTURE_OPTIONS
98 foreach test $testcases
{
99 #
If we
're only testing specific files and this isn't one of
101 if ![runtest_file_p $runtests $test
] {
105 # look
if this is dg
-do-run test
, in which case
106 # we cycle through the option list
, otherwise we don
't
107 if [expr [search_for $test "dg-do run"]] {
108 set option_list $torture_with_loops
110 set option_list [list { -O } ]
113 set nshort [file tail [file dirname $test]]/[file tail $test]
114 list-module-names $test
116 foreach flags_t $option_list {
117 verbose "Testing $nshort, $flags $flags_t" 1
118 dg-test $test "$flags $flags_t" ${default-extra-flags}
126 proc gfortran-dg-debug-runtest { target_compile trivial opt_opts testcases } {
127 global srcdir subdir DEBUG_TORTURE_OPTIONS
129 if ![info exists DEBUG_TORTURE_OPTIONS] {
130 set DEBUG_TORTURE_OPTIONS ""
131 set type_list [list "-gstabs" "-gstabs+" "-gxcoff" "-gxcoff+" "-gcoff" "-gdwarf-2" ]
132 foreach type $type_list {
133 set comp_output [$target_compile \
134 "$srcdir/$subdir/$trivial" "trivial.S" assembly \
135 "additional_flags=$type"]
136 if { [string match "exit status *" $comp_output] } {
140 "* target system does not support the * debug format*" \
145 remove-build-file "trivial.S"
146 foreach level {1 "" 3} {
147 if { ($type == "-gdwarf-2") && ($level != "") } {
148 lappend DEBUG_TORTURE_OPTIONS [list "${type}" "-g${level}"]
149 foreach opt $opt_opts {
150 lappend DEBUG_TORTURE_OPTIONS \
151 [list "${type}" "-g${level}" "$opt" ]
154 lappend DEBUG_TORTURE_OPTIONS [list "${type}${level}"]
155 foreach opt $opt_opts {
156 lappend DEBUG_TORTURE_OPTIONS \
157 [list "${type}${level}" "$opt" ]
164 verbose -log "Using options $DEBUG_TORTURE_OPTIONS"
168 foreach test $testcases {
169 # If we're only testing specific files and this isn
't one of
171 if ![runtest_file_p $runtests $test] {
175 set nshort [file tail [file dirname $test]]/[file tail $test]
176 list-module-names $test
178 foreach flags $DEBUG_TORTURE_OPTIONS {
180 # gcc-specific checking removed here
183 verbose -log "Testing $nshort, $flags" 1
184 dg-test $test $flags ""