Update concepts branch to revision 131834
[official-gcc.git] / gcc / testsuite / lib / mike-g++.exp
blob21639020c46851cc3d6cd0e3f79ac416e35c6e10
1 # Copyright (C) 1988, 90, 91, 92, 95, 96, 1997, 2007
2 # Free Software Foundation, Inc.
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with GCC; see the file COPYING3. If not see
16 # <http://www.gnu.org/licenses/>.
18 # This file was written by Mike Stump <mrs@cygnus.com>
21 # mike_cleanup -- remove any files that are created by the testcase
23 proc mike_cleanup { src_code output_file assembly_file } {
24 remote_file build delete $output_file $assembly_file
28 # prebase -- sets up a Mike Stump (mrs@cygnus.com) style G++ test
30 proc prebase { } {
31 global compiler_output
32 global not_compiler_output
33 global compiler_result
34 global not_compiler_result
35 global program_output
36 global groups
37 global run
38 global actions
39 global target_regexp
41 set compiler_output "^$"
42 set not_compiler_output ".*Internal compiler error.*"
43 set compiler_result ""
44 set not_compiler_result ""
45 set program_output ".*PASS.*"
46 set groups {}
47 set run no
48 set actions assemble
49 set target_regexp ".*"
53 # run the test
55 proc postbase { src_code run groups args } {
56 global verbose
57 global srcdir
58 global subdir
59 global not_compiler_output
60 global compiler_output
61 global compiler_result
62 global not_compiler_result
63 global program_output
64 global actions
65 global target_regexp
66 global host_triplet
67 global target_triplet
68 global tool
69 global tmpdir
70 global objdir
71 global base_dir
73 if ![regexp $target_regexp $target_triplet] {
74 unsupported $subdir/$src_code
75 return
78 if { [llength $args] > 0 } {
79 set comp_options [lindex $args 0]
80 } else {
81 set comp_options ""
84 set fail_message $subdir/$src_code
85 set pass_message $subdir/$src_code
87 if [info exists GROUP] {
88 if {[lsearch $groups $GROUP] == -1} {
89 return
93 if [string match $run yes] {
94 set actions run
97 set output_file "$tmpdir/[file tail [file rootname $src_code]]"
98 set assembly_file "$output_file"
99 append assembly_file ".S"
101 set compile_type "none"
103 case $actions {
104 compile
106 set compile_type "assembly"
107 set output_file $assembly_file
109 assemble
111 set compile_type "object"
112 append output_file ".o"
114 link
116 set compile_type "executable"
117 append output_file ".exe"
121 set compile_type "executable"
122 append output_file ".exe"
123 set run yes
125 default
127 set output_file ""
128 set compile_type "none"
132 set src_file "$srcdir/$subdir/$src_code"
133 set options ""
135 if { $comp_options != "" } {
136 lappend options "additional_flags=$comp_options"
139 if ![ishost "*-dos-*"] {
140 lappend options "libs=-lstdc++ -lg++"
141 } else {
142 lappend options "libs=-lstdcxx -lgxx"
145 set comp_output [g++_target_compile $src_file $output_file $compile_type $options]
147 set pass no
149 # Delete things like "ld.so warning" messages.
150 set comp_output [prune_warnings $comp_output]
152 if [regexp -- $not_compiler_output $comp_output] {
153 if { $verbose > 1 } {
154 send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n"
155 } else {
156 send_log "\nCompiler output:\n$comp_output\n\n"
158 fail $fail_message
159 # The framework doesn't like to see any error remnants,
160 # so remove them.
161 uplevel {
162 if [info exists errorInfo] {
163 unset errorInfo
166 mike_cleanup $src_code $output_file $assembly_file
167 return
170 # remove any leftover CRs.
171 regsub -all -- "\r" $comp_output "" comp_output
173 regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output
174 regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output
176 set unsupported_message [${tool}_check_unsupported_p $comp_output]
177 if { $unsupported_message != "" } {
178 unsupported "$subdir/$src_code: $unsupported_message"
179 mike_cleanup $src_code $output_file $assembly_file
180 return
183 if { $verbose > 1 } {
184 send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n"
185 } else {
186 send_log "\nCompiler output:\n$comp_output\n\n"
188 if [regexp -- $compiler_output $comp_output] {
189 if { $verbose > 1 } {
190 send_user "Yes, it matches.\n\n"
192 set pass yes
193 if [file exists [file rootname [file tail $src_code]].s] {
194 set fd [open [file rootname [file tail $src_code]].s r]
195 set dot_s [read $fd]
196 close $fd
197 if { $compiler_result != "" } {
198 verbose "Checking .s file for $compiler_result" 2
199 if [regexp -- $compiler_result $dot_s] {
200 verbose "Yes, it matches." 2
201 } else {
202 verbose "Nope, doesn't match." 2
203 verbose $dot_s 4
204 set pass no
207 if { $not_compiler_result != "" } {
208 verbose "Checking .s file for not $not_compiler_result" 2
209 if ![regexp -- $not_compiler_result $dot_s] {
210 verbose "Nope, not found (that's good)." 2
211 } else {
212 verbose "Uh oh, it was found." 2
213 verbose $dot_s 4
214 set pass no
218 if [string match $run yes] {
219 set result [g++_load $output_file]
220 set status [lindex $result 0]
221 set output [lindex $result 1]
223 if { $status == -1 } {
224 mike_cleanup $src_code $output_file $assembly_file
225 return
227 if { $verbose > 1 } {
228 send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n"
230 if ![regexp -- $program_output $output] {
231 set pass no
232 if { $verbose > 1 } {
233 send_user "Nope, does not match.\n\n"
235 } else {
236 if { $verbose > 1 } {
237 send_user "Yes, it matches.\n\n"
241 } else {
242 if { $verbose > 1 } {
243 send_user "Nope, does not match.\n\n"
247 if [string match $pass "yes"] {
248 pass $pass_message
249 } else {
250 fail $fail_message
253 # The framework doesn't like to see any error remnants,
254 # so remove them.
255 uplevel {
256 if [info exists errorInfo] {
257 unset errorInfo
261 mike_cleanup $src_code $output_file $assembly_file