OSDN Git Service

3198d9e35adc48c94a226e4ef4d8a947042c3eea
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.test-framework / gen_directive_tests
1 #! /bin/bash
2
3 ########################################################################
4 #
5 # File:    generate_framework_tests
6 # Author:  Janis Johnson
7 # Date:    2004/11/02
8 #
9 # Generate tests of GCC's test framework.  Each test has encoded in
10 # its name the dg commands that are used in the test and the expected
11 # result of the test, *-1.c.  Each test is followed by a test ending
12 # in *-2.c that is expected to pass.
13 #
14 # This script has evolved and could be rewritten to be more compact.
15 #
16 #
17 # Copyright (c) 2004, 2005 Free Software Foundation, Inc.
18 #
19 # This file is free software; you can redistribute it and/or modify
20 # it under the terms of the GNU General Public License as published by
21 # the Free Software Foundation; either version 2 of the License, or
22 # (at your option) any later version.
23 #
24 # This program is distributed in the hope that it will be useful,
25 # but WITHOUT ANY WARRANTY; without even the implied warranty of
26 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27 # GNU General Public License for more details.
28 #
29 # For a copy of the GNU General Public License, write the the
30 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
31 # Boston, MA 02111-1307, USA.
32 #
33 ########################################################################
34
35 cd $1
36
37 GOOD0='*-*-*'
38 GOOD1="yes"
39 BAD0='empty-empty-empty'
40 BAD1="no"
41
42 # Programs used in the tests: good compile and run, bad compile, and
43 # bad run.
44 GOOD_PROG="int main () { return 0; }"
45 BADC_PROG="int missing_body () }"
46 BADR_PROG="extern void abort (void); int main () { abort (); }"
47
48 # dg-do commands with a target list.
49 DOT_S0="{ dg-do compile { target ${GOOD0} } }"
50 DOT_S1="{ dg-do compile { target ${GOOD1} } }"
51 DOT_N0="{ dg-do compile { target ${BAD0} } }"
52 DOT_N1="{ dg-do compile { target ${BAD1} } }"
53
54 # dg-do commands with an xfail list; the xfail list is ignored for
55 # everything but "run".
56 DOX_P0="{ dg-do run { xfail ${BAD0} } }"
57 DOX_P1="{ dg-do run { xfail ${BAD1} } }"
58 DOX_F0="{ dg-do run { xfail ${GOOD0} } }"
59 DOX_F1="{ dg-do run { xfail ${GOOD1} } }"
60
61 # dg-xfail-if commands.
62 XIF_P0="{ dg-xfail-if \"target not matched\" { ${BAD0} } { \"-DY1\" } { \"-DY2\" } }"
63 XIF_P1="{ dg-xfail-if \"target not matched\" { ${BAD0} } { \"-DY1\" } { \"-DN\" } }"
64 XIF_P2="{ dg-xfail-if \"target not matched\" { ${BAD0} } { \"-DN\" } { \"-DY1\" } }"
65 XIF_P3="{ dg-xfail-if \"target not matched\" { ${BAD0} } { \"-DN1\" } { \"-DN2\" } }"
66 XIF_P4="{ dg-xfail-if \"exclude option matched\" { ${GOOD0} } { \"-DY1\" } { \"-DY2\" } }"
67 XIF_P5="{ dg-xfail-if \"include option not matched\" { ${GOOD0} } { \"-DN\" } { \"-DY1\" } }"
68 XIF_P6="{ dg-xfail-if \"include option not matched\" { ${GOOD0} } { \"-DN1\" } { \"-DN2\" } }"
69 XIF_F0="{ dg-xfail-if \"all matches succeed\" { ${GOOD0} } { \"-DY1\" } { \"-DN\" } }"
70 XIF_F1="{ dg-xfail-if \"all matches succeed\" { ${GOOD0} } { \"*\" } { \"-DN\" } }"
71 XIF_F2="{ dg-xfail-if \"all matches succeed\" { ${GOOD0} } { \"-DY1\" } { \"\" } }"
72 XIF_F3="{ dg-xfail-if \"all matches succeed\" { ${GOOD0} } { \"*\" } { \"\" } }"
73
74 XIF_P7="{ dg-xfail-if \"target not matched\" { ${BAD1} } { \"-DY1\" } { \"-DY2\" } }"
75 XIF_P8="{ dg-xfail-if \"target not matched\" { ${BAD1} } { \"-DY1\" } { \"-DN\" } }"
76 XIF_P9="{ dg-xfail-if \"target not matched\" { ${BAD1} } { \"-DN\" } { \"-DY1\" } }"
77 XIF_P10="{ dg-xfail-if \"target not matched\" { ${BAD1} } { \"-DN1\" } { \"-DN2\" } }"
78 XIF_P11="{ dg-xfail-if \"exclude option matched\" { ${GOOD1} } { \"-DY1\" } { \"-DY2\" } }"
79 XIF_P12="{ dg-xfail-if \"include option not matched\" { ${GOOD1} } { \"-DN\" } { \"-DY1\" } }"
80 XIF_P13="{ dg-xfail-if \"include option not matched\" { ${GOOD1} } { \"-DN1\" } { \"-DN2\" } }"
81 XIF_F4="{ dg-xfail-if \"all matches succeed\" { ${GOOD1} } { \"-DY1\" } { \"-DN\" } }"
82 XIF_F5="{ dg-xfail-if \"all matches succeed\" { ${GOOD1} } { \"*\" } { \"-DN\" } }"
83 XIF_F6="{ dg-xfail-if \"all matches succeed\" { ${GOOD1} } { \"-DY1\" } { \"\" } }"
84 XIF_F7="{ dg-xfail-if \"all matches succeed\" { ${GOOD1} } { \"*\" } { \"\" } }"
85
86
87 # dg-skip-if commands.
88 SIF_S0="{ dg-skip-if \"target not matched\" { ${BAD0} } { \"-DY1\" } { \"-DY2\" } }"
89 SIF_S1="{ dg-skip-if \"target not matched\" { ${BAD0} } { \"-DY1\" } { \"-DN\" } }"
90 SIF_S2="{ dg-skip-if \"target not matched\" { ${BAD0} } { \"-DN\" } { \"-DY1\" } }"
91 SIF_S3="{ dg-skip-if \"target not matched\" { ${BAD0} } { \"-DN1\" } { \"-DN2\" } }"
92 SIF_S4="{ dg-skip-if \"exclude option matched\" { ${GOOD0} } { \"-DY1\" } { \"-DY2\" } }"
93 SIF_S5="{ dg-skip-if \"include option not matched\" { ${GOOD0} } { \"-DN\" } { \"-DY1\" } }"
94 SIF_S6="{ dg-skip-if \"include option not matched\" { ${GOOD0} } { \"-DN1\" } { \"-DN2\" } }"
95 SIF_N0="{ dg-skip-if \"all matches succeed\" { ${GOOD0} } { \"-DY1\" } { \"-DN\" } }"
96 SIF_N1="{ dg-skip-if \"all matches succeed\" { ${GOOD0} } { \"*\" } { \"-DN\" } }"
97 SIF_N2="{ dg-skip-if \"all matches succeed\" { ${GOOD0} } { \"-DY1\" } { \"\" } }"
98 SIF_N3="{ dg-skip-if \"all matches succeed\" { ${GOOD0} } { \"*\" } { \"\" } }"
99 SIF_S7="{ dg-skip-if \"target not matched\" { ${BAD1} } { \"-DY1\" } { \"-DY2\" } }"
100 SIF_S8="{ dg-skip-if \"target not matched\" { ${BAD1} } { \"-DY1\" } { \"-DN\" } }"
101 SIF_S9="{ dg-skip-if \"target not matched\" { ${BAD1} } { \"-DN\" } { \"-DY1\" } }"
102 SIF_S10="{ dg-skip-if \"target not matched\" { ${BAD1} } { \"-DN1\" } { \"-DN2\" } }"
103 SIF_S11="{ dg-skip-if \"exclude option matched\" { ${GOOD1} } { \"-DY1\" } { \"-DY2\" } }"
104 SIF_S12="{ dg-skip-if \"include option not matched\" { ${GOOD1} } { \"-DN\" } { \"-DY1\" } }"
105 SIF_S13="{ dg-skip-if \"include option not matched\" { ${GOOD1} } { \"-DN1\" } { \"-DN2\" } }"
106 SIF_N4="{ dg-skip-if \"all matches succeed\" { ${GOOD1} } { \"-DY1\" } { \"-DN\" } }"
107 SIF_N5="{ dg-skip-if \"all matches succeed\" { ${GOOD1} } { \"*\" } { \"-DN\" } }"
108 SIF_N6="{ dg-skip-if \"all matches succeed\" { ${GOOD1} } { \"-DY1\" } { \"\" } }"
109 SIF_N7="{ dg-skip-if \"all matches succeed\" { ${GOOD1} } { \"*\" } { \"\" } }"
110
111 # dg-require-* commands, using procedures defined for this set of tests.
112 REQ_S0="{ dg-require-true \"\" }"    # do not skip the test
113 REQ_N0="{ dg-require-false \"\" }"   # skip the test
114
115 # scan-assembler-not, which is hoped to be representative of commands
116 # used with dg-final, with a target list.
117 SAT_N0="{ dg-final { scan-assembler-not \"unexpected gargage\" { target ${BAD0} } } }"
118 SAT_N1="{ dg-final { scan-assembler-not \"unexpected gargage\" { target ${BAD1} } } }"
119 SAT_S0="{ dg-final { scan-assembler-not \"unexpected gargage\" { target ${GOOD0} } } }"
120 SAT_S1="{ dg-final { scan-assembler-not \"unexpected gargage\" { target ${GOOD1} } } }"
121
122 # scan-assembler-not, which is hoped to be representative of commands
123 # used with dg-final, with an xfail list.
124 SAX_P0="{ dg-final { scan-assembler-not \"unexpected gargage\" { xfail ${BAD0} } } }"
125 SAX_P1="{ dg-final { scan-assembler-not \"unexpected gargage\" { xfail ${BAD1} } } }"
126 SAX_F0="{ dg-final { scan-assembler-not \"unexpected gargage\" { xfail ${GOOD0} } } }"
127 SAX_F1="{ dg-final { scan-assembler-not \"unexpected gargage\" { xfail ${GOOD1} } } }"
128
129 KIND_LIST=""
130
131 # Expected result of the *-1.c test, encoded into the file name.
132 EXP_PASS="exp-P"
133 EXP_XPASS="exp-XP"
134 EXP_SKIP="exp-U"
135 EXP_FAIL="exp-F"
136 EXP_XFAIL="exp-XF"
137
138 get_list() {
139     KIND=$1
140     case $KIND in
141       "dots") KIND_LIST="dots0 dots1";;
142       "dotn") KIND_LIST="dotn0 dotn1";;
143       "doxp") KIND_LIST="doxp0 doxp1";;
144       "doxf") KIND_LIST="doxf0 doxf1";;
145       "sifs") KIND_LIST="sifs0 sifs1 sifs2 sifs3 sifs4 sifs5 sifs6 sifs7 sifs8 sifs9 sifs10 sifs11 sifs12 sifs13";;
146       "sifn") KIND_LIST="sifn0 sifn1 sifn2 sifn3 sifn4 sifn5 sifn6 sifn7";;
147       "xifp") KIND_LIST="xifp0 xifp1 xifp2 xifp3 xifp4 xifp5 xifp6 xifp7 xifp8 xifp9 xifp10 xifp11 xifp12 xifp13";;
148       "xiff") KIND_LIST="xiff0 xiff1 xiff2 xiff3 xiff4 xiff5 xiff6 xiff7";;
149       "sats") KIND_LIST="sats0 sats1";;
150       "satn") KIND_LIST="satn0 satn1";;
151       "saxp") KIND_LIST="saxp0 saxp1";;
152       "saxf") KIND_LIST="saxf0 saxf1";;
153       "reqs") KIND_LIST="reqs0";;
154       "reqn") KIND_LIST="reqn0";;
155       *) echo "oops: $KIND"; exit 1;;
156     esac
157 }
158
159 cmd() {
160     KIND=$1
161     FILE=$2
162
163     case $KIND in
164       "dots") echo '/*' "${DOT_S0}" '*/' >> $FILE;;
165       "dots0") echo '/*' "${DOT_S0}" '*/' >> $FILE;;
166       "dots1") echo '/*' "${DOT_S1}" '*/' >> $FILE;;
167       "dots2") echo '/*' "${DOT_S2}" '*/' >> $FILE;;
168       "dots3") echo '/*' "${DOT_S3}" '*/' >> $FILE;;
169       "dots4") echo '/*' "${DOT_S4}" '*/' >> $FILE;;
170       "dotn") echo '/*' "${DOT_N0}" '*/' >> $FILE;;
171       "dotn0") echo '/*' "${DOT_N0}" '*/' >> $FILE;;
172       "dotn1") echo '/*' "${DOT_N1}" '*/' >> $FILE;;
173       "dotn2") echo '/*' "${DOT_N2}" '*/' >> $FILE;;
174       "dotn3") echo '/*' "${DOT_N3}" '*/' >> $FILE;;
175       "dotn4") echo '/*' "${DOT_N4}" '*/' >> $FILE;;
176       "doxp") echo '/*' "${DOX_P0}" '*/' >> $FILE;;
177       "doxp0") echo '/*' "${DOX_P0}" '*/' >> $FILE;;
178       "doxp1") echo '/*' "${DOX_P1}" '*/' >> $FILE;;
179       "doxp2") echo '/*' "${DOX_P2}" '*/' >> $FILE;;
180       "doxp3") echo '/*' "${DOX_P3}" '*/' >> $FILE;;
181       "doxp4") echo '/*' "${DOX_P4}" '*/' >> $FILE;;
182       "doxf") echo '/*' "${DOX_F0}" '*/' >> $FILE;;
183       "doxf0") echo '/*' "${DOX_F0}" '*/' >> $FILE;;
184       "doxf1") echo '/*' "${DOX_F1}" '*/' >> $FILE;;
185       "doxf2") echo '/*' "${DOX_F2}" '*/' >> $FILE;;
186       "doxf3") echo '/*' "${DOX_F3}" '*/' >> $FILE;;
187       "doxf4") echo '/*' "${DOX_F4}" '*/' >> $FILE;;
188       "sifs") echo '/*' "${SIF_S0}" '*/' >> $FILE;;
189       "sifs0") echo '/*' "${SIF_S0}" '*/' >> $FILE;;
190       "sifs1") echo '/*' "${SIF_S1}" '*/' >> $FILE;;
191       "sifs2") echo '/*' "${SIF_S2}" '*/' >> $FILE;;
192       "sifs3") echo '/*' "${SIF_S3}" '*/' >> $FILE;;
193       "sifs4") echo '/*' "${SIF_S4}" '*/' >> $FILE;;
194       "sifs5") echo '/*' "${SIF_S5}" '*/' >> $FILE;;
195       "sifs6") echo '/*' "${SIF_S6}" '*/' >> $FILE;;
196       "sifs7") echo '/*' "${SIF_S7}" '*/' >> $FILE;;
197       "sifs8") echo '/*' "${SIF_S8}" '*/' >> $FILE;;
198       "sifs9") echo '/*' "${SIF_S9}" '*/' >> $FILE;;
199       "sifs10") echo '/*' "${SIF_S10}" '*/' >> $FILE;;
200       "sifs11") echo '/*' "${SIF_S11}" '*/' >> $FILE;;
201       "sifs12") echo '/*' "${SIF_S12}" '*/' >> $FILE;;
202       "sifs13") echo '/*' "${SIF_S13}" '*/' >> $FILE;;
203       "sifn") echo '/*' "${SIF_N0}" '*/' >> $FILE;;
204       "sifn0") echo '/*' "${SIF_N0}" '*/' >> $FILE;;
205       "sifn1") echo '/*' "${SIF_N1}" '*/' >> $FILE;;
206       "sifn2") echo '/*' "${SIF_N2}" '*/' >> $FILE;;
207       "sifn3") echo '/*' "${SIF_N3}" '*/' >> $FILE;;
208       "sifn4") echo '/*' "${SIF_N4}" '*/' >> $FILE;;
209       "sifn5") echo '/*' "${SIF_N5}" '*/' >> $FILE;;
210       "sifn6") echo '/*' "${SIF_N6}" '*/' >> $FILE;;
211       "sifn7") echo '/*' "${SIF_N7}" '*/' >> $FILE;;
212       "xifp") echo '/*' "${XIF_P0}" '*/' >> $FILE;;
213       "xifp0") echo '/*' "${XIF_P0}" '*/' >> $FILE;;
214       "xifp1") echo '/*' "${XIF_P1}" '*/' >> $FILE;;
215       "xifp2") echo '/*' "${XIF_P2}" '*/' >> $FILE;;
216       "xifp3") echo '/*' "${XIF_P3}" '*/' >> $FILE;;
217       "xifp4") echo '/*' "${XIF_P4}" '*/' >> $FILE;;
218       "xifp5") echo '/*' "${XIF_P5}" '*/' >> $FILE;;
219       "xifp6") echo '/*' "${XIF_P6}" '*/' >> $FILE;;
220       "xifp7") echo '/*' "${XIF_P7}" '*/' >> $FILE;;
221       "xifp8") echo '/*' "${XIF_P8}" '*/' >> $FILE;;
222       "xifp9") echo '/*' "${XIF_P9}" '*/' >> $FILE;;
223       "xifp10") echo '/*' "${XIF_P10}" '*/' >> $FILE;;
224       "xifp11") echo '/*' "${XIF_P11}" '*/' >> $FILE;;
225       "xifp12") echo '/*' "${XIF_P12}" '*/' >> $FILE;;
226       "xifp13") echo '/*' "${XIF_P13}" '*/' >> $FILE;;
227       "xiff") echo '/*' "${XIF_F0}" '*/' >> $FILE;;
228       "xiff0") echo '/*' "${XIF_F0}" '*/' >> $FILE;;
229       "xiff1") echo '/*' "${XIF_F1}" '*/' >> $FILE;;
230       "xiff2") echo '/*' "${XIF_F2}" '*/' >> $FILE;;
231       "xiff3") echo '/*' "${XIF_F3}" '*/' >> $FILE;;
232       "xiff4") echo '/*' "${XIF_F4}" '*/' >> $FILE;;
233       "xiff5") echo '/*' "${XIF_F5}" '*/' >> $FILE;;
234       "xiff6") echo '/*' "${XIF_F6}" '*/' >> $FILE;;
235       "xiff7") echo '/*' "${XIF_F7}" '*/' >> $FILE;;
236       "satn") echo '/*' "${SAT_N0}" '*/' >> $FILE;;
237       "satn0") echo '/*' "${SAT_N0}" '*/' >> $FILE;;
238       "satn1") echo '/*' "${SAT_N1}" '*/' >> $FILE;;
239       "satn2") echo '/*' "${SAT_N2}" '*/' >> $FILE;;
240       "satn3") echo '/*' "${SAT_N3}" '*/' >> $FILE;;
241       "satn4") echo '/*' "${SAT_N4}" '*/' >> $FILE;;
242       "sats") echo '/*' "${SAT_S0}" '*/' >> $FILE;;
243       "sats0") echo '/*' "${SAT_S0}" '*/' >> $FILE;;
244       "sats1") echo '/*' "${SAT_S1}" '*/' >> $FILE;;
245       "sats2") echo '/*' "${SAT_S2}" '*/' >> $FILE;;
246       "sats3") echo '/*' "${SAT_S3}" '*/' >> $FILE;;
247       "sats4") echo '/*' "${SAT_S4}" '*/' >> $FILE;;
248       "saxp") echo '/*' "${SAX_P0}" '*/' >> $FILE;;
249       "saxp0") echo '/*' "${SAX_P0}" '*/' >> $FILE;;
250       "saxp1") echo '/*' "${SAX_P1}" '*/' >> $FILE;;
251       "saxp2") echo '/*' "${SAX_P2}" '*/' >> $FILE;;
252       "saxp3") echo '/*' "${SAX_P3}" '*/' >> $FILE;;
253       "saxp4") echo '/*' "${SAX_P4}" '*/' >> $FILE;;
254       "saxf") echo '/*' "${SAX_F0}" '*/' >> $FILE;;
255       "saxf0") echo '/*' "${SAX_F0}" '*/' >> $FILE;;
256       "saxf1") echo '/*' "${SAX_F1}" '*/' >> $FILE;;
257       "saxf2") echo '/*' "${SAX_F2}" '*/' >> $FILE;;
258       "saxf3") echo '/*' "${SAX_F3}" '*/' >> $FILE;;
259       "saxf4") echo '/*' "${SAX_F4}" '*/' >> $FILE;;
260       "reqs") echo '/*' "${REQ_S0}" '*/' >> $FILE;;
261       "reqs0") echo '/*' "${REQ_S0}" '*/' >> $FILE;;
262       "reqn") echo '/*' "${REQ_N0}" '*/' >> $FILE;;
263       "reqn0") echo '/*' "${REQ_N0}" '*/' >> $FILE;;
264       *) echo "oops: $KIND"; exit 1;;
265     esac
266 }
267
268 # Generate a test using a single dg- command.  If requested, generate a
269 # second version that will fail.
270 one() {
271     KIND=$1
272     EXP=$2
273     FAIL_VERSION=$3
274
275     NAME=${KIND}-${EXP}
276     FILE1=${NAME}-1.c
277     FILE2=${NAME}-2.c
278     rm -f $FILE1
279     touch $FILE1
280     cmd $KIND $FILE1
281     echo "${GOOD_PROG}" >> $FILE1
282     echo "${GOOD_PROG}" > $FILE2
283
284     if [ "${FAIL_VERSION}" == "yes" ]; then
285         if [ "${EXP}" == "${EXP_PASS}" ]; then
286             NAME=${KIND}-${EXP_FAIL}
287         else
288             NAME=${KIND}-${EXP_XFAIL}
289         fi
290
291         FILE1=${NAME}-1.c
292         FILE2=${NAME}-2.c
293         rm -f $FILE1
294         touch $FILE1
295         cmd $KIND $FILE1
296         case $KIND in
297         dox*)   echo "${BADR_PROG}" >> $FILE1;;
298         *)      echo "${BADC_PROG}" >> $FILE1;;
299         esac
300         echo "${GOOD_PROG}" > $FILE2
301     fi
302 }
303
304 # Generate a test using two dg- commands.  If requested, generate a
305 # second version that will fail.
306 two() {
307     KIND1=$1
308     KIND2=$2
309     EXP=$3
310     FAIL_VERSION=$4
311
312     NAME=${KIND1}-${KIND2}-${EXP}
313     FILE1=${NAME}-1.c
314     FILE2=${NAME}-2.c
315
316     rm -f $FILE1
317     touch $FILE1
318     cmd $KIND1 $FILE1
319     cmd $KIND2 $FILE1
320     echo "${GOOD_PROG}" >> $FILE1
321     echo "${GOOD_PROG}" > $FILE2
322
323     if [ "${FAIL_VERSION}" == "yes" ]; then
324         if [ "${EXP}" == "${EXP_PASS}" ]; then
325             NAME=${KIND1}-${KIND2}-${EXP_FAIL}
326         else
327             NAME=${KIND1}-${KIND2}-${EXP_XFAIL}
328         fi
329
330         FILE1=${NAME}-1.c
331         FILE2=${NAME}-2.c
332         rm -f $FILE1
333         touch $FILE1
334         cmd $KIND1 $FILE1
335         cmd $KIND2 $FILE1
336         # dg-do with an xfail list is only used as the first command.
337         case $KIND1 in
338         dox*)   echo "${BADR_PROG}" >> $FILE1;;
339         *)      echo "${BADC_PROG}" >> $FILE1;;
340         esac
341         echo "${GOOD_PROG}" > $FILE2
342     fi
343 }
344
345 # Generate a test using three dg- commands.  If requested generate a
346 # second version that will fail.
347 three() {
348     KIND1=$1
349     KIND2=$2
350     KIND3=$3
351     EXP=$4
352     FAIL_VERSION=$5
353
354     NAME=${KIND1}-${KIND2}-${KIND3}-${EXP}
355     FILE1=${NAME}-1.c
356     FILE2=${NAME}-2.c
357     rm -f $FILE1
358     touch $FILE1
359     cmd $KIND1 $FILE1
360     cmd $KIND2 $FILE1
361     cmd $KIND3 $FILE1
362     echo "${GOOD_PROG}" >> $FILE1
363     echo "${GOOD_PROG}" > $FILE2
364
365     if [ "${FAIL_VERSION}" == "${yes}" ]; then
366         if [ "${EXP}" == "${EXP_PASS}" ]; then
367             NAME=${KIND1}-${KIND2}-${KIND3}-${EXP_FAIL}
368         else
369             NAME=${KIND1}-${KIND2}-${KIND3}-${EXP_XFAIL}
370         fi
371
372         FILE1=${NAME}-1.c
373         FILE2=${NAME}-2.c
374         rm -f $FILE1
375         touch $FILE1
376         cmd $KIND1 $FILE1
377         cmd $KIND2 $FILE1
378         cmd $KIND3 $FILE1
379         # dg-do with an xfail list is only used as the first command.
380         case $KIND1 in
381         dox*)   echo "${BADR_PROG}" >> $FILE1;;
382         *)      echo "${BADC_PROG}" >> $FILE1;;
383         esac
384         echo "${GOOD_PROG}" > $FILE2
385     fi
386 }
387
388 # Generate tests using one dg- command.  Generate a test for each variant
389 # of KIND.
390 one_all() {
391     KIND=$1
392     EXP=$2
393     FAIL_VERSION=$3
394
395     get_list $KIND
396     for k in $KIND_LIST; do
397         one $k $EXP $FAIL_VERSION
398     done
399 }
400
401 # Generate tests using two dg- commands.  For each KIND, generate
402 # a test for each of its variants.
403 two_all() {
404     KIND1=$1
405     KIND2=$2
406     EXP=$3
407     FAIL_VERSION=$4
408
409     get_list $KIND1
410     KIND_LIST1="$KIND_LIST"
411     get_list $KIND2
412     KIND_LIST2="$KIND_LIST"
413     for k1 in $KIND_LIST1; do
414         for k2 in $KIND_LIST2; do
415             two $k1 $k2 $EXP $FAIL_VERSION
416         done
417     done
418 }
419
420 # Generate tests using three dg- commands.  For each KIND, generate
421 # a test for each of its variants.
422 three_all() {
423     KIND1=$1
424     KIND2=$2
425     KIND3=$3
426     EXP=$4
427     FAIL_VERSION=$5
428
429     get_list $KIND1
430     KIND_LIST1="$KIND_LIST"
431     get_list $KIND2
432     KIND_LIST2="$KIND_LIST"
433     get_list $KIND3
434     KIND_LIST3="$KIND_LIST"
435     for k1 in $KIND_LIST1; do
436         for k2 in $KIND_LIST2; do
437             for k3 in $KIND_LIST3; do
438                 three $k1 $k2 $k3 $EXP $FAIL_VERSION
439             done
440         done
441     done
442 }
443
444 one_all saxp $EXP_PASS no
445 one_all saxf $EXP_XPASS no
446 one_all sats $EXP_PASS no
447 one_all satn $EXP_SKIP no
448 one_all dots $EXP_PASS yes
449 one_all dotn $EXP_SKIP no
450 one_all doxp $EXP_PASS yes
451 one_all doxf $EXP_XPASS yes
452 one_all sifs $EXP_PASS yes
453 one_all sifn $EXP_SKIP no
454 one_all xifp $EXP_PASS yes
455 one_all xiff $EXP_XPASS yes
456 one_all reqs $EXP_PASS yes
457 one_all reqn $EXP_SKIP no
458
459 two_all dots xifp $EXP_PASS yes
460 two_all dots xiff $EXP_XPASS yes
461 two_all dots sifs $EXP_PASS yes
462 two_all dots sifn $EXP_SKIP no
463 two_all dotn xifp $EXP_SKIP no
464 two_all dotn sifs $EXP_SKIP no
465 two_all dotn sifn $EXP_SKIP no
466 two_all dotn xiff $EXP_SKIP no
467 two_all dots reqs $EXP_PASS yes
468 two_all dots reqn $EXP_SKIP no
469 two_all dotn reqs $EXP_SKIP no
470 two_all dotn reqn $EXP_SKIP no
471
472 two_all doxp xifp $EXP_PASS yes
473 two_all doxp xiff $EXP_PASS yes   # dg-xfail-if applies to compile, not run
474 two_all doxp sifs $EXP_PASS yes
475 two_all doxp sifn $EXP_SKIP no
476 two_all doxf xifp $EXP_XPASS yes
477 two_all doxf xiff $EXP_XPASS yes
478 two_all doxf sifs $EXP_XPASS yes
479 two_all doxf sifn $EXP_SKIP no
480
481 two_all doxp reqs $EXP_PASS yes
482 two_all doxp reqn $EXP_SKIP no
483 two_all doxf reqs $EXP_XPASS yes
484 two_all doxf reqn $EXP_SKIP no
485
486 two_all reqs xifp $EXP_PASS yes
487 two_all reqs xiff $EXP_XPASS yes
488 two_all reqs sifs $EXP_PASS yes
489 two_all reqs sifn $EXP_SKIP no
490 two_all reqn xifp $EXP_SKIP no
491 two_all reqn xiff $EXP_SKIP no
492 two_all reqn sifs $EXP_SKIP no
493 two_all reqn sifn $EXP_SKIP no
494
495 two_all xifp reqs $EXP_PASS yes
496 two_all xiff reqs $EXP_XPASS yes
497 two_all sifs reqs $EXP_PASS yes
498 two_all sifn reqs $EXP_SKIP no
499 two_all xifp reqn $EXP_SKIP no
500 two_all xiff reqn $EXP_SKIP no
501 two_all sifs reqn $EXP_SKIP no
502 two_all sifn reqn $EXP_SKIP no
503
504 three_all dots reqs xifp $EXP_PASS yes
505 three_all dots reqs xiff $EXP_XPASS yes
506 three_all dots reqs sifs $EXP_PASS yes
507 three_all dots reqs sifn $EXP_SKIP no
508 three_all dots reqn xifp $EXP_SKIP no
509 three_all dots reqn xiff $EXP_SKIP no
510 three_all dots reqn sifs $EXP_SKIP no
511 three_all dots reqn sifn $EXP_SKIP no
512 three_all dotn reqs xifp $EXP_SKIP no
513 three_all dotn reqs xiff $EXP_SKIP no
514 three_all dotn reqs sifs $EXP_SKIP no
515 three_all dotn reqs sifn $EXP_SKIP no
516 three_all dotn reqn xifp $EXP_SKIP no
517 three_all dotn reqn xiff $EXP_SKIP no
518 three_all dotn reqn sifs $EXP_SKIP no
519 three_all dotn reqn sifn $EXP_SKIP no
520 #
521 three_all dots xifp reqs $EXP_PASS yes
522 three_all dots xiff reqs $EXP_XPASS yes
523 three_all dots sifs reqs $EXP_PASS yes
524 three_all dots sifn reqs $EXP_SKIP no
525 three_all dots xifp reqn $EXP_SKIP no
526 three_all dots xiff reqn $EXP_SKIP no
527 three_all dots sifs reqn $EXP_SKIP no
528 three_all dots sifn reqn $EXP_SKIP no
529 three_all dotn xifp reqs $EXP_SKIP no
530 three_all dotn xiff reqs $EXP_SKIP no
531 three_all dotn sifs reqs $EXP_SKIP no
532 three_all dotn sifn reqs $EXP_SKIP no
533 three_all dotn xifp reqn $EXP_SKIP no
534 three_all dotn xiff reqn $EXP_SKIP no
535 three_all dotn sifs reqn $EXP_SKIP no
536 three_all dotn sifn reqn $EXP_SKIP no
537
538 three_all doxp reqs xifp $EXP_PASS yes
539 three_all doxp reqs xiff $EXP_PASS yes # dg-xfail-if applies to compile, not run
540 three_all doxp reqs sifs $EXP_PASS yes
541 three_all doxp reqs sifn $EXP_SKIP no
542 three_all doxp reqn xifp $EXP_SKIP no
543 three_all doxp reqn xiff $EXP_SKIP no
544 three_all doxp reqn sifs $EXP_SKIP no
545 three_all doxp reqn sifn $EXP_SKIP no
546 three_all doxf reqs xifp $EXP_XPASS yes
547 three_all doxf reqs xiff $EXP_XPASS yes
548 three_all doxf reqs sifs $EXP_XPASS yes
549 three_all doxf reqs sifn $EXP_SKIP no
550 three_all doxf reqn xifp $EXP_SKIP no
551 three_all doxf reqn xiff $EXP_SKIP no
552 three_all doxf reqn sifs $EXP_SKIP no
553 three_all doxf reqn sifn $EXP_SKIP no
554
555 three_all doxp xifp reqs $EXP_PASS yes
556 three_all doxp xiff reqs $EXP_PASS yes # dg-xfail-if applies to compile, not run
557 three_all doxp sifs reqs $EXP_PASS yes
558 three_all doxp sifn reqs $EXP_SKIP no
559 three_all doxp xifp reqn $EXP_SKIP no
560 three_all doxp xiff reqn $EXP_SKIP no
561 three_all doxp sifs reqn $EXP_SKIP no
562 three_all doxp sifn reqn $EXP_SKIP no
563 three_all doxf xifp reqs $EXP_XPASS yes
564 three_all doxf xiff reqs $EXP_XPASS yes
565 three_all doxf sifs reqs $EXP_XPASS yes
566 three_all doxf sifn reqs $EXP_SKIP no
567 three_all doxf xifp reqn $EXP_SKIP no
568 three_all doxf xiff reqn $EXP_SKIP no
569 three_all doxf sifs reqn $EXP_SKIP no
570 three_all doxf sifn reqn $EXP_SKIP no