Bug Summary

File:src/usr.bin/m4/obj/parser.c
Warning:line 438, column 18
Use of zero-allocated memory

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple amd64-unknown-openbsd7.0 -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name parser.c -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 1 -pic-is-pie -mframe-pointer=all -relaxed-aliasing -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -target-feature +retpoline-indirect-calls -target-feature +retpoline-indirect-branches -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/usr/src/usr.bin/m4/obj -resource-dir /usr/local/lib/clang/13.0.0 -D EXTENDED -I . -internal-isystem /usr/local/lib/clang/13.0.0/include -internal-externc-isystem /usr/include -O2 -fdebug-compilation-dir=/usr/src/usr.bin/m4/obj -ferror-limit 19 -fwrapv -D_RET_PROTECTOR -ret-protector -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free -fno-builtin-strdup -fno-builtin-strndup -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /home/ben/Projects/vmm/scan-build/2022-01-12-194120-40624-1 -x c parser.c
1#include <stdlib.h>
2#include <string.h>
3#define YYBYACC1 1
4#define YYMAJOR1 1
5#define YYMINOR9 9
6#define YYLEXyylex() yylex()
7#define YYEMPTY-1 -1
8#define yyclearin(yychar=(-1)) (yychar=(YYEMPTY-1))
9#define yyerrok(yyerrflag=0) (yyerrflag=0)
10#define YYRECOVERING()(yyerrflag!=0) (yyerrflag!=0)
11#define YYPREFIX"yy" "yy"
12#line 2 "/usr/src/usr.bin/m4/parser.y"
13/* $OpenBSD: parser.y,v 1.7 2012/04/12 17:00:11 espie Exp $ */
14/*
15 * Copyright (c) 2004 Marc Espie <espie@cvs.openbsd.org>
16 *
17 * Permission to use, copy, modify, and distribute this software for any
18 * purpose with or without fee is hereby granted, provided that the above
19 * copyright notice and this permission notice appear in all copies.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
22 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
23 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
24 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
25 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
26 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
27 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
28 */
29#include <math.h>
30#include <stdint.h>
31#define YYSTYPEint32_t int32_t
32extern int32_t end_result;
33extern int yylex(void);
34extern int yyerror(const char *);
35#line 36 "parser.c"
36#define NUMBER257 257
37#define ERROR258 258
38#define LOR259 259
39#define LAND260 260
40#define EQ261 261
41#define NE262 262
42#define LE263 263
43#define GE264 264
44#define LSHIFT265 265
45#define RSHIFT266 266
46#define EXPONENT267 267
47#define UMINUS268 268
48#define UPLUS269 269
49#define YYERRCODE256 256
50const short yylhs[] =
51 { -1,
52 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
53 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
54 1, 1, 1, 1, 1, 1,
55};
56const short yylen[] =
57 { 2,
58 1, 3, 3, 3, 3, 3, 3, 3, 3, 3,
59 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
60 3, 2, 2, 2, 2, 1,
61};
62const short yydefred[] =
63 { 0,
64 26, 0, 0, 0, 0, 0, 0, 0, 23, 22,
65 24, 25, 0, 0, 0, 0, 0, 0, 0, 0,
66 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
68 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
69 0, 0,
70};
71const short yydgoto[] =
72 { 7,
73 8,
74};
75const short yysindex[] =
76 { 95,
77 0, 95, 95, 95, 95, 95, 0, 397, 0, 0,
78 0, 0, 383, 95, 95, 95, 95, 95, 95, 95,
79 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
80 95, 95, 0, 428, 471, 482, 185, 437, 493, 493,
81 -10, -10, -10, -10, -23, -23, -34, -34, -267, -267,
82 -267, -267,};
83const short yyrindex[] =
84 { 0,
85 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
86 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
88 0, 0, 0, 11, 62, 23, 101, 308, 201, 243,
89 124, 130, 144, 155, 79, 116, 51, 67, 1, 12,
90 28, 40,};
91const short yygindex[] =
92 { 0,
93 582,
94};
95#define YYTABLESIZE760 760
96const short yytable[] =
97 { 32,
98 5, 1, 31, 0, 0, 0, 0, 29, 0, 0,
99 20, 6, 30, 31, 0, 0, 0, 0, 29, 27,
100 0, 28, 18, 30, 0, 0, 31, 7, 0, 0,
101 0, 29, 27, 0, 28, 0, 30, 5, 5, 4,
102 0, 5, 5, 5, 0, 5, 0, 5, 6, 6,
103 2, 20, 6, 6, 6, 0, 6, 0, 6, 0,
104 5, 19, 5, 18, 7, 7, 3, 0, 7, 7,
105 7, 6, 7, 6, 7, 0, 4, 4, 8, 0,
106 4, 4, 4, 0, 4, 0, 4, 7, 2, 7,
107 0, 2, 0, 2, 5, 2, 0, 0, 0, 4,
108 17, 4, 19, 0, 3, 6, 0, 3, 0, 3,
109 2, 3, 2, 0, 0, 9, 8, 0, 0, 8,
110 0, 7, 0, 10, 5, 0, 3, 4, 3, 12,
111 0, 0, 0, 4, 6, 6, 0, 2, 8, 3,
112 8, 17, 0, 11, 2, 0, 18, 0, 0, 0,
113 0, 7, 0, 9, 13, 0, 9, 0, 0, 0,
114 3, 10, 0, 4, 10, 0, 0, 12, 0, 0,
115 12, 0, 8, 0, 2, 9, 0, 9, 0, 0,
116 0, 11, 0, 10, 11, 10, 0, 0, 0, 12,
117 3, 12, 13, 0, 17, 13, 0, 0, 0, 0,
118 14, 0, 8, 11, 0, 11, 0, 0, 0, 9,
119 0, 0, 0, 0, 13, 0, 13, 10, 0, 0,
120 5, 31, 18, 12, 17, 0, 29, 27, 0, 28,
121 0, 30, 32, 0, 0, 0, 0, 11, 14, 9,
122 0, 14, 15, 32, 21, 0, 23, 10, 13, 0,
123 0, 0, 0, 12, 25, 26, 32, 0, 0, 5,
124 5, 5, 5, 5, 5, 5, 5, 11, 0, 20,
125 6, 6, 6, 6, 6, 6, 6, 6, 13, 0,
126 15, 18, 18, 15, 0, 0, 7, 7, 7, 7,
127 7, 7, 7, 7, 14, 0, 0, 0, 4, 4,
128 4, 4, 4, 4, 4, 4, 0, 16, 0, 2,
129 2, 2, 2, 2, 2, 2, 2, 0, 0, 0,
130 19, 19, 0, 0, 14, 3, 3, 3, 3, 3,
131 3, 3, 3, 0, 0, 0, 15, 8, 8, 8,
132 8, 8, 8, 8, 8, 16, 0, 0, 16, 0,
133 0, 1, 0, 0, 0, 0, 0, 0, 0, 17,
134 17, 0, 0, 0, 0, 0, 15, 0, 0, 0,
135 0, 0, 0, 0, 9, 9, 9, 9, 9, 9,
136 9, 9, 10, 10, 10, 10, 10, 10, 12, 12,
137 12, 12, 12, 12, 0, 0, 0, 0, 0, 0,
138 0, 16, 11, 11, 11, 11, 11, 11, 0, 0,
139 0, 0, 0, 13, 13, 13, 13, 13, 13, 31,
140 18, 0, 0, 33, 29, 27, 0, 28, 0, 30,
141 0, 16, 0, 31, 18, 0, 0, 0, 29, 27,
142 0, 28, 21, 30, 23, 19, 20, 22, 24, 25,
143 26, 32, 0, 0, 0, 0, 21, 0, 23, 14,
144 14, 14, 14, 0, 31, 18, 0, 0, 0, 29,
145 27, 0, 28, 31, 30, 0, 17, 0, 29, 27,
146 0, 28, 0, 30, 0, 0, 0, 21, 0, 23,
147 17, 0, 0, 0, 0, 0, 21, 0, 23, 0,
148 0, 15, 15, 15, 15, 0, 16, 31, 18, 0,
149 0, 0, 29, 27, 0, 28, 0, 30, 31, 18,
150 16, 17, 0, 29, 27, 0, 28, 0, 30, 31,
151 21, 0, 23, 0, 29, 27, 0, 28, 0, 30,
152 0, 21, 0, 23, 0, 0, 0, 0, 0, 0,
153 0, 16, 21, 0, 23, 0, 0, 0, 0, 0,
154 0, 0, 0, 0, 17, 0, 16, 16, 0, 0,
155 0, 0, 0, 0, 0, 17, 0, 0, 0, 0,
156 0, 0, 0, 9, 10, 11, 12, 13, 0, 0,
157 0, 0, 0, 0, 16, 34, 35, 36, 37, 38,
158 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
159 49, 50, 51, 52, 0, 0, 0, 0, 0, 0,
160 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
162 0, 14, 15, 19, 20, 22, 24, 25, 26, 32,
163 0, 0, 0, 0, 0, 14, 15, 19, 20, 22,
164 24, 25, 26, 32, 0, 0, 0, 0, 0, 0,
165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
166 0, 0, 0, 0, 0, 0, 0, 15, 19, 20,
167 22, 24, 25, 26, 32, 0, 0, 19, 20, 22,
168 24, 25, 26, 32, 0, 0, 0, 0, 0, 0,
169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
170 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
171 0, 19, 20, 22, 24, 25, 26, 32, 0, 0,
172 0, 0, 19, 20, 22, 24, 25, 26, 32, 0,
173 0, 0, 0, 0, 0, 22, 24, 25, 26, 32,
174};
175const short yycheck[] =
176 { 267,
177 0, 0, 37, -1, -1, -1, -1, 42, -1, -1,
178 0, 0, 47, 37, -1, -1, -1, -1, 42, 43,
179 -1, 45, 0, 47, -1, -1, 37, 0, -1, -1,
180 -1, 42, 43, -1, 45, -1, 47, 37, 38, 0,
181 -1, 41, 42, 43, -1, 45, -1, 47, 37, 38,
182 0, 41, 41, 42, 43, -1, 45, -1, 47, -1,
183 60, 0, 62, 41, 37, 38, 0, -1, 41, 42,
184 43, 60, 45, 62, 47, -1, 37, 38, 0, -1,
185 41, 42, 43, -1, 45, -1, 47, 60, 38, 62,
186 -1, 41, -1, 43, 94, 45, -1, -1, -1, 60,
187 0, 62, 41, -1, 38, 94, -1, 41, -1, 43,
188 60, 45, 62, -1, -1, 0, 38, -1, -1, 41,
189 -1, 94, -1, 0, 124, -1, 60, 33, 62, 0,
190 -1, -1, -1, 94, 40, 124, -1, 43, 60, 45,
191 62, 41, -1, 0, 94, -1, 124, -1, -1, -1,
192 -1, 124, -1, 38, 0, -1, 41, -1, -1, -1,
193 94, 38, -1, 124, 41, -1, -1, 38, -1, -1,
194 41, -1, 94, -1, 124, 60, -1, 62, -1, -1,
195 -1, 38, -1, 60, 41, 62, -1, -1, -1, 60,
196 124, 62, 38, -1, 94, 41, -1, -1, -1, -1,
197 0, -1, 124, 60, -1, 62, -1, -1, -1, 94,
198 -1, -1, -1, -1, 60, -1, 62, 94, -1, -1,
199 126, 37, 38, 94, 124, -1, 42, 43, -1, 45,
200 -1, 47, 267, -1, -1, -1, -1, 94, 38, 124,
201 -1, 41, 0, 267, 60, -1, 62, 124, 94, -1,
202 -1, -1, -1, 124, 265, 266, 267, -1, -1, 259,
203 260, 261, 262, 263, 264, 265, 266, 124, -1, 259,
204 259, 260, 261, 262, 263, 264, 265, 266, 124, -1,
205 38, 259, 260, 41, -1, -1, 259, 260, 261, 262,
206 263, 264, 265, 266, 94, -1, -1, -1, 259, 260,
207 261, 262, 263, 264, 265, 266, -1, 0, -1, 259,
208 260, 261, 262, 263, 264, 265, 266, -1, -1, -1,
209 259, 260, -1, -1, 124, 259, 260, 261, 262, 263,
210 264, 265, 266, -1, -1, -1, 94, 259, 260, 261,
211 262, 263, 264, 265, 266, 38, -1, -1, 41, -1,
212 -1, 257, -1, -1, -1, -1, -1, -1, -1, 259,
213 260, -1, -1, -1, -1, -1, 124, -1, -1, -1,
214 -1, -1, -1, -1, 259, 260, 261, 262, 263, 264,
215 265, 266, 259, 260, 261, 262, 263, 264, 259, 260,
216 261, 262, 263, 264, -1, -1, -1, -1, -1, -1,
217 -1, 94, 259, 260, 261, 262, 263, 264, -1, -1,
218 -1, -1, -1, 259, 260, 261, 262, 263, 264, 37,
219 38, -1, -1, 41, 42, 43, -1, 45, -1, 47,
220 -1, 124, -1, 37, 38, -1, -1, -1, 42, 43,
221 -1, 45, 60, 47, 62, 261, 262, 263, 264, 265,
222 266, 267, -1, -1, -1, -1, 60, -1, 62, 259,
223 260, 261, 262, -1, 37, 38, -1, -1, -1, 42,
224 43, -1, 45, 37, 47, -1, 94, -1, 42, 43,
225 -1, 45, -1, 47, -1, -1, -1, 60, -1, 62,
226 94, -1, -1, -1, -1, -1, 60, -1, 62, -1,
227 -1, 259, 260, 261, 262, -1, 124, 37, 38, -1,
228 -1, -1, 42, 43, -1, 45, -1, 47, 37, 38,
229 124, 94, -1, 42, 43, -1, 45, -1, 47, 37,
230 60, -1, 62, -1, 42, 43, -1, 45, -1, 47,
231 -1, 60, -1, 62, -1, -1, -1, -1, -1, -1,
232 -1, 124, 60, -1, 62, -1, -1, -1, -1, -1,
233 -1, -1, -1, -1, 94, -1, 259, 260, -1, -1,
234 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1,
235 -1, -1, -1, 2, 3, 4, 5, 6, -1, -1,
236 -1, -1, -1, -1, 124, 14, 15, 16, 17, 18,
237 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
238 29, 30, 31, 32, -1, -1, -1, -1, -1, -1,
239 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
241 -1, 259, 260, 261, 262, 263, 264, 265, 266, 267,
242 -1, -1, -1, -1, -1, 259, 260, 261, 262, 263,
243 264, 265, 266, 267, -1, -1, -1, -1, -1, -1,
244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
245 -1, -1, -1, -1, -1, -1, -1, 260, 261, 262,
246 263, 264, 265, 266, 267, -1, -1, 261, 262, 263,
247 264, 265, 266, 267, -1, -1, -1, -1, -1, -1,
248 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
249 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
250 -1, 261, 262, 263, 264, 265, 266, 267, -1, -1,
251 -1, -1, 261, 262, 263, 264, 265, 266, 267, -1,
252 -1, -1, -1, -1, -1, 263, 264, 265, 266, 267,
253};
254#define YYFINAL7 7
255#ifndef YYDEBUG0
256#define YYDEBUG0 0
257#endif
258#define YYMAXTOKEN269 269
259#if YYDEBUG0
260const char * const yyname[] =
261 {
262"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
263"'!'",0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,
2640,0,0,0,0,"'<'",0,"'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2650,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'|'",0,
266"'~'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2690,0,0,0,0,0,0,0,0,0,0,0,0,"NUMBER","ERROR","LOR","LAND","EQ","NE","LE","GE",
270"LSHIFT","RSHIFT","EXPONENT","UMINUS","UPLUS",
271};
272const char * const yyrule[] =
273 {"$accept : top",
274"top : expr",
275"expr : expr '+' expr",
276"expr : expr '-' expr",
277"expr : expr EXPONENT expr",
278"expr : expr '*' expr",
279"expr : expr '/' expr",
280"expr : expr '%' expr",
281"expr : expr LSHIFT expr",
282"expr : expr RSHIFT expr",
283"expr : expr '<' expr",
284"expr : expr '>' expr",
285"expr : expr LE expr",
286"expr : expr GE expr",
287"expr : expr EQ expr",
288"expr : expr NE expr",
289"expr : expr '&' expr",
290"expr : expr '^' expr",
291"expr : expr '|' expr",
292"expr : expr LAND expr",
293"expr : expr LOR expr",
294"expr : '(' expr ')'",
295"expr : '-' expr",
296"expr : '+' expr",
297"expr : '!' expr",
298"expr : '~' expr",
299"expr : NUMBER",
300};
301#endif
302#ifndef YYSTYPEint32_t
303typedef int YYSTYPEint32_t;
304#endif
305#ifdef YYSTACKSIZE10000
306#undef YYMAXDEPTH10000
307#define YYMAXDEPTH10000 YYSTACKSIZE10000
308#else
309#ifdef YYMAXDEPTH10000
310#define YYSTACKSIZE10000 YYMAXDEPTH10000
311#else
312#define YYSTACKSIZE10000 10000
313#define YYMAXDEPTH10000 10000
314#endif
315#endif
316#define YYINITSTACKSIZE200 200
317/* LINTUSED */
318int yydebug;
319int yynerrs;
320int yyerrflag;
321int yychar;
322short *yyssp;
323YYSTYPEint32_t *yyvsp;
324YYSTYPEint32_t yyval;
325YYSTYPEint32_t yylval;
326short *yyss;
327short *yysslim;
328YYSTYPEint32_t *yyvs;
329unsigned int yystacksize;
330int yyparse(void);
331#line 83 "/usr/src/usr.bin/m4/parser.y"
332
333#line 326 "parser.c"
334/* allocate initial stack or double stack size, up to YYMAXDEPTH */
335static int yygrowstack(void)
336{
337 unsigned int newsize;
338 long sslen;
339 short *newss;
340 YYSTYPEint32_t *newvs;
341
342 if ((newsize = yystacksize) == 0)
13
Assuming the condition is false
14
Taking false branch
343 newsize = YYINITSTACKSIZE200;
344 else if (newsize >= YYMAXDEPTH10000)
15
Assuming 'newsize' is < YYMAXDEPTH
16
Taking false branch
345 return -1;
346 else if ((newsize *= 2) > YYMAXDEPTH10000)
17
Assuming the condition is false
18
Taking false branch
347 newsize = YYMAXDEPTH10000;
348 sslen = yyssp - yyss;
349#ifdef SIZE_MAX0xffffffffffffffffUL
350#define YY_SIZE_MAX0xffffffffffffffffUL SIZE_MAX0xffffffffffffffffUL
351#else
352#define YY_SIZE_MAX0xffffffffffffffffUL 0xffffffffU
353#endif
354 if (newsize && YY_SIZE_MAX0xffffffffffffffffUL / newsize < sizeof *newss)
19
Assuming 'newsize' is 0
355 goto bail;
356 newss = (short *)realloc(yyss, newsize * sizeof *newss);
357 if (newss == NULL((void *)0))
20
Assuming 'newss' is not equal to NULL
21
Taking false branch
358 goto bail;
359 yyss = newss;
360 yyssp = newss + sslen;
361 if (newsize
21.1
'newsize' is 0
&& YY_SIZE_MAX0xffffffffffffffffUL / newsize < sizeof *newvs)
362 goto bail;
363 newvs = (YYSTYPEint32_t *)realloc(yyvs, newsize * sizeof *newvs);
364 if (newvs == NULL((void *)0))
22
Assuming 'newvs' is not equal to NULL
23
Taking false branch
365 goto bail;
366 yyvs = newvs;
367 yyvsp = newvs + sslen;
368 yystacksize = newsize;
369 yysslim = yyss + newsize - 1;
370 return 0;
371bail:
372 if (yyss)
373 free(yyss);
374 if (yyvs)
375 free(yyvs);
376 yyss = yyssp = NULL((void *)0);
377 yyvs = yyvsp = NULL((void *)0);
378 yystacksize = 0;
379 return -1;
380}
381
382#define YYABORTgoto yyabort goto yyabort
383#define YYREJECTgoto yyabort goto yyabort
384#define YYACCEPTgoto yyaccept goto yyaccept
385#define YYERRORgoto yyerrlab goto yyerrlab
386int
387yyparse(void)
388{
389 int yym, yyn, yystate;
390#if YYDEBUG0
391 const char *yys;
392
393 if ((yys = getenv("YYDEBUG")))
394 {
395 yyn = *yys;
396 if (yyn >= '0' && yyn <= '9')
397 yydebug = yyn - '0';
398 }
399#endif /* YYDEBUG */
400
401 yynerrs = 0;
402 yyerrflag = 0;
403 yychar = (-1);
404
405 if (yyss == NULL((void *)0) && yygrowstack()) goto yyoverflow;
1
Assuming 'yyss' is not equal to NULL
406 yyssp = yyss;
407 yyvsp = yyvs;
408 *yyssp = yystate = 0;
409
410yyloop:
411 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
2
Taking false branch
412 if (yychar
2.1
'yychar' is < 0
< 0)
3
Taking true branch
413 {
414 if ((yychar = yylex()) < 0) yychar = 0;
4
Assuming the condition is false
5
Taking false branch
415#if YYDEBUG0
416 if (yydebug)
417 {
418 yys = 0;
419 if (yychar <= YYMAXTOKEN269) yys = yyname[yychar];
420 if (!yys) yys = "illegal-symbol";
421 printf("%sdebug: state %d, reading %d (%s)\n",
422 YYPREFIX"yy", yystate, yychar, yys);
423 }
424#endif
425 }
426 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
6
Assuming 'yyn' is not equal to 0
7
Assuming the condition is true
10
Taking true branch
427 yyn <= YYTABLESIZE760 && yycheck[yyn] == yychar)
8
Assuming 'yyn' is <= YYTABLESIZE
9
Assuming the condition is true
428 {
429#if YYDEBUG0
430 if (yydebug)
431 printf("%sdebug: state %d, shifting to state %d\n",
432 YYPREFIX"yy", yystate, yytable[yyn]);
433#endif
434 if (yyssp >= yysslim && yygrowstack())
11
Assuming 'yyssp' is >= 'yysslim'
12
Calling 'yygrowstack'
24
Returning from 'yygrowstack'
25
Taking false branch
435 {
436 goto yyoverflow;
437 }
438 *++yyssp = yystate = yytable[yyn];
26
Use of zero-allocated memory
439 *++yyvsp = yylval;
440 yychar = (-1);
441 if (yyerrflag > 0) --yyerrflag;
442 goto yyloop;
443 }
444 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
445 yyn <= YYTABLESIZE760 && yycheck[yyn] == yychar)
446 {
447 yyn = yytable[yyn];
448 goto yyreduce;
449 }
450 if (yyerrflag) goto yyinrecovery;
451#if defined(__GNUC__4)
452 goto yynewerror;
453#endif
454yynewerror:
455 yyerror("syntax error");
456#if defined(__GNUC__4)
457 goto yyerrlab;
458#endif
459yyerrlab:
460 ++yynerrs;
461yyinrecovery:
462 if (yyerrflag < 3)
463 {
464 yyerrflag = 3;
465 for (;;)
466 {
467 if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE256) >= 0 &&
468 yyn <= YYTABLESIZE760 && yycheck[yyn] == YYERRCODE256)
469 {
470#if YYDEBUG0
471 if (yydebug)
472 printf("%sdebug: state %d, error recovery shifting\
473 to state %d\n", YYPREFIX"yy", *yyssp, yytable[yyn]);
474#endif
475 if (yyssp >= yysslim && yygrowstack())
476 {
477 goto yyoverflow;
478 }
479 *++yyssp = yystate = yytable[yyn];
480 *++yyvsp = yylval;
481 goto yyloop;
482 }
483 else
484 {
485#if YYDEBUG0
486 if (yydebug)
487 printf("%sdebug: error recovery discarding state %d\n",
488 YYPREFIX"yy", *yyssp);
489#endif
490 if (yyssp <= yyss) goto yyabort;
491 --yyssp;
492 --yyvsp;
493 }
494 }
495 }
496 else
497 {
498 if (yychar == 0) goto yyabort;
499#if YYDEBUG0
500 if (yydebug)
501 {
502 yys = 0;
503 if (yychar <= YYMAXTOKEN269) yys = yyname[yychar];
504 if (!yys) yys = "illegal-symbol";
505 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
506 YYPREFIX"yy", yystate, yychar, yys);
507 }
508#endif
509 yychar = (-1);
510 goto yyloop;
511 }
512yyreduce:
513#if YYDEBUG0
514 if (yydebug)
515 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
516 YYPREFIX"yy", yystate, yyn, yyrule[yyn]);
517#endif
518 yym = yylen[yyn];
519 if (yym)
520 yyval = yyvsp[1-yym];
521 else
522 memset(&yyval, 0, sizeof yyval);
523 switch (yyn)
524 {
525case 1:
526#line 42 "/usr/src/usr.bin/m4/parser.y"
527{ end_result = yyvsp[0]; }
528break;
529case 2:
530#line 44 "/usr/src/usr.bin/m4/parser.y"
531{ yyval = yyvsp[-2] + yyvsp[0]; }
532break;
533case 3:
534#line 45 "/usr/src/usr.bin/m4/parser.y"
535{ yyval = yyvsp[-2] - yyvsp[0]; }
536break;
537case 4:
538#line 46 "/usr/src/usr.bin/m4/parser.y"
539{ yyval = pow(yyvsp[-2], yyvsp[0]); }
540break;
541case 5:
542#line 47 "/usr/src/usr.bin/m4/parser.y"
543{ yyval = yyvsp[-2] * yyvsp[0]; }
544break;
545case 6:
546#line 48 "/usr/src/usr.bin/m4/parser.y"
547{
548 if (yyvsp[0] == 0) {
549 yyerror("division by zero");
550 exit(1);
551 }
552 yyval = yyvsp[-2] / yyvsp[0];
553 }
554break;
555case 7:
556#line 55 "/usr/src/usr.bin/m4/parser.y"
557{
558 if (yyvsp[0] == 0) {
559 yyerror("modulo zero");
560 exit(1);
561 }
562 yyval = yyvsp[-2] % yyvsp[0];
563 }
564break;
565case 8:
566#line 62 "/usr/src/usr.bin/m4/parser.y"
567{ yyval = yyvsp[-2] << yyvsp[0]; }
568break;
569case 9:
570#line 63 "/usr/src/usr.bin/m4/parser.y"
571{ yyval = yyvsp[-2] >> yyvsp[0]; }
572break;
573case 10:
574#line 64 "/usr/src/usr.bin/m4/parser.y"
575{ yyval = yyvsp[-2] < yyvsp[0]; }
576break;
577case 11:
578#line 65 "/usr/src/usr.bin/m4/parser.y"
579{ yyval = yyvsp[-2] > yyvsp[0]; }
580break;
581case 12:
582#line 66 "/usr/src/usr.bin/m4/parser.y"
583{ yyval = yyvsp[-2] <= yyvsp[0]; }
584break;
585case 13:
586#line 67 "/usr/src/usr.bin/m4/parser.y"
587{ yyval = yyvsp[-2] >= yyvsp[0]; }
588break;
589case 14:
590#line 68 "/usr/src/usr.bin/m4/parser.y"
591{ yyval = yyvsp[-2] == yyvsp[0]; }
592break;
593case 15:
594#line 69 "/usr/src/usr.bin/m4/parser.y"
595{ yyval = yyvsp[-2] != yyvsp[0]; }
596break;
597case 16:
598#line 70 "/usr/src/usr.bin/m4/parser.y"
599{ yyval = yyvsp[-2] & yyvsp[0]; }
600break;
601case 17:
602#line 71 "/usr/src/usr.bin/m4/parser.y"
603{ yyval = yyvsp[-2] ^ yyvsp[0]; }
604break;
605case 18:
606#line 72 "/usr/src/usr.bin/m4/parser.y"
607{ yyval = yyvsp[-2] | yyvsp[0]; }
608break;
609case 19:
610#line 73 "/usr/src/usr.bin/m4/parser.y"
611{ yyval = yyvsp[-2] && yyvsp[0]; }
612break;
613case 20:
614#line 74 "/usr/src/usr.bin/m4/parser.y"
615{ yyval = yyvsp[-2] || yyvsp[0]; }
616break;
617case 21:
618#line 75 "/usr/src/usr.bin/m4/parser.y"
619{ yyval = yyvsp[-1]; }
620break;
621case 22:
622#line 76 "/usr/src/usr.bin/m4/parser.y"
623{ yyval = -yyvsp[0]; }
624break;
625case 23:
626#line 77 "/usr/src/usr.bin/m4/parser.y"
627{ yyval = yyvsp[0]; }
628break;
629case 24:
630#line 78 "/usr/src/usr.bin/m4/parser.y"
631{ yyval = !yyvsp[0]; }
632break;
633case 25:
634#line 79 "/usr/src/usr.bin/m4/parser.y"
635{ yyval = ~yyvsp[0]; }
636break;
637#line 630 "parser.c"
638 }
639 yyssp -= yym;
640 yystate = *yyssp;
641 yyvsp -= yym;
642 yym = yylhs[yyn];
643 if (yystate == 0 && yym == 0)
644 {
645#if YYDEBUG0
646 if (yydebug)
647 printf("%sdebug: after reduction, shifting from state 0 to\
648 state %d\n", YYPREFIX"yy", YYFINAL7);
649#endif
650 yystate = YYFINAL7;
651 *++yyssp = YYFINAL7;
652 *++yyvsp = yyval;
653 if (yychar < 0)
654 {
655 if ((yychar = yylex()) < 0) yychar = 0;
656#if YYDEBUG0
657 if (yydebug)
658 {
659 yys = 0;
660 if (yychar <= YYMAXTOKEN269) yys = yyname[yychar];
661 if (!yys) yys = "illegal-symbol";
662 printf("%sdebug: state %d, reading %d (%s)\n",
663 YYPREFIX"yy", YYFINAL7, yychar, yys);
664 }
665#endif
666 }
667 if (yychar == 0) goto yyaccept;
668 goto yyloop;
669 }
670 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
671 yyn <= YYTABLESIZE760 && yycheck[yyn] == yystate)
672 yystate = yytable[yyn];
673 else
674 yystate = yydgoto[yym];
675#if YYDEBUG0
676 if (yydebug)
677 printf("%sdebug: after reduction, shifting from state %d \
678to state %d\n", YYPREFIX"yy", *yyssp, yystate);
679#endif
680 if (yyssp >= yysslim && yygrowstack())
681 {
682 goto yyoverflow;
683 }
684 *++yyssp = yystate;
685 *++yyvsp = yyval;
686 goto yyloop;
687yyoverflow:
688 yyerror("yacc stack overflow");
689yyabort:
690 if (yyss)
691 free(yyss);
692 if (yyvs)
693 free(yyvs);
694 yyss = yyssp = NULL((void *)0);
695 yyvs = yyvsp = NULL((void *)0);
696 yystacksize = 0;
697 return (1);
698yyaccept:
699 if (yyss)
700 free(yyss);
701 if (yyvs)
702 free(yyvs);
703 yyss = yyssp = NULL((void *)0);
704 yyvs = yyvsp = NULL((void *)0);
705 yystacksize = 0;
706 return (0);
707}