1#   Copyright (C) 2000, 2002, 2003, 2005, 2006, 2007
2#   Free Software Foundation, Inc.
3
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.
13#
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/>.
17
18# Various utilities for scanning tree dump output, used by gcc-dg.exp and
19# g++-dg.exp.
20
21load_lib scandump.exp
22
23# Utility for scanning compiler result, invoked via dg-final.
24# Call pass if pattern is present, otherwise fail.
25#
26# Argument 0 is the regexp to match
27# Argument 1 is the name of the dumped tree pass
28# Argument 2 handles expected failures and the like
29proc scan-tree-dump { args } {
30
31    if { [llength $args] < 2 } {
32	error "scan-tree-dump: too few arguments"
33	return
34    }
35    if { [llength $args] > 3 } {
36	error "scan-tree-dump: too many arguments"
37	return
38    }
39    if { [llength $args] >= 3 } {
40	scan-dump "tree" [lindex $args 0] "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]" [lindex $args 2]
41    } else {
42	scan-dump "tree" [lindex $args 0] "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]"
43    }
44}
45
46# Call pass if pattern is present given number of times, otherwise fail.
47# Argument 0 is the regexp to match
48# Argument 1 is number of times the regexp must be found
49# Argument 2 is the name of the dumped tree pass
50# Argument 3 handles expected failures and the like
51proc scan-tree-dump-times { args } {
52
53    if { [llength $args] < 3 } {
54	error "scan-tree-dump: too few arguments"
55	return
56    }
57    if { [llength $args] > 4 } {
58	error "scan-tree-dump: too many arguments"
59	return
60    }
61    if { [llength $args] >= 4 } {
62	scan-dump-times "tree" [lindex $args 0] [lindex $args 1] \
63			"\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 2]" [lindex $args 3]
64    } else {
65	scan-dump-times "tree" [lindex $args 0] [lindex $args 1] \
66			"\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 2]"
67    }
68}
69
70# Call pass if pattern is not present, otherwise fail.
71#
72# Argument 0 is the regexp to match
73# Argument 1 is the name of the dumped tree pass
74# Argument 2 handles expected failures and the like
75proc scan-tree-dump-not { args } {
76
77    if { [llength $args] < 2 } {
78	error "scan-tree-dump-not: too few arguments"
79	return
80    }
81    if { [llength $args] > 3 } {
82	error "scan-tree-dump-not: too many arguments"
83	return
84    }
85    if { [llength $args] >= 3 } {
86	scan-dump-not "tree" [lindex $args 0] \
87		      "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]" [lindex $args 2]
88    } else {
89	scan-dump-not "tree" [lindex $args 0] \
90		      "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]"
91    }
92}
93
94# Utility for scanning demangled compiler result, invoked via dg-final.
95# Call pass if pattern is present, otherwise fail.
96#
97# Argument 0 is the regexp to match
98# Argument 1 is the name of the dumped tree pass
99# Argument 2 handles expected failures and the like
100proc scan-tree-dump-dem { args } {
101
102    if { [llength $args] < 2 } {
103	error "scan-tree-dump-dem: too few arguments"
104	return
105    }
106    if { [llength $args] > 3 } {
107	error "scan-tree-dump-dem: too many arguments"
108	return
109    }
110    if { [llength $args] >= 3 } {
111	scan-dump-dem "tree" [lindex $args 0] \
112		      "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]" [lindex $args 2]
113    } else {
114	scan-dump-dem "tree" [lindex $args 0] \
115		      "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]"
116    }
117}
118
119# Call pass if demangled pattern is not present, otherwise fail.
120#
121# Argument 0 is the regexp to match
122# Argument 1 is the name of the dumped tree pass
123# Argument 2 handles expected failures and the like
124proc scan-tree-dump-dem-not { args } {
125
126    if { [llength $args] < 2 } {
127	error "scan-tree-dump-dem-not: too few arguments"
128	return
129    }
130    if { [llength $args] > 3 } {
131	error "scan-tree-dump-dem-not: too many arguments"
132	return
133    }
134    if { [llength $args] >= 3 } {
135	scan-dump-dem-not "tree" [lindex $args 0] \
136			  "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]" \
137			  [lindex $args 2]
138    } else {
139	scan-dump-dem-not "tree" [lindex $args 0] \
140			  "\[0-9\]\[0-9\]\[0-9\]t.[lindex $args 1]"
141    }
142}
143