blob: ee1c5b62dbf11a51bc84c6659c18319e508355ac [file] [log] [blame]
Reid Spencered951ea2007-05-19 07:22:10 +00001/* A Bison parser, made by GNU Bison 2.1. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002
Reid Spencered951ea2007-05-19 07:22:10 +00003/* Skeleton parser for Yacc-like parsing with Bison,
4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005
Reid Spencered951ea2007-05-19 07:22:10 +00006 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
Anton Korobeynikov178a3522007-01-12 19:22:51 +000010
Reid Spencered951ea2007-05-19 07:22:10 +000011 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA. */
20
21/* As a special exception, when this file is copied by Bison into a
22 Bison output file, you may use that output file without restriction.
23 This special exception was added by the Free Software Foundation
24 in version 1.24 of Bison. */
25
26/* Written by Richard Stallman by simplifying the original so called
27 ``semantic'' parser. */
28
29/* All symbols defined below should begin with yy or YY, to avoid
30 infringing on user name space. This should be done even for local
31 variables, as they might otherwise be expanded by user macros.
32 There are some unavoidable exceptions within include files to
33 define necessary library symbols; they are noted "INFRINGES ON
34 USER NAME SPACE" below. */
35
36/* Identify Bison output. */
37#define YYBISON 1
38
39/* Bison version. */
40#define YYBISON_VERSION "2.1"
41
42/* Skeleton name. */
43#define YYSKELETON_NAME "yacc.c"
44
45/* Pure parsers. */
46#define YYPURE 0
47
48/* Using locations. */
49#define YYLSP_NEEDED 0
50
51/* Substitute the variable and function names. */
Reid Spencer68a24bd2005-08-27 18:50:39 +000052#define yyparse llvmAsmparse
Reid Spencered951ea2007-05-19 07:22:10 +000053#define yylex llvmAsmlex
Reid Spencer68a24bd2005-08-27 18:50:39 +000054#define yyerror llvmAsmerror
Reid Spencered951ea2007-05-19 07:22:10 +000055#define yylval llvmAsmlval
56#define yychar llvmAsmchar
Reid Spencer68a24bd2005-08-27 18:50:39 +000057#define yydebug llvmAsmdebug
58#define yynerrs llvmAsmnerrs
59
Reid Spencered951ea2007-05-19 07:22:10 +000060
61/* Tokens. */
62#ifndef YYTOKENTYPE
63# define YYTOKENTYPE
64 /* Put the tokens into the symbol table, so that GDB and other debuggers
65 know about them. */
66 enum yytokentype {
67 ESINT64VAL = 258,
68 EUINT64VAL = 259,
69 ESAPINTVAL = 260,
70 EUAPINTVAL = 261,
71 LOCALVAL_ID = 262,
72 GLOBALVAL_ID = 263,
73 FPVAL = 264,
74 VOID = 265,
75 INTTYPE = 266,
76 FLOAT = 267,
77 DOUBLE = 268,
78 LABEL = 269,
79 TYPE = 270,
80 LOCALVAR = 271,
81 GLOBALVAR = 272,
82 LABELSTR = 273,
83 STRINGCONSTANT = 274,
84 ATSTRINGCONSTANT = 275,
85 PCTSTRINGCONSTANT = 276,
86 ZEROINITIALIZER = 277,
87 TRUETOK = 278,
88 FALSETOK = 279,
89 BEGINTOK = 280,
90 ENDTOK = 281,
91 DECLARE = 282,
92 DEFINE = 283,
93 GLOBAL = 284,
94 CONSTANT = 285,
95 SECTION = 286,
96 ALIAS = 287,
97 VOLATILE = 288,
98 THREAD_LOCAL = 289,
99 TO = 290,
100 DOTDOTDOT = 291,
101 NULL_TOK = 292,
102 UNDEF = 293,
103 INTERNAL = 294,
104 LINKONCE = 295,
105 WEAK = 296,
106 APPENDING = 297,
107 DLLIMPORT = 298,
108 DLLEXPORT = 299,
109 EXTERN_WEAK = 300,
110 OPAQUE = 301,
111 EXTERNAL = 302,
112 TARGET = 303,
113 TRIPLE = 304,
114 ALIGN = 305,
115 DEPLIBS = 306,
116 CALL = 307,
117 TAIL = 308,
118 ASM_TOK = 309,
119 MODULE = 310,
120 SIDEEFFECT = 311,
121 CC_TOK = 312,
122 CCC_TOK = 313,
123 FASTCC_TOK = 314,
124 COLDCC_TOK = 315,
125 X86_STDCALLCC_TOK = 316,
126 X86_FASTCALLCC_TOK = 317,
127 DATALAYOUT = 318,
128 RET = 319,
129 BR = 320,
130 SWITCH = 321,
131 INVOKE = 322,
132 UNWIND = 323,
133 UNREACHABLE = 324,
134 ADD = 325,
135 SUB = 326,
136 MUL = 327,
137 UDIV = 328,
138 SDIV = 329,
139 FDIV = 330,
140 UREM = 331,
141 SREM = 332,
142 FREM = 333,
143 AND = 334,
144 OR = 335,
145 XOR = 336,
146 SHL = 337,
147 LSHR = 338,
148 ASHR = 339,
149 ICMP = 340,
150 FCMP = 341,
151 EQ = 342,
152 NE = 343,
153 SLT = 344,
154 SGT = 345,
155 SLE = 346,
156 SGE = 347,
157 ULT = 348,
158 UGT = 349,
159 ULE = 350,
160 UGE = 351,
161 OEQ = 352,
162 ONE = 353,
163 OLT = 354,
164 OGT = 355,
165 OLE = 356,
166 OGE = 357,
167 ORD = 358,
168 UNO = 359,
169 UEQ = 360,
170 UNE = 361,
171 MALLOC = 362,
172 ALLOCA = 363,
173 FREE = 364,
174 LOAD = 365,
175 STORE = 366,
176 GETELEMENTPTR = 367,
177 TRUNC = 368,
178 ZEXT = 369,
179 SEXT = 370,
180 FPTRUNC = 371,
181 FPEXT = 372,
182 BITCAST = 373,
183 UITOFP = 374,
184 SITOFP = 375,
185 FPTOUI = 376,
186 FPTOSI = 377,
187 INTTOPTR = 378,
188 PTRTOINT = 379,
189 PHI_TOK = 380,
190 SELECT = 381,
191 VAARG = 382,
192 EXTRACTELEMENT = 383,
193 INSERTELEMENT = 384,
194 SHUFFLEVECTOR = 385,
195 NORETURN = 386,
196 INREG = 387,
197 SRET = 388,
198 NOUNWIND = 389,
199 DEFAULT = 390,
200 HIDDEN = 391,
201 PROTECTED = 392
202 };
203#endif
204/* Tokens. */
205#define ESINT64VAL 258
206#define EUINT64VAL 259
207#define ESAPINTVAL 260
208#define EUAPINTVAL 261
209#define LOCALVAL_ID 262
210#define GLOBALVAL_ID 263
211#define FPVAL 264
212#define VOID 265
213#define INTTYPE 266
214#define FLOAT 267
215#define DOUBLE 268
216#define LABEL 269
217#define TYPE 270
218#define LOCALVAR 271
219#define GLOBALVAR 272
220#define LABELSTR 273
221#define STRINGCONSTANT 274
222#define ATSTRINGCONSTANT 275
223#define PCTSTRINGCONSTANT 276
224#define ZEROINITIALIZER 277
225#define TRUETOK 278
226#define FALSETOK 279
227#define BEGINTOK 280
228#define ENDTOK 281
229#define DECLARE 282
230#define DEFINE 283
231#define GLOBAL 284
232#define CONSTANT 285
233#define SECTION 286
234#define ALIAS 287
235#define VOLATILE 288
236#define THREAD_LOCAL 289
237#define TO 290
238#define DOTDOTDOT 291
239#define NULL_TOK 292
240#define UNDEF 293
241#define INTERNAL 294
242#define LINKONCE 295
243#define WEAK 296
244#define APPENDING 297
245#define DLLIMPORT 298
246#define DLLEXPORT 299
247#define EXTERN_WEAK 300
248#define OPAQUE 301
249#define EXTERNAL 302
250#define TARGET 303
251#define TRIPLE 304
252#define ALIGN 305
253#define DEPLIBS 306
254#define CALL 307
255#define TAIL 308
256#define ASM_TOK 309
257#define MODULE 310
258#define SIDEEFFECT 311
259#define CC_TOK 312
260#define CCC_TOK 313
261#define FASTCC_TOK 314
262#define COLDCC_TOK 315
263#define X86_STDCALLCC_TOK 316
264#define X86_FASTCALLCC_TOK 317
265#define DATALAYOUT 318
266#define RET 319
267#define BR 320
268#define SWITCH 321
269#define INVOKE 322
270#define UNWIND 323
271#define UNREACHABLE 324
272#define ADD 325
273#define SUB 326
274#define MUL 327
275#define UDIV 328
276#define SDIV 329
277#define FDIV 330
278#define UREM 331
279#define SREM 332
280#define FREM 333
281#define AND 334
282#define OR 335
283#define XOR 336
284#define SHL 337
285#define LSHR 338
286#define ASHR 339
287#define ICMP 340
288#define FCMP 341
289#define EQ 342
290#define NE 343
291#define SLT 344
292#define SGT 345
293#define SLE 346
294#define SGE 347
295#define ULT 348
296#define UGT 349
297#define ULE 350
298#define UGE 351
299#define OEQ 352
300#define ONE 353
301#define OLT 354
302#define OGT 355
303#define OLE 356
304#define OGE 357
305#define ORD 358
306#define UNO 359
307#define UEQ 360
308#define UNE 361
309#define MALLOC 362
310#define ALLOCA 363
311#define FREE 364
312#define LOAD 365
313#define STORE 366
314#define GETELEMENTPTR 367
315#define TRUNC 368
316#define ZEXT 369
317#define SEXT 370
318#define FPTRUNC 371
319#define FPEXT 372
320#define BITCAST 373
321#define UITOFP 374
322#define SITOFP 375
323#define FPTOUI 376
324#define FPTOSI 377
325#define INTTOPTR 378
326#define PTRTOINT 379
327#define PHI_TOK 380
328#define SELECT 381
329#define VAARG 382
330#define EXTRACTELEMENT 383
331#define INSERTELEMENT 384
332#define SHUFFLEVECTOR 385
333#define NORETURN 386
334#define INREG 387
335#define SRET 388
336#define NOUNWIND 389
337#define DEFAULT 390
338#define HIDDEN 391
339#define PROTECTED 392
340
341
342
343
344/* Copy the first part of user declarations. */
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000345#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000346
347#include "ParserInternals.h"
348#include "llvm/CallingConv.h"
Chris Lattner0e9c3762006-01-25 22:27:16 +0000349#include "llvm/InlineAsm.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000350#include "llvm/Instructions.h"
351#include "llvm/Module.h"
Reid Spenceref9b9a72007-02-05 20:47:22 +0000352#include "llvm/ValueSymbolTable.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000353#include "llvm/Support/GetElementPtrTypeIterator.h"
Reid Spencer14310612006-12-31 05:40:51 +0000354#include "llvm/Support/CommandLine.h"
Chris Lattnerf7469af2007-01-31 04:44:08 +0000355#include "llvm/ADT/SmallVector.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000356#include "llvm/ADT/STLExtras.h"
Chris Lattner0019bbe2005-11-06 06:46:53 +0000357#include "llvm/Support/MathExtras.h"
Reid Spencer481169e2006-12-01 00:33:46 +0000358#include "llvm/Support/Streams.h"
Reid Spencer68a24bd2005-08-27 18:50:39 +0000359#include <algorithm>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000360#include <list>
Chris Lattner8adde282007-02-11 21:40:10 +0000361#include <map>
Reid Spencer68a24bd2005-08-27 18:50:39 +0000362#include <utility>
Reid Spencer14310612006-12-31 05:40:51 +0000363#ifndef NDEBUG
364#define YYDEBUG 1
365#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000366
Reid Spencere4f47592006-08-18 17:32:55 +0000367// The following is a gross hack. In order to rid the libAsmParser library of
368// exceptions, we have to have a way of getting the yyparse function to go into
369// an error situation. So, whenever we want an error to occur, the GenerateError
370// function (see bottom of file) sets TriggerError. Then, at the end of each
371// production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
372// (a goto) to put YACC in error state. Furthermore, several calls to
373// GenerateError are made from inside productions and they must simulate the
374// previous exception behavior by exiting the production immediately. We have
375// replaced these with the GEN_ERROR macro which calls GeneratError and then
376// immediately invokes YYERROR. This would be so much cleaner if it was a
377// recursive descent parser.
Reid Spencer61c83e02006-08-18 08:43:06 +0000378static bool TriggerError = false;
Reid Spencerf63697d2006-10-09 17:36:59 +0000379#define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
Reid Spencer61c83e02006-08-18 08:43:06 +0000380#define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
381
Reid Spencer68a24bd2005-08-27 18:50:39 +0000382int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
383int yylex(); // declaration" of xxx warnings.
384int yyparse();
385
386namespace llvm {
387 std::string CurFilename;
Reid Spencer14310612006-12-31 05:40:51 +0000388#if YYDEBUG
389static cl::opt<bool>
390Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
391 cl::Hidden, cl::init(false));
392#endif
Reid Spencer68a24bd2005-08-27 18:50:39 +0000393}
394using namespace llvm;
395
396static Module *ParserResult;
397
398// DEBUG_UPREFS - Define this symbol if you want to enable debugging output
399// relating to upreferences in the input stream.
400//
401//#define DEBUG_UPREFS 1
402#ifdef DEBUG_UPREFS
Bill Wendlinge8156192006-12-07 01:30:32 +0000403#define UR_OUT(X) cerr << X
Reid Spencer68a24bd2005-08-27 18:50:39 +0000404#else
405#define UR_OUT(X)
406#endif
407
408#define YYERROR_VERBOSE 1
409
Chris Lattnerb475c422005-11-12 18:22:38 +0000410static GlobalVariable *CurGV;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000411
412
413// This contains info used when building the body of a function. It is
414// destroyed when the function is completed.
415//
416typedef std::vector<Value *> ValueList; // Numbered defs
Reid Spencer14310612006-12-31 05:40:51 +0000417
Reid Spencer68a24bd2005-08-27 18:50:39 +0000418static void
Reid Spencer93c40032007-03-19 18:40:50 +0000419ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers=0);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000420
421static struct PerModuleInfo {
422 Module *CurrentModule;
Reid Spencer93c40032007-03-19 18:40:50 +0000423 ValueList Values; // Module level numbered definitions
424 ValueList LateResolveValues;
Reid Spencer861d9d62006-11-28 07:29:44 +0000425 std::vector<PATypeHolder> Types;
426 std::map<ValID, PATypeHolder> LateResolveTypes;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000427
428 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
Chris Lattner0ad19702006-06-21 16:53:00 +0000429 /// how they were referenced and on which line of the input they came from so
Reid Spencer68a24bd2005-08-27 18:50:39 +0000430 /// that we can resolve them later and print error messages as appropriate.
431 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
432
433 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
434 // references to global values. Global values may be referenced before they
435 // are defined, and if so, the temporary object that they represent is held
436 // here. This is used for forward references of GlobalValues.
437 //
438 typedef std::map<std::pair<const PointerType *,
439 ValID>, GlobalValue*> GlobalRefsType;
440 GlobalRefsType GlobalRefs;
441
442 void ModuleDone() {
443 // If we could not resolve some functions at function compilation time
444 // (calls to functions before they are defined), resolve them now... Types
445 // are resolved when the constant pool has been completely parsed.
446 //
447 ResolveDefinitions(LateResolveValues);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000448 if (TriggerError)
449 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000450
451 // Check to make sure that all global value forward references have been
452 // resolved!
453 //
454 if (!GlobalRefs.empty()) {
455 std::string UndefinedReferences = "Unresolved global references exist:\n";
456
457 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
458 I != E; ++I) {
459 UndefinedReferences += " " + I->first.first->getDescription() + " " +
460 I->first.second.getName() + "\n";
461 }
Reid Spencer61c83e02006-08-18 08:43:06 +0000462 GenerateError(UndefinedReferences);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000463 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000464 }
465
466 Values.clear(); // Clear out function local definitions
467 Types.clear();
468 CurrentModule = 0;
469 }
470
Reid Spencer68a24bd2005-08-27 18:50:39 +0000471 // GetForwardRefForGlobal - Check to see if there is a forward reference
472 // for this global. If so, remove it from the GlobalRefs map and return it.
473 // If not, just return null.
474 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
475 // Check to see if there is a forward reference to this global variable...
476 // if there is, eliminate it and patch the reference to use the new def'n.
477 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
478 GlobalValue *Ret = 0;
479 if (I != GlobalRefs.end()) {
480 Ret = I->second;
481 GlobalRefs.erase(I);
482 }
483 return Ret;
484 }
Reid Spencer8c8a2dc2007-01-02 21:54:12 +0000485
486 bool TypeIsUnresolved(PATypeHolder* PATy) {
487 // If it isn't abstract, its resolved
488 const Type* Ty = PATy->get();
489 if (!Ty->isAbstract())
490 return false;
491 // Traverse the type looking for abstract types. If it isn't abstract then
492 // we don't need to traverse that leg of the type.
493 std::vector<const Type*> WorkList, SeenList;
494 WorkList.push_back(Ty);
495 while (!WorkList.empty()) {
496 const Type* Ty = WorkList.back();
497 SeenList.push_back(Ty);
498 WorkList.pop_back();
499 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
500 // Check to see if this is an unresolved type
501 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
502 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
503 for ( ; I != E; ++I) {
504 if (I->second.get() == OpTy)
505 return true;
506 }
507 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
508 const Type* TheTy = SeqTy->getElementType();
509 if (TheTy->isAbstract() && TheTy != Ty) {
510 std::vector<const Type*>::iterator I = SeenList.begin(),
511 E = SeenList.end();
512 for ( ; I != E; ++I)
513 if (*I == TheTy)
514 break;
515 if (I == E)
516 WorkList.push_back(TheTy);
517 }
518 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
519 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
520 const Type* TheTy = StrTy->getElementType(i);
521 if (TheTy->isAbstract() && TheTy != Ty) {
522 std::vector<const Type*>::iterator I = SeenList.begin(),
523 E = SeenList.end();
524 for ( ; I != E; ++I)
525 if (*I == TheTy)
526 break;
527 if (I == E)
528 WorkList.push_back(TheTy);
529 }
530 }
531 }
532 }
533 return false;
534 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000535} CurModule;
536
537static struct PerFunctionInfo {
538 Function *CurrentFunction; // Pointer to current function being created
539
Reid Spencer93c40032007-03-19 18:40:50 +0000540 ValueList Values; // Keep track of #'d definitions
541 unsigned NextValNum;
542 ValueList LateResolveValues;
Reid Spenceref9b9a72007-02-05 20:47:22 +0000543 bool isDeclare; // Is this function a forward declararation?
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000544 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000545 GlobalValue::VisibilityTypes Visibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000546
547 /// BBForwardRefs - When we see forward references to basic blocks, keep
548 /// track of them here.
Reid Spencer93c40032007-03-19 18:40:50 +0000549 std::map<ValID, BasicBlock*> BBForwardRefs;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000550
551 inline PerFunctionInfo() {
552 CurrentFunction = 0;
553 isDeclare = false;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000554 Linkage = GlobalValue::ExternalLinkage;
555 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000556 }
557
558 inline void FunctionStart(Function *M) {
559 CurrentFunction = M;
Reid Spencer93c40032007-03-19 18:40:50 +0000560 NextValNum = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000561 }
562
563 void FunctionDone() {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000564 // Any forward referenced blocks left?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000565 if (!BBForwardRefs.empty()) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000566 GenerateError("Undefined reference to label " +
Reid Spencer93c40032007-03-19 18:40:50 +0000567 BBForwardRefs.begin()->second->getName());
Reid Spencer5b7e7532006-09-28 19:28:24 +0000568 return;
569 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000570
571 // Resolve all forward references now.
572 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
573
574 Values.clear(); // Clear out function local definitions
Reid Spencer93c40032007-03-19 18:40:50 +0000575 BBForwardRefs.clear();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000576 CurrentFunction = 0;
577 isDeclare = false;
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +0000578 Linkage = GlobalValue::ExternalLinkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +0000579 Visibility = GlobalValue::DefaultVisibility;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000580 }
581} CurFun; // Info for the current function...
582
583static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
584
585
586//===----------------------------------------------------------------------===//
587// Code to handle definitions of all the types
588//===----------------------------------------------------------------------===//
589
Reid Spencer93c40032007-03-19 18:40:50 +0000590static void InsertValue(Value *V, ValueList &ValueTab = CurFun.Values) {
591 // Things that have names or are void typed don't get slot numbers
592 if (V->hasName() || (V->getType() == Type::VoidTy))
593 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000594
Reid Spencer93c40032007-03-19 18:40:50 +0000595 // In the case of function values, we have to allow for the forward reference
596 // of basic blocks, which are included in the numbering. Consequently, we keep
597 // track of the next insertion location with NextValNum. When a BB gets
598 // inserted, it could change the size of the CurFun.Values vector.
599 if (&ValueTab == &CurFun.Values) {
600 if (ValueTab.size() <= CurFun.NextValNum)
601 ValueTab.resize(CurFun.NextValNum+1);
602 ValueTab[CurFun.NextValNum++] = V;
603 return;
604 }
605 // For all other lists, its okay to just tack it on the back of the vector.
606 ValueTab.push_back(V);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000607}
608
609static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
610 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000611 case ValID::LocalID: // Is it a numbered definition?
Reid Spencer68a24bd2005-08-27 18:50:39 +0000612 // Module constants occupy the lowest numbered slots...
Reid Spencer41dff5e2007-01-26 08:05:27 +0000613 if (D.Num < CurModule.Types.size())
614 return CurModule.Types[D.Num];
Reid Spencer68a24bd2005-08-27 18:50:39 +0000615 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000616 case ValID::LocalName: // Is it a named definition?
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000617 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.getName())) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000618 D.destroy(); // Free old strdup'd memory...
619 return N;
620 }
621 break;
622 default:
Reid Spencerb5334b02007-02-05 10:18:06 +0000623 GenerateError("Internal parser error: Invalid symbol type reference");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000624 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000625 }
626
627 // If we reached here, we referenced either a symbol that we don't know about
628 // or an id number that hasn't been read yet. We may be referencing something
629 // forward, so just create an entry to be resolved later and get to it...
630 //
631 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
632
633
634 if (inFunctionScope()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000635 if (D.Type == ValID::LocalName) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000636 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000637 return 0;
638 } else {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000639 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
Reid Spencer5b7e7532006-09-28 19:28:24 +0000640 return 0;
641 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000642 }
643
Reid Spencer861d9d62006-11-28 07:29:44 +0000644 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000645 if (I != CurModule.LateResolveTypes.end())
Reid Spencer861d9d62006-11-28 07:29:44 +0000646 return I->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000647
Reid Spencer861d9d62006-11-28 07:29:44 +0000648 Type *Typ = OpaqueType::get();
649 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
650 return Typ;
Reid Spencera132e042006-12-03 05:46:11 +0000651 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000652
Reid Spencer93c40032007-03-19 18:40:50 +0000653// getExistingVal - Look up the value specified by the provided type and
Reid Spencer68a24bd2005-08-27 18:50:39 +0000654// the provided ValID. If the value exists and has already been defined, return
655// it. Otherwise return null.
656//
Reid Spencer93c40032007-03-19 18:40:50 +0000657static Value *getExistingVal(const Type *Ty, const ValID &D) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000658 if (isa<FunctionType>(Ty)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000659 GenerateError("Functions are not values and "
Reid Spencer68a24bd2005-08-27 18:50:39 +0000660 "must be referenced as pointers");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000661 return 0;
662 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000663
664 switch (D.Type) {
Reid Spencer41dff5e2007-01-26 08:05:27 +0000665 case ValID::LocalID: { // Is it a numbered definition?
Reid Spencer41dff5e2007-01-26 08:05:27 +0000666 // Check that the number is within bounds.
Reid Spencer93c40032007-03-19 18:40:50 +0000667 if (D.Num >= CurFun.Values.size())
668 return 0;
669 Value *Result = CurFun.Values[D.Num];
670 if (Ty != Result->getType()) {
671 GenerateError("Numbered value (%" + utostr(D.Num) + ") of type '" +
672 Result->getType()->getDescription() + "' does not match "
673 "expected type, '" + Ty->getDescription() + "'");
674 return 0;
675 }
676 return Result;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000677 }
678 case ValID::GlobalID: { // Is it a numbered definition?
Reid Spencer93c40032007-03-19 18:40:50 +0000679 if (D.Num >= CurModule.Values.size())
Reid Spenceref9b9a72007-02-05 20:47:22 +0000680 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000681 Value *Result = CurModule.Values[D.Num];
682 if (Ty != Result->getType()) {
683 GenerateError("Numbered value (@" + utostr(D.Num) + ") of type '" +
684 Result->getType()->getDescription() + "' does not match "
685 "expected type, '" + Ty->getDescription() + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +0000686 return 0;
Reid Spencer93c40032007-03-19 18:40:50 +0000687 }
688 return Result;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000689 }
Reid Spencer41dff5e2007-01-26 08:05:27 +0000690
691 case ValID::LocalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000692 if (!inFunctionScope())
693 return 0;
694 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000695 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000696 if (N == 0)
697 return 0;
698 if (N->getType() != Ty)
699 return 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +0000700
701 D.destroy(); // Free old strdup'd memory...
702 return N;
703 }
704 case ValID::GlobalName: { // Is it a named definition?
Reid Spenceref9b9a72007-02-05 20:47:22 +0000705 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000706 Value *N = SymTab.lookup(D.getName());
Reid Spenceref9b9a72007-02-05 20:47:22 +0000707 if (N == 0)
708 return 0;
709 if (N->getType() != Ty)
710 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000711
712 D.destroy(); // Free old strdup'd memory...
713 return N;
714 }
715
716 // Check to make sure that "Ty" is an integral type, and that our
717 // value will fit into the specified type...
718 case ValID::ConstSIntVal: // Is it a constant pool reference??
Reid Spencerb83eb642006-10-20 07:07:24 +0000719 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000720 GenerateError("Signed integral constant '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +0000721 itostr(D.ConstPool64) + "' is invalid for type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +0000722 Ty->getDescription() + "'");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000723 return 0;
724 }
Reid Spencer49d273e2007-03-19 20:40:51 +0000725 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000726
727 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
Reid Spencerb83eb642006-10-20 07:07:24 +0000728 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
729 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000730 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
Reid Spencerb5334b02007-02-05 10:18:06 +0000731 "' is invalid or out of range");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000732 return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000733 } else { // This is really a signed reference. Transmogrify.
Reid Spencer49d273e2007-03-19 20:40:51 +0000734 return ConstantInt::get(Ty, D.ConstPool64, true);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000735 }
736 } else {
Reid Spencerb83eb642006-10-20 07:07:24 +0000737 return ConstantInt::get(Ty, D.UConstPool64);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000738 }
739
740 case ValID::ConstFPVal: // Is it a floating point const pool reference?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000741 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000742 GenerateError("FP constant invalid for type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000743 return 0;
744 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000745 return ConstantFP::get(Ty, D.ConstPoolFP);
746
747 case ValID::ConstNullVal: // Is it a null value?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000748 if (!isa<PointerType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000749 GenerateError("Cannot create a a non pointer null");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000750 return 0;
751 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000752 return ConstantPointerNull::get(cast<PointerType>(Ty));
753
754 case ValID::ConstUndefVal: // Is it an undef value?
755 return UndefValue::get(Ty);
756
Chris Lattner7aa61892005-12-21 17:53:23 +0000757 case ValID::ConstZeroVal: // Is it a zero value?
758 return Constant::getNullValue(Ty);
759
Reid Spencer68a24bd2005-08-27 18:50:39 +0000760 case ValID::ConstantVal: // Fully resolved constant?
Reid Spencer5b7e7532006-09-28 19:28:24 +0000761 if (D.ConstantValue->getType() != Ty) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000762 GenerateError("Constant expression type different from required type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000763 return 0;
764 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000765 return D.ConstantValue;
766
Chris Lattner0e9c3762006-01-25 22:27:16 +0000767 case ValID::InlineAsmVal: { // Inline asm expression
768 const PointerType *PTy = dyn_cast<PointerType>(Ty);
769 const FunctionType *FTy =
770 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000771 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000772 GenerateError("Invalid type for asm constraint string");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000773 return 0;
774 }
Chris Lattner0e9c3762006-01-25 22:27:16 +0000775 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
776 D.IAD->HasSideEffects);
777 D.destroy(); // Free InlineAsmDescriptor.
778 return IA;
779 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000780 default:
Reid Spencera9720f52007-02-05 17:04:00 +0000781 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000782 return 0;
783 } // End of switch
784
Reid Spencera9720f52007-02-05 17:04:00 +0000785 assert(0 && "Unhandled case!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000786 return 0;
787}
788
Reid Spencer93c40032007-03-19 18:40:50 +0000789// getVal - This function is identical to getExistingVal, except that if a
Reid Spencer68a24bd2005-08-27 18:50:39 +0000790// value is not already defined, it "improvises" by creating a placeholder var
791// that looks and acts just like the requested variable. When the value is
792// defined later, all uses of the placeholder variable are replaced with the
793// real thing.
794//
795static Value *getVal(const Type *Ty, const ValID &ID) {
Reid Spencer5b7e7532006-09-28 19:28:24 +0000796 if (Ty == Type::LabelTy) {
Reid Spencer61c83e02006-08-18 08:43:06 +0000797 GenerateError("Cannot use a basic block here");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000798 return 0;
799 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000800
801 // See if the value has already been defined.
Reid Spencer93c40032007-03-19 18:40:50 +0000802 Value *V = getExistingVal(Ty, ID);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000803 if (V) return V;
Reid Spencer5b7e7532006-09-28 19:28:24 +0000804 if (TriggerError) return 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000805
Reid Spencer5b7e7532006-09-28 19:28:24 +0000806 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +0000807 GenerateError("Invalid use of a composite type");
Reid Spencer5b7e7532006-09-28 19:28:24 +0000808 return 0;
809 }
Reid Spencer68a24bd2005-08-27 18:50:39 +0000810
811 // If we reached here, we referenced either a symbol that we don't know about
812 // or an id number that hasn't been read yet. We may be referencing something
813 // forward, so just create an entry to be resolved later and get to it...
814 //
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000815 switch (ID.Type) {
816 case ValID::GlobalName:
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000817 case ValID::GlobalID: {
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000818 const PointerType *PTy = dyn_cast<PointerType>(Ty);
819 if (!PTy) {
820 GenerateError("Invalid type for reference to global" );
821 return 0;
822 }
823 const Type* ElTy = PTy->getElementType();
824 if (const FunctionType *FTy = dyn_cast<FunctionType>(ElTy))
825 V = new Function(FTy, GlobalValue::ExternalLinkage);
826 else
827 V = new GlobalVariable(ElTy, false, GlobalValue::ExternalLinkage);
828 break;
Reid Spencer9c9b63a2007-04-28 16:07:31 +0000829 }
Anton Korobeynikov38e09802007-04-28 13:48:45 +0000830 default:
831 V = new Argument(Ty);
832 }
833
Reid Spencer68a24bd2005-08-27 18:50:39 +0000834 // Remember where this forward reference came from. FIXME, shouldn't we try
835 // to recycle these things??
836 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
837 llvmAsmlineno)));
838
839 if (inFunctionScope())
840 InsertValue(V, CurFun.LateResolveValues);
841 else
842 InsertValue(V, CurModule.LateResolveValues);
843 return V;
844}
845
Reid Spencer93c40032007-03-19 18:40:50 +0000846/// defineBBVal - This is a definition of a new basic block with the specified
847/// identifier which must be the same as CurFun.NextValNum, if its numeric.
848static BasicBlock *defineBBVal(const ValID &ID) {
Reid Spencera9720f52007-02-05 17:04:00 +0000849 assert(inFunctionScope() && "Can't get basic block at global scope!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000850
Reid Spencer68a24bd2005-08-27 18:50:39 +0000851 BasicBlock *BB = 0;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000852
Reid Spencer93c40032007-03-19 18:40:50 +0000853 // First, see if this was forward referenced
Reid Spencer68a24bd2005-08-27 18:50:39 +0000854
Reid Spencer93c40032007-03-19 18:40:50 +0000855 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
856 if (BBI != CurFun.BBForwardRefs.end()) {
857 BB = BBI->second;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000858 // The forward declaration could have been inserted anywhere in the
859 // function: insert it into the correct place now.
860 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
861 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
Reid Spencer93c40032007-03-19 18:40:50 +0000862
Reid Spencer66728ef2007-03-20 01:13:36 +0000863 // We're about to erase the entry, save the key so we can clean it up.
864 ValID Tmp = BBI->first;
865
Reid Spencer93c40032007-03-19 18:40:50 +0000866 // Erase the forward ref from the map as its no longer "forward"
867 CurFun.BBForwardRefs.erase(ID);
868
Reid Spencer66728ef2007-03-20 01:13:36 +0000869 // The key has been removed from the map but so we don't want to leave
870 // strdup'd memory around so destroy it too.
871 Tmp.destroy();
872
Reid Spencer93c40032007-03-19 18:40:50 +0000873 // If its a numbered definition, bump the number and set the BB value.
874 if (ID.Type == ValID::LocalID) {
875 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
876 InsertValue(BB);
877 }
878
879 ID.destroy();
880 return BB;
881 }
882
883 // We haven't seen this BB before and its first mention is a definition.
884 // Just create it and return it.
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000885 std::string Name (ID.Type == ValID::LocalName ? ID.getName() : "");
Reid Spencer93c40032007-03-19 18:40:50 +0000886 BB = new BasicBlock(Name, CurFun.CurrentFunction);
887 if (ID.Type == ValID::LocalID) {
888 assert(ID.Num == CurFun.NextValNum && "Invalid new block number");
889 InsertValue(BB);
Reid Spencer68a24bd2005-08-27 18:50:39 +0000890 }
Reid Spencer93c40032007-03-19 18:40:50 +0000891
892 ID.destroy(); // Free strdup'd memory
893 return BB;
894}
895
896/// getBBVal - get an existing BB value or create a forward reference for it.
897///
898static BasicBlock *getBBVal(const ValID &ID) {
899 assert(inFunctionScope() && "Can't get basic block at global scope!");
900
901 BasicBlock *BB = 0;
902
903 std::map<ValID, BasicBlock*>::iterator BBI = CurFun.BBForwardRefs.find(ID);
904 if (BBI != CurFun.BBForwardRefs.end()) {
905 BB = BBI->second;
906 } if (ID.Type == ValID::LocalName) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000907 std::string Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000908 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
909 if (N)
910 if (N->getType()->getTypeID() == Type::LabelTyID)
911 BB = cast<BasicBlock>(N);
912 else
913 GenerateError("Reference to label '" + Name + "' is actually of type '"+
914 N->getType()->getDescription() + "'");
915 } else if (ID.Type == ValID::LocalID) {
916 if (ID.Num < CurFun.NextValNum && ID.Num < CurFun.Values.size()) {
917 if (CurFun.Values[ID.Num]->getType()->getTypeID() == Type::LabelTyID)
918 BB = cast<BasicBlock>(CurFun.Values[ID.Num]);
919 else
920 GenerateError("Reference to label '%" + utostr(ID.Num) +
921 "' is actually of type '"+
922 CurFun.Values[ID.Num]->getType()->getDescription() + "'");
923 }
924 } else {
925 GenerateError("Illegal label reference " + ID.getName());
926 return 0;
927 }
928
929 // If its already been defined, return it now.
930 if (BB) {
931 ID.destroy(); // Free strdup'd memory.
932 return BB;
933 }
934
935 // Otherwise, this block has not been seen before, create it.
936 std::string Name;
937 if (ID.Type == ValID::LocalName)
Reid Spencer0a8a16b2007-05-22 18:52:55 +0000938 Name = ID.getName();
Reid Spencer93c40032007-03-19 18:40:50 +0000939 BB = new BasicBlock(Name, CurFun.CurrentFunction);
940
941 // Insert it in the forward refs map.
942 CurFun.BBForwardRefs[ID] = BB;
943
Reid Spencer68a24bd2005-08-27 18:50:39 +0000944 return BB;
945}
946
947
948//===----------------------------------------------------------------------===//
949// Code to handle forward references in instructions
950//===----------------------------------------------------------------------===//
951//
952// This code handles the late binding needed with statements that reference
953// values not defined yet... for example, a forward branch, or the PHI node for
954// a loop body.
955//
956// This keeps a table (CurFun.LateResolveValues) of all such forward references
957// and back patchs after we are done.
958//
959
960// ResolveDefinitions - If we could not resolve some defs at parsing
961// time (forward branches, phi functions for loops, etc...) resolve the
962// defs now...
963//
964static void
Reid Spencer93c40032007-03-19 18:40:50 +0000965ResolveDefinitions(ValueList &LateResolvers, ValueList *FutureLateResolvers) {
Reid Spencer68a24bd2005-08-27 18:50:39 +0000966 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
Reid Spencer93c40032007-03-19 18:40:50 +0000967 while (!LateResolvers.empty()) {
968 Value *V = LateResolvers.back();
969 LateResolvers.pop_back();
Reid Spencer68a24bd2005-08-27 18:50:39 +0000970
Reid Spencer93c40032007-03-19 18:40:50 +0000971 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
972 CurModule.PlaceHolderInfo.find(V);
973 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
Reid Spencer68a24bd2005-08-27 18:50:39 +0000974
Reid Spencer93c40032007-03-19 18:40:50 +0000975 ValID &DID = PHI->second.first;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000976
Reid Spencer93c40032007-03-19 18:40:50 +0000977 Value *TheRealValue = getExistingVal(V->getType(), DID);
978 if (TriggerError)
979 return;
980 if (TheRealValue) {
981 V->replaceAllUsesWith(TheRealValue);
982 delete V;
983 CurModule.PlaceHolderInfo.erase(PHI);
984 } else if (FutureLateResolvers) {
985 // Functions have their unresolved items forwarded to the module late
986 // resolver table
987 InsertValue(V, *FutureLateResolvers);
988 } else {
989 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
990 GenerateError("Reference to an invalid definition: '" +DID.getName()+
991 "' of type '" + V->getType()->getDescription() + "'",
992 PHI->second.second);
Reid Spencer5b7e7532006-09-28 19:28:24 +0000993 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +0000994 } else {
Reid Spencer93c40032007-03-19 18:40:50 +0000995 GenerateError("Reference to an invalid definition: #" +
996 itostr(DID.Num) + " of type '" +
997 V->getType()->getDescription() + "'",
998 PHI->second.second);
999 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001000 }
1001 }
1002 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001003 LateResolvers.clear();
1004}
1005
1006// ResolveTypeTo - A brand new type was just declared. This means that (if
1007// name is not null) things referencing Name can be resolved. Otherwise, things
1008// refering to the number can be resolved. Do this now.
1009//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001010static void ResolveTypeTo(std::string *Name, const Type *ToTy) {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001011 ValID D;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001012 if (Name)
1013 D = ValID::createLocalName(*Name);
1014 else
1015 D = ValID::createLocalID(CurModule.Types.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001016
Reid Spencer861d9d62006-11-28 07:29:44 +00001017 std::map<ValID, PATypeHolder>::iterator I =
Reid Spencer68a24bd2005-08-27 18:50:39 +00001018 CurModule.LateResolveTypes.find(D);
1019 if (I != CurModule.LateResolveTypes.end()) {
Reid Spencer861d9d62006-11-28 07:29:44 +00001020 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001021 CurModule.LateResolveTypes.erase(I);
1022 }
1023}
1024
1025// setValueName - Set the specified value to the name given. The name may be
1026// null potentially, in which case this is a noop. The string passed in is
1027// assumed to be a malloc'd string buffer, and is free'd by this function.
1028//
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001029static void setValueName(Value *V, std::string *NameStr) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001030 if (!NameStr) return;
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001031 std::string Name(*NameStr); // Copy string
1032 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001033
Reid Spencer41dff5e2007-01-26 08:05:27 +00001034 if (V->getType() == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001035 GenerateError("Can't assign name '" + Name+"' to value with void type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001036 return;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001037 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00001038
Reid Spencera9720f52007-02-05 17:04:00 +00001039 assert(inFunctionScope() && "Must be in function scope!");
Reid Spenceref9b9a72007-02-05 20:47:22 +00001040 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
1041 if (ST.lookup(Name)) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00001042 GenerateError("Redefinition of value '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001043 V->getType()->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00001044 return;
1045 }
1046
1047 // Set the name.
1048 V->setName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001049}
1050
1051/// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
1052/// this is a declaration, otherwise it is a definition.
Chris Lattnerb475c422005-11-12 18:22:38 +00001053static GlobalVariable *
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001054ParseGlobalVariable(std::string *NameStr,
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001055 GlobalValue::LinkageTypes Linkage,
1056 GlobalValue::VisibilityTypes Visibility,
Chris Lattnerb475c422005-11-12 18:22:38 +00001057 bool isConstantGlobal, const Type *Ty,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001058 Constant *Initializer, bool IsThreadLocal) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00001059 if (isa<FunctionType>(Ty)) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001060 GenerateError("Cannot declare global vars of function type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001061 return 0;
1062 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001063
1064 const PointerType *PTy = PointerType::get(Ty);
1065
1066 std::string Name;
1067 if (NameStr) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001068 Name = *NameStr; // Copy string
1069 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001070 }
1071
1072 // See if this global value was forward referenced. If so, recycle the
1073 // object.
1074 ValID ID;
1075 if (!Name.empty()) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001076 ID = ValID::createGlobalName(Name);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001077 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00001078 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00001079 }
1080
1081 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
1082 // Move the global to the end of the list, from whereever it was
1083 // previously inserted.
1084 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
1085 CurModule.CurrentModule->getGlobalList().remove(GV);
1086 CurModule.CurrentModule->getGlobalList().push_back(GV);
1087 GV->setInitializer(Initializer);
1088 GV->setLinkage(Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001089 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001090 GV->setConstant(isConstantGlobal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001091 GV->setThreadLocal(IsThreadLocal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001092 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001093 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001094 }
1095
Reid Spenceref9b9a72007-02-05 20:47:22 +00001096 // If this global has a name
Reid Spencer68a24bd2005-08-27 18:50:39 +00001097 if (!Name.empty()) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00001098 // if the global we're parsing has an initializer (is a definition) and
1099 // has external linkage.
1100 if (Initializer && Linkage != GlobalValue::InternalLinkage)
1101 // If there is already a global with external linkage with this name
1102 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
1103 // If we allow this GVar to get created, it will be renamed in the
1104 // symbol table because it conflicts with an existing GVar. We can't
1105 // allow redefinition of GVars whose linking indicates that their name
1106 // must stay the same. Issue the error.
1107 GenerateError("Redefinition of global variable named '" + Name +
1108 "' of type '" + Ty->getDescription() + "'");
1109 return 0;
1110 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001111 }
1112
1113 // Otherwise there is no existing GV to use, create one now.
1114 GlobalVariable *GV =
1115 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00001116 CurModule.CurrentModule, IsThreadLocal);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001117 GV->setVisibility(Visibility);
Reid Spencer68a24bd2005-08-27 18:50:39 +00001118 InsertValue(GV, CurModule.Values);
Chris Lattnerb475c422005-11-12 18:22:38 +00001119 return GV;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001120}
1121
1122// setTypeName - Set the specified type to the name given. The name may be
1123// null potentially, in which case this is a noop. The string passed in is
1124// assumed to be a malloc'd string buffer, and is freed by this function.
1125//
1126// This function returns true if the type has already been defined, but is
1127// allowed to be redefined in the specified context. If the name is a new name
1128// for the type plane, it is inserted and false is returned.
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001129static bool setTypeName(const Type *T, std::string *NameStr) {
Reid Spencera9720f52007-02-05 17:04:00 +00001130 assert(!inFunctionScope() && "Can't give types function-local names!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001131 if (NameStr == 0) return false;
1132
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001133 std::string Name(*NameStr); // Copy string
1134 delete NameStr; // Free old string
Reid Spencer68a24bd2005-08-27 18:50:39 +00001135
1136 // We don't allow assigning names to void type
Reid Spencer5b7e7532006-09-28 19:28:24 +00001137 if (T == Type::VoidTy) {
Reid Spencerb5334b02007-02-05 10:18:06 +00001138 GenerateError("Can't assign name '" + Name + "' to the void type");
Reid Spencer5b7e7532006-09-28 19:28:24 +00001139 return false;
1140 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00001141
1142 // Set the type name, checking for conflicts as we do so.
1143 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1144
1145 if (AlreadyExists) { // Inserting a name that is already defined???
1146 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
Reid Spencera9720f52007-02-05 17:04:00 +00001147 assert(Existing && "Conflict but no matching type?!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001148
1149 // There is only one case where this is allowed: when we are refining an
1150 // opaque type. In this case, Existing will be an opaque type.
1151 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1152 // We ARE replacing an opaque type!
1153 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1154 return true;
1155 }
1156
1157 // Otherwise, this is an attempt to redefine a type. That's okay if
1158 // the redefinition is identical to the original. This will be so if
1159 // Existing and T point to the same Type object. In this one case we
1160 // allow the equivalent redefinition.
1161 if (Existing == T) return true; // Yes, it's equal.
1162
1163 // Any other kind of (non-equivalent) redefinition is an error.
Reid Spencer63c34452007-01-05 21:51:07 +00001164 GenerateError("Redefinition of type named '" + Name + "' of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00001165 T->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00001166 }
1167
1168 return false;
1169}
1170
1171//===----------------------------------------------------------------------===//
1172// Code for handling upreferences in type names...
1173//
1174
1175// TypeContains - Returns true if Ty directly contains E in it.
1176//
1177static bool TypeContains(const Type *Ty, const Type *E) {
1178 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1179 E) != Ty->subtype_end();
1180}
1181
1182namespace {
1183 struct UpRefRecord {
1184 // NestingLevel - The number of nesting levels that need to be popped before
1185 // this type is resolved.
1186 unsigned NestingLevel;
1187
1188 // LastContainedTy - This is the type at the current binding level for the
1189 // type. Every time we reduce the nesting level, this gets updated.
1190 const Type *LastContainedTy;
1191
1192 // UpRefTy - This is the actual opaque type that the upreference is
1193 // represented with.
1194 OpaqueType *UpRefTy;
1195
1196 UpRefRecord(unsigned NL, OpaqueType *URTy)
1197 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1198 };
1199}
1200
1201// UpRefs - A list of the outstanding upreferences that need to be resolved.
1202static std::vector<UpRefRecord> UpRefs;
1203
1204/// HandleUpRefs - Every time we finish a new layer of types, this function is
1205/// called. It loops through the UpRefs vector, which is a list of the
1206/// currently active types. For each type, if the up reference is contained in
1207/// the newly completed type, we decrement the level count. When the level
1208/// count reaches zero, the upreferenced type is the type that is passed in:
1209/// thus we can complete the cycle.
1210///
1211static PATypeHolder HandleUpRefs(const Type *ty) {
Chris Lattner224f84f2006-08-18 17:34:45 +00001212 // If Ty isn't abstract, or if there are no up-references in it, then there is
1213 // nothing to resolve here.
1214 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1215
Reid Spencer68a24bd2005-08-27 18:50:39 +00001216 PATypeHolder Ty(ty);
1217 UR_OUT("Type '" << Ty->getDescription() <<
1218 "' newly formed. Resolving upreferences.\n" <<
1219 UpRefs.size() << " upreferences active!\n");
1220
1221 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1222 // to zero), we resolve them all together before we resolve them to Ty. At
1223 // the end of the loop, if there is anything to resolve to Ty, it will be in
1224 // this variable.
1225 OpaqueType *TypeToResolve = 0;
1226
1227 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1228 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1229 << UpRefs[i].second->getDescription() << ") = "
1230 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1231 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1232 // Decrement level of upreference
1233 unsigned Level = --UpRefs[i].NestingLevel;
1234 UpRefs[i].LastContainedTy = Ty;
1235 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1236 if (Level == 0) { // Upreference should be resolved!
1237 if (!TypeToResolve) {
1238 TypeToResolve = UpRefs[i].UpRefTy;
1239 } else {
1240 UR_OUT(" * Resolving upreference for "
1241 << UpRefs[i].second->getDescription() << "\n";
1242 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1243 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1244 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1245 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1246 }
1247 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1248 --i; // Do not skip the next element...
1249 }
1250 }
1251 }
1252
1253 if (TypeToResolve) {
1254 UR_OUT(" * Resolving upreference for "
1255 << UpRefs[i].second->getDescription() << "\n";
1256 std::string OldName = TypeToResolve->getDescription());
1257 TypeToResolve->refineAbstractTypeTo(Ty);
1258 }
1259
1260 return Ty;
1261}
1262
Reid Spencer68a24bd2005-08-27 18:50:39 +00001263//===----------------------------------------------------------------------===//
1264// RunVMAsmParser - Define an interface to this parser
1265//===----------------------------------------------------------------------===//
1266//
Reid Spencer14310612006-12-31 05:40:51 +00001267static Module* RunParser(Module * M);
1268
Reid Spencer68a24bd2005-08-27 18:50:39 +00001269Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1270 set_scan_file(F);
1271
1272 CurFilename = Filename;
1273 return RunParser(new Module(CurFilename));
1274}
1275
1276Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1277 set_scan_string(AsmString);
1278
1279 CurFilename = "from_memory";
1280 if (M == NULL) {
1281 return RunParser(new Module (CurFilename));
1282 } else {
1283 return RunParser(M);
1284 }
1285}
1286
1287
Reid Spencered951ea2007-05-19 07:22:10 +00001288
1289/* Enabling traces. */
1290#ifndef YYDEBUG
1291# define YYDEBUG 0
1292#endif
1293
1294/* Enabling verbose error messages. */
1295#ifdef YYERROR_VERBOSE
1296# undef YYERROR_VERBOSE
1297# define YYERROR_VERBOSE 1
1298#else
1299# define YYERROR_VERBOSE 0
1300#endif
1301
1302/* Enabling the token table. */
1303#ifndef YYTOKEN_TABLE
1304# define YYTOKEN_TABLE 0
1305#endif
1306
1307#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001308#line 957 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00001309typedef union YYSTYPE {
Reid Spencer68a24bd2005-08-27 18:50:39 +00001310 llvm::Module *ModuleVal;
1311 llvm::Function *FunctionVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001312 llvm::BasicBlock *BasicBlockVal;
1313 llvm::TerminatorInst *TermInstVal;
1314 llvm::Instruction *InstVal;
Reid Spencera132e042006-12-03 05:46:11 +00001315 llvm::Constant *ConstVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001316
Reid Spencera132e042006-12-03 05:46:11 +00001317 const llvm::Type *PrimType;
Reid Spencer14310612006-12-31 05:40:51 +00001318 std::list<llvm::PATypeHolder> *TypeList;
Reid Spencera132e042006-12-03 05:46:11 +00001319 llvm::PATypeHolder *TypeVal;
1320 llvm::Value *ValueVal;
Reid Spencera132e042006-12-03 05:46:11 +00001321 std::vector<llvm::Value*> *ValueList;
Reid Spencer14310612006-12-31 05:40:51 +00001322 llvm::ArgListType *ArgList;
1323 llvm::TypeWithAttrs TypeWithAttrs;
1324 llvm::TypeWithAttrsList *TypeWithAttrsList;
1325 llvm::ValueRefList *ValueRefList;
1326
Reid Spencer68a24bd2005-08-27 18:50:39 +00001327 // Represent the RHS of PHI node
Reid Spencera132e042006-12-03 05:46:11 +00001328 std::list<std::pair<llvm::Value*,
1329 llvm::BasicBlock*> > *PHIList;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001330 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
Reid Spencera132e042006-12-03 05:46:11 +00001331 std::vector<llvm::Constant*> *ConstVector;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001332
1333 llvm::GlobalValue::LinkageTypes Linkage;
Anton Korobeynikov178a3522007-01-12 19:22:51 +00001334 llvm::GlobalValue::VisibilityTypes Visibility;
Reid Spencer7b5d4662007-04-09 06:16:21 +00001335 uint16_t ParamAttrs;
Reid Spencer38c91a92007-02-28 02:24:54 +00001336 llvm::APInt *APIntVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001337 int64_t SInt64Val;
1338 uint64_t UInt64Val;
1339 int SIntVal;
1340 unsigned UIntVal;
1341 double FPVal;
1342 bool BoolVal;
1343
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001344 std::string *StrVal; // This memory must be deleted
1345 llvm::ValID ValIDVal;
Reid Spencer68a24bd2005-08-27 18:50:39 +00001346
Reid Spencera132e042006-12-03 05:46:11 +00001347 llvm::Instruction::BinaryOps BinaryOpVal;
1348 llvm::Instruction::TermOps TermOpVal;
1349 llvm::Instruction::MemoryOps MemOpVal;
1350 llvm::Instruction::CastOps CastOpVal;
1351 llvm::Instruction::OtherOps OtherOpVal;
Reid Spencera132e042006-12-03 05:46:11 +00001352 llvm::ICmpInst::Predicate IPredicate;
1353 llvm::FCmpInst::Predicate FPredicate;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001354} YYSTYPE;
Reid Spencered951ea2007-05-19 07:22:10 +00001355/* Line 196 of yacc.c. */
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001356#line 1357 "llvmAsmParser.tab.c"
Reid Spencered951ea2007-05-19 07:22:10 +00001357# define yystype YYSTYPE /* obsolescent; will be withdrawn */
1358# define YYSTYPE_IS_DECLARED 1
1359# define YYSTYPE_IS_TRIVIAL 1
Reid Spencer68a24bd2005-08-27 18:50:39 +00001360#endif
1361
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001362
Reid Spencer68a24bd2005-08-27 18:50:39 +00001363
Reid Spencered951ea2007-05-19 07:22:10 +00001364/* Copy the second part of user declarations. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00001365
1366
Reid Spencered951ea2007-05-19 07:22:10 +00001367/* Line 219 of yacc.c. */
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001368#line 1369 "llvmAsmParser.tab.c"
Anton Korobeynikov38e09802007-04-28 13:48:45 +00001369
Reid Spencered951ea2007-05-19 07:22:10 +00001370#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
1371# define YYSIZE_T __SIZE_TYPE__
1372#endif
1373#if ! defined (YYSIZE_T) && defined (size_t)
1374# define YYSIZE_T size_t
1375#endif
1376#if ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus))
1377# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
1378# define YYSIZE_T size_t
1379#endif
1380#if ! defined (YYSIZE_T)
1381# define YYSIZE_T unsigned int
1382#endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001383
Reid Spencered951ea2007-05-19 07:22:10 +00001384#ifndef YY_
1385# if YYENABLE_NLS
1386# if ENABLE_NLS
1387# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1388# define YY_(msgid) dgettext ("bison-runtime", msgid)
1389# endif
1390# endif
1391# ifndef YY_
1392# define YY_(msgid) msgid
1393# endif
1394#endif
1395
1396#if ! defined (yyoverflow) || YYERROR_VERBOSE
1397
1398/* The parser invokes alloca or malloc; define the necessary symbols. */
1399
1400# ifdef YYSTACK_USE_ALLOCA
1401# if YYSTACK_USE_ALLOCA
1402# ifdef __GNUC__
1403# define YYSTACK_ALLOC __builtin_alloca
1404# else
1405# define YYSTACK_ALLOC alloca
1406# if defined (__STDC__) || defined (__cplusplus)
1407# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1408# define YYINCLUDED_STDLIB_H
1409# endif
1410# endif
1411# endif
1412# endif
1413
1414# ifdef YYSTACK_ALLOC
1415 /* Pacify GCC's `empty if-body' warning. */
1416# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1417# ifndef YYSTACK_ALLOC_MAXIMUM
1418 /* The OS might guarantee only one guard page at the bottom of the stack,
1419 and a page size can be as small as 4096 bytes. So we cannot safely
1420 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1421 to allow for a few compiler-allocated temporary stack slots. */
1422# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2005 */
1423# endif
1424# else
1425# define YYSTACK_ALLOC YYMALLOC
1426# define YYSTACK_FREE YYFREE
1427# ifndef YYSTACK_ALLOC_MAXIMUM
1428# define YYSTACK_ALLOC_MAXIMUM ((YYSIZE_T) -1)
1429# endif
1430# ifdef __cplusplus
1431extern "C" {
1432# endif
1433# ifndef YYMALLOC
1434# define YYMALLOC malloc
1435# if (! defined (malloc) && ! defined (YYINCLUDED_STDLIB_H) \
1436 && (defined (__STDC__) || defined (__cplusplus)))
1437void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1438# endif
1439# endif
1440# ifndef YYFREE
1441# define YYFREE free
1442# if (! defined (free) && ! defined (YYINCLUDED_STDLIB_H) \
1443 && (defined (__STDC__) || defined (__cplusplus)))
1444void free (void *); /* INFRINGES ON USER NAME SPACE */
1445# endif
1446# endif
1447# ifdef __cplusplus
1448}
1449# endif
1450# endif
1451#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
1452
1453
1454#if (! defined (yyoverflow) \
1455 && (! defined (__cplusplus) \
1456 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
1457
1458/* A type that is properly aligned for any stack member. */
1459union yyalloc
1460{
1461 short int yyss;
1462 YYSTYPE yyvs;
1463 };
1464
1465/* The size of the maximum gap between one aligned stack and the next. */
1466# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
1467
1468/* The size of an array large to enough to hold all stacks, each with
1469 N elements. */
1470# define YYSTACK_BYTES(N) \
1471 ((N) * (sizeof (short int) + sizeof (YYSTYPE)) \
1472 + YYSTACK_GAP_MAXIMUM)
1473
1474/* Copy COUNT objects from FROM to TO. The source and destination do
1475 not overlap. */
1476# ifndef YYCOPY
1477# if defined (__GNUC__) && 1 < __GNUC__
1478# define YYCOPY(To, From, Count) \
1479 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
1480# else
1481# define YYCOPY(To, From, Count) \
1482 do \
1483 { \
1484 YYSIZE_T yyi; \
1485 for (yyi = 0; yyi < (Count); yyi++) \
1486 (To)[yyi] = (From)[yyi]; \
1487 } \
1488 while (0)
1489# endif
1490# endif
1491
1492/* Relocate STACK from its old location to the new one. The
1493 local variables YYSIZE and YYSTACKSIZE give the old and new number of
1494 elements in the stack, and YYPTR gives the new location of the
1495 stack. Advance YYPTR to a properly aligned location for the next
1496 stack. */
1497# define YYSTACK_RELOCATE(Stack) \
1498 do \
1499 { \
1500 YYSIZE_T yynewbytes; \
1501 YYCOPY (&yyptr->Stack, Stack, yysize); \
1502 Stack = &yyptr->Stack; \
1503 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
1504 yyptr += yynewbytes / sizeof (*yyptr); \
1505 } \
1506 while (0)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00001507
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001508#endif
1509
Reid Spencered951ea2007-05-19 07:22:10 +00001510#if defined (__STDC__) || defined (__cplusplus)
1511 typedef signed char yysigned_char;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001512#else
Reid Spencered951ea2007-05-19 07:22:10 +00001513 typedef short int yysigned_char;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00001514#endif
1515
Reid Spencered951ea2007-05-19 07:22:10 +00001516/* YYFINAL -- State number of the termination state. */
1517#define YYFINAL 43
1518/* YYLAST -- Last index in YYTABLE. */
1519#define YYLAST 1610
1520
1521/* YYNTOKENS -- Number of terminals. */
1522#define YYNTOKENS 152
1523/* YYNNTS -- Number of nonterminals. */
1524#define YYNNTS 82
1525/* YYNRULES -- Number of rules. */
1526#define YYNRULES 298
1527/* YYNRULES -- Number of states. */
1528#define YYNSTATES 582
1529
1530/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
1531#define YYUNDEFTOK 2
1532#define YYMAXUTOK 392
1533
1534#define YYTRANSLATE(YYX) \
1535 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
1536
1537/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
1538static const unsigned char yytranslate[] =
1539{
1540 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1541 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1542 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1543 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1544 142, 143, 140, 2, 139, 2, 2, 2, 2, 2,
1545 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1546 147, 138, 148, 2, 2, 2, 2, 2, 2, 2,
1547 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1548 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1549 2, 144, 141, 146, 2, 2, 2, 2, 2, 151,
1550 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1551 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1552 145, 2, 2, 149, 2, 150, 2, 2, 2, 2,
1553 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1554 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1555 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1556 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1557 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1558 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1559 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1560 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1561 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1562 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1563 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1564 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1565 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1566 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1567 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1568 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1569 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1570 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1571 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1572 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1573 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1574 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1575 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1576 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1577 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
1578 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
1579 135, 136, 137
1580};
1581
1582#if YYDEBUG
1583/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
1584 YYRHS. */
1585static const unsigned short int yyprhs[] =
1586{
1587 0, 0, 3, 5, 7, 9, 11, 13, 15, 17,
1588 19, 21, 23, 25, 27, 29, 31, 33, 35, 37,
1589 39, 41, 43, 45, 47, 49, 51, 53, 55, 57,
1590 59, 61, 63, 65, 67, 69, 71, 73, 75, 77,
1591 79, 81, 83, 85, 87, 89, 91, 93, 95, 97,
1592 99, 101, 103, 105, 107, 109, 111, 113, 115, 117,
1593 119, 121, 123, 124, 127, 128, 130, 132, 134, 135,
1594 138, 140, 142, 144, 146, 148, 150, 152, 154, 155,
1595 157, 159, 161, 162, 164, 166, 167, 169, 171, 173,
1596 175, 176, 178, 180, 181, 183, 185, 187, 189, 191,
1597 194, 196, 198, 200, 202, 203, 206, 208, 210, 212,
1598 213, 216, 217, 220, 221, 225, 228, 229, 231, 232,
1599 236, 238, 241, 243, 245, 247, 249, 251, 253, 256,
1600 258, 261, 267, 273, 279, 285, 289, 292, 298, 303,
1601 306, 308, 310, 312, 316, 318, 322, 324, 325, 327,
1602 331, 336, 340, 344, 349, 354, 358, 365, 371, 374,
1603 377, 380, 383, 386, 389, 392, 395, 398, 401, 404,
1604 407, 414, 420, 429, 436, 443, 451, 459, 466, 475,
1605 484, 488, 490, 492, 494, 496, 497, 500, 507, 509,
1606 510, 512, 515, 516, 520, 521, 525, 529, 533, 537,
1607 538, 546, 547, 556, 557, 566, 572, 575, 579, 581,
1608 585, 589, 593, 597, 599, 600, 606, 610, 612, 616,
1609 618, 619, 629, 631, 633, 638, 640, 642, 645, 649,
1610 650, 652, 654, 656, 658, 660, 662, 664, 666, 668,
1611 672, 674, 680, 682, 684, 686, 688, 690, 692, 695,
1612 698, 701, 705, 708, 709, 711, 714, 717, 721, 731,
1613 741, 750, 765, 767, 769, 776, 782, 785, 792, 800,
1614 804, 810, 811, 812, 816, 819, 821, 827, 833, 840,
1615 847, 852, 859, 864, 869, 876, 883, 886, 895, 897,
1616 899, 900, 904, 911, 915, 922, 925, 931, 939
1617};
1618
1619/* YYRHS -- A `-1'-separated list of the rules' RHS. */
1620static const short int yyrhs[] =
1621{
1622 196, 0, -1, 70, -1, 71, -1, 72, -1, 73,
1623 -1, 74, -1, 75, -1, 76, -1, 77, -1, 78,
1624 -1, 82, -1, 83, -1, 84, -1, 79, -1, 80,
1625 -1, 81, -1, 113, -1, 114, -1, 115, -1, 116,
1626 -1, 117, -1, 118, -1, 119, -1, 120, -1, 121,
1627 -1, 122, -1, 123, -1, 124, -1, 87, -1, 88,
1628 -1, 89, -1, 90, -1, 91, -1, 92, -1, 93,
1629 -1, 94, -1, 95, -1, 96, -1, 97, -1, 98,
1630 -1, 99, -1, 100, -1, 101, -1, 102, -1, 103,
1631 -1, 104, -1, 105, -1, 106, -1, 93, -1, 94,
1632 -1, 95, -1, 96, -1, 23, -1, 24, -1, 11,
1633 -1, 12, -1, 13, -1, 16, -1, 19, -1, 21,
1634 -1, 160, -1, -1, 160, 138, -1, -1, 17, -1,
1635 20, -1, 165, -1, -1, 163, 138, -1, 39, -1,
1636 41, -1, 40, -1, 42, -1, 44, -1, 43, -1,
1637 45, -1, 47, -1, -1, 135, -1, 136, -1, 137,
1638 -1, -1, 43, -1, 45, -1, -1, 39, -1, 40,
1639 -1, 41, -1, 44, -1, -1, 41, -1, 39, -1,
1640 -1, 58, -1, 59, -1, 60, -1, 61, -1, 62,
1641 -1, 57, 4, -1, 114, -1, 115, -1, 132, -1,
1642 133, -1, -1, 174, 173, -1, 131, -1, 134, -1,
1643 173, -1, -1, 176, 175, -1, -1, 50, 4, -1,
1644 -1, 139, 50, 4, -1, 31, 19, -1, -1, 179,
1645 -1, -1, 139, 182, 181, -1, 179, -1, 50, 4,
1646 -1, 11, -1, 12, -1, 13, -1, 14, -1, 46,
1647 -1, 183, -1, 184, 140, -1, 218, -1, 141, 4,
1648 -1, 184, 142, 188, 143, 176, -1, 10, 142, 188,
1649 143, 176, -1, 144, 4, 145, 184, 146, -1, 147,
1650 4, 145, 184, 148, -1, 149, 189, 150, -1, 149,
1651 150, -1, 147, 149, 189, 150, 148, -1, 147, 149,
1652 150, 148, -1, 184, 174, -1, 184, -1, 10, -1,
1653 185, -1, 187, 139, 185, -1, 187, -1, 187, 139,
1654 36, -1, 36, -1, -1, 184, -1, 189, 139, 184,
1655 -1, 184, 144, 192, 146, -1, 184, 144, 146, -1,
1656 184, 151, 19, -1, 184, 147, 192, 148, -1, 184,
1657 149, 192, 150, -1, 184, 149, 150, -1, 184, 147,
1658 149, 192, 150, 148, -1, 184, 147, 149, 150, 148,
1659 -1, 184, 37, -1, 184, 38, -1, 184, 218, -1,
1660 184, 191, -1, 184, 22, -1, 158, 3, -1, 158,
1661 5, -1, 158, 4, -1, 158, 6, -1, 11, 23,
1662 -1, 11, 24, -1, 159, 9, -1, 155, 142, 190,
1663 35, 184, 143, -1, 112, 142, 190, 229, 143, -1,
1664 126, 142, 190, 139, 190, 139, 190, 143, -1, 153,
1665 142, 190, 139, 190, 143, -1, 154, 142, 190, 139,
1666 190, 143, -1, 85, 156, 142, 190, 139, 190, 143,
1667 -1, 86, 157, 142, 190, 139, 190, 143, -1, 128,
1668 142, 190, 139, 190, 143, -1, 129, 142, 190, 139,
1669 190, 139, 190, 143, -1, 130, 142, 190, 139, 190,
1670 139, 190, 143, -1, 192, 139, 190, -1, 190, -1,
1671 29, -1, 30, -1, 34, -1, -1, 186, 218, -1,
1672 118, 142, 195, 35, 184, 143, -1, 197, -1, -1,
1673 198, -1, 197, 198, -1, -1, 28, 199, 214, -1,
1674 -1, 27, 200, 215, -1, 55, 54, 204, -1, 162,
1675 15, 184, -1, 162, 15, 10, -1, -1, 164, 168,
1676 194, 193, 190, 201, 181, -1, -1, 164, 166, 168,
1677 194, 193, 190, 202, 181, -1, -1, 164, 167, 168,
1678 194, 193, 184, 203, 181, -1, 164, 168, 32, 171,
1679 195, -1, 48, 205, -1, 51, 138, 206, -1, 19,
1680 -1, 49, 138, 19, -1, 63, 138, 19, -1, 144,
1681 207, 146, -1, 207, 139, 19, -1, 19, -1, -1,
1682 208, 139, 184, 174, 161, -1, 184, 174, 161, -1,
1683 208, -1, 208, 139, 36, -1, 36, -1, -1, 172,
1684 186, 163, 142, 209, 143, 176, 180, 177, -1, 25,
1685 -1, 149, -1, 170, 168, 210, 211, -1, 26, -1,
1686 150, -1, 221, 213, -1, 169, 168, 210, -1, -1,
1687 56, -1, 3, -1, 4, -1, 9, -1, 23, -1,
1688 24, -1, 37, -1, 38, -1, 22, -1, 147, 192,
1689 148, -1, 191, -1, 54, 216, 19, 139, 19, -1,
1690 7, -1, 8, -1, 160, -1, 163, -1, 218, -1,
1691 217, -1, 184, 219, -1, 221, 222, -1, 212, 222,
1692 -1, 223, 162, 224, -1, 223, 226, -1, -1, 18,
1693 -1, 64, 220, -1, 64, 10, -1, 65, 14, 219,
1694 -1, 65, 11, 219, 139, 14, 219, 139, 14, 219,
1695 -1, 66, 158, 219, 139, 14, 219, 144, 225, 146,
1696 -1, 66, 158, 219, 139, 14, 219, 144, 146, -1,
1697 67, 172, 186, 219, 142, 228, 143, 176, 35, 14,
1698 219, 68, 14, 219, -1, 68, -1, 69, -1, 225,
1699 158, 217, 139, 14, 219, -1, 158, 217, 139, 14,
1700 219, -1, 162, 231, -1, 184, 144, 219, 139, 219,
1701 146, -1, 227, 139, 144, 219, 139, 219, 146, -1,
1702 184, 219, 174, -1, 228, 139, 184, 219, 174, -1,
1703 -1, -1, 229, 139, 220, -1, 53, 52, -1, 52,
1704 -1, 153, 184, 219, 139, 219, -1, 154, 184, 219,
1705 139, 219, -1, 85, 156, 184, 219, 139, 219, -1,
1706 86, 157, 184, 219, 139, 219, -1, 155, 220, 35,
1707 184, -1, 126, 220, 139, 220, 139, 220, -1, 127,
1708 220, 139, 184, -1, 128, 220, 139, 220, -1, 129,
1709 220, 139, 220, 139, 220, -1, 130, 220, 139, 220,
1710 139, 220, -1, 125, 227, -1, 230, 172, 186, 219,
1711 142, 228, 143, 176, -1, 233, -1, 33, -1, -1,
1712 107, 184, 178, -1, 107, 184, 139, 11, 219, 178,
1713 -1, 108, 184, 178, -1, 108, 184, 139, 11, 219,
1714 178, -1, 109, 220, -1, 232, 110, 184, 219, 178,
1715 -1, 232, 111, 220, 139, 184, 219, 178, -1, 112,
1716 184, 219, 229, -1
1717};
1718
1719/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
1720static const unsigned short int yyrline[] =
1721{
Reid Spencer0a8a16b2007-05-22 18:52:55 +00001722 0, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116,
1723 1116, 1117, 1117, 1117, 1117, 1117, 1117, 1118, 1118, 1118,
1724 1118, 1118, 1118, 1119, 1119, 1119, 1119, 1119, 1119, 1122,
1725 1122, 1123, 1123, 1124, 1124, 1125, 1125, 1126, 1126, 1130,
1726 1130, 1131, 1131, 1132, 1132, 1133, 1133, 1134, 1134, 1135,
1727 1135, 1136, 1136, 1137, 1138, 1143, 1144, 1144, 1146, 1146,
1728 1146, 1147, 1147, 1151, 1155, 1160, 1160, 1162, 1163, 1168,
1729 1174, 1175, 1176, 1177, 1178, 1182, 1183, 1184, 1188, 1189,
1730 1190, 1191, 1195, 1196, 1197, 1201, 1202, 1203, 1204, 1205,
1731 1209, 1210, 1211, 1214, 1215, 1216, 1217, 1218, 1219, 1220,
1732 1227, 1228, 1229, 1230, 1233, 1234, 1239, 1240, 1241, 1244,
1733 1245, 1252, 1253, 1259, 1260, 1268, 1276, 1277, 1282, 1283,
1734 1284, 1289, 1302, 1302, 1302, 1302, 1305, 1309, 1313, 1320,
1735 1325, 1333, 1363, 1394, 1399, 1411, 1421, 1425, 1435, 1442,
1736 1449, 1456, 1461, 1466, 1473, 1474, 1481, 1488, 1496, 1502,
1737 1514, 1542, 1558, 1585, 1613, 1639, 1659, 1685, 1705, 1717,
1738 1724, 1790, 1800, 1810, 1816, 1826, 1832, 1842, 1847, 1852,
1739 1860, 1872, 1894, 1902, 1908, 1919, 1924, 1929, 1935, 1941,
1740 1950, 1954, 1962, 1962, 1965, 1965, 1968, 1979, 2000, 2005,
1741 2013, 2014, 2018, 2018, 2022, 2022, 2025, 2028, 2052, 2063,
1742 2063, 2074, 2073, 2083, 2082, 2093, 2112, 2115, 2121, 2131,
1743 2135, 2140, 2142, 2147, 2152, 2161, 2171, 2182, 2186, 2195,
1744 2204, 2209, 2330, 2330, 2332, 2341, 2341, 2343, 2348, 2360,
1745 2364, 2369, 2373, 2377, 2381, 2385, 2389, 2393, 2397, 2401,
1746 2426, 2430, 2440, 2444, 2448, 2453, 2460, 2460, 2466, 2475,
1747 2479, 2488, 2497, 2506, 2510, 2517, 2521, 2525, 2530, 2540,
1748 2559, 2568, 2648, 2652, 2659, 2670, 2683, 2693, 2704, 2714,
1749 2723, 2732, 2735, 2736, 2743, 2747, 2752, 2773, 2790, 2804,
1750 2818, 2830, 2838, 2845, 2851, 2857, 2863, 2878, 2963, 2968,
1751 2972, 2979, 2986, 2994, 3001, 3009, 3017, 3031, 3048
Reid Spencered951ea2007-05-19 07:22:10 +00001752};
1753#endif
1754
1755#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
1756/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1757 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1758static const char *const yytname[] =
1759{
1760 "$end", "error", "$undefined", "ESINT64VAL", "EUINT64VAL", "ESAPINTVAL",
1761 "EUAPINTVAL", "LOCALVAL_ID", "GLOBALVAL_ID", "FPVAL", "VOID", "INTTYPE",
1762 "FLOAT", "DOUBLE", "LABEL", "TYPE", "LOCALVAR", "GLOBALVAR", "LABELSTR",
1763 "STRINGCONSTANT", "ATSTRINGCONSTANT", "PCTSTRINGCONSTANT",
1764 "ZEROINITIALIZER", "TRUETOK", "FALSETOK", "BEGINTOK", "ENDTOK",
1765 "DECLARE", "DEFINE", "GLOBAL", "CONSTANT", "SECTION", "ALIAS",
1766 "VOLATILE", "THREAD_LOCAL", "TO", "DOTDOTDOT", "NULL_TOK", "UNDEF",
1767 "INTERNAL", "LINKONCE", "WEAK", "APPENDING", "DLLIMPORT", "DLLEXPORT",
1768 "EXTERN_WEAK", "OPAQUE", "EXTERNAL", "TARGET", "TRIPLE", "ALIGN",
1769 "DEPLIBS", "CALL", "TAIL", "ASM_TOK", "MODULE", "SIDEEFFECT", "CC_TOK",
1770 "CCC_TOK", "FASTCC_TOK", "COLDCC_TOK", "X86_STDCALLCC_TOK",
1771 "X86_FASTCALLCC_TOK", "DATALAYOUT", "RET", "BR", "SWITCH", "INVOKE",
1772 "UNWIND", "UNREACHABLE", "ADD", "SUB", "MUL", "UDIV", "SDIV", "FDIV",
1773 "UREM", "SREM", "FREM", "AND", "OR", "XOR", "SHL", "LSHR", "ASHR",
1774 "ICMP", "FCMP", "EQ", "NE", "SLT", "SGT", "SLE", "SGE", "ULT", "UGT",
1775 "ULE", "UGE", "OEQ", "ONE", "OLT", "OGT", "OLE", "OGE", "ORD", "UNO",
1776 "UEQ", "UNE", "MALLOC", "ALLOCA", "FREE", "LOAD", "STORE",
1777 "GETELEMENTPTR", "TRUNC", "ZEXT", "SEXT", "FPTRUNC", "FPEXT", "BITCAST",
1778 "UITOFP", "SITOFP", "FPTOUI", "FPTOSI", "INTTOPTR", "PTRTOINT",
1779 "PHI_TOK", "SELECT", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT",
1780 "SHUFFLEVECTOR", "NORETURN", "INREG", "SRET", "NOUNWIND", "DEFAULT",
1781 "HIDDEN", "PROTECTED", "'='", "','", "'*'", "'\\\\'", "'('", "')'",
1782 "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'c'", "$accept",
1783 "ArithmeticOps", "LogicalOps", "CastOps", "IPredicates", "FPredicates",
1784 "IntType", "FPType", "LocalName", "OptLocalName", "OptLocalAssign",
1785 "GlobalName", "OptGlobalAssign", "GlobalAssign", "GVInternalLinkage",
1786 "GVExternalLinkage", "GVVisibilityStyle", "FunctionDeclareLinkage",
1787 "FunctionDefineLinkage", "AliasLinkage", "OptCallingConv", "ParamAttr",
1788 "OptParamAttrs", "FuncAttr", "OptFuncAttrs", "OptAlign", "OptCAlign",
1789 "SectionString", "OptSection", "GlobalVarAttributes",
1790 "GlobalVarAttribute", "PrimType", "Types", "ArgType", "ResultTypes",
1791 "ArgTypeList", "ArgTypeListI", "TypeListI", "ConstVal", "ConstExpr",
1792 "ConstVector", "GlobalType", "ThreadLocal", "AliaseeRef", "Module",
1793 "DefinitionList", "Definition", "@1", "@2", "@3", "@4", "@5", "AsmBlock",
1794 "TargetDefinition", "LibrariesDefinition", "LibList", "ArgListH",
1795 "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader", "END",
1796 "Function", "FunctionProto", "OptSideEffect", "ConstValueRef",
1797 "SymbolicValueRef", "ValueRef", "ResolvedVal", "BasicBlockList",
1798 "BasicBlock", "InstructionList", "BBTerminatorInst", "JumpTable", "Inst",
1799 "PHIList", "ValueRefList", "IndexList", "OptTailCall", "InstVal",
1800 "OptVolatile", "MemoryInst", 0
1801};
1802#endif
1803
1804# ifdef YYPRINT
1805/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
1806 token YYLEX-NUM. */
1807static const unsigned short int yytoknum[] =
1808{
1809 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
1810 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
1811 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
1812 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
1813 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
1814 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
1815 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
1816 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
1817 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
1818 345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
1819 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
1820 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
1821 375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
1822 385, 386, 387, 388, 389, 390, 391, 392, 61, 44,
1823 42, 92, 40, 41, 91, 120, 93, 60, 62, 123,
1824 125, 99
1825};
1826# endif
1827
1828/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1829static const unsigned char yyr1[] =
1830{
1831 0, 152, 153, 153, 153, 153, 153, 153, 153, 153,
1832 153, 154, 154, 154, 154, 154, 154, 155, 155, 155,
1833 155, 155, 155, 155, 155, 155, 155, 155, 155, 156,
1834 156, 156, 156, 156, 156, 156, 156, 156, 156, 157,
1835 157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
1836 157, 157, 157, 157, 157, 158, 159, 159, 160, 160,
1837 160, 161, 161, 162, 162, 163, 163, 164, 164, 165,
1838 166, 166, 166, 166, 166, 167, 167, 167, 168, 168,
1839 168, 168, 169, 169, 169, 170, 170, 170, 170, 170,
1840 171, 171, 171, 172, 172, 172, 172, 172, 172, 172,
1841 173, 173, 173, 173, 174, 174, 175, 175, 175, 176,
1842 176, 177, 177, 178, 178, 179, 180, 180, 181, 181,
1843 182, 182, 183, 183, 183, 183, 184, 184, 184, 184,
1844 184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
1845 186, 186, 187, 187, 188, 188, 188, 188, 189, 189,
1846 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
1847 190, 190, 190, 190, 190, 190, 190, 190, 190, 190,
1848 191, 191, 191, 191, 191, 191, 191, 191, 191, 191,
1849 192, 192, 193, 193, 194, 194, 195, 195, 196, 196,
1850 197, 197, 199, 198, 200, 198, 198, 198, 198, 201,
1851 198, 202, 198, 203, 198, 198, 198, 198, 204, 205,
1852 205, 206, 207, 207, 207, 208, 208, 209, 209, 209,
1853 209, 210, 211, 211, 212, 213, 213, 214, 215, 216,
1854 216, 217, 217, 217, 217, 217, 217, 217, 217, 217,
1855 217, 217, 218, 218, 218, 218, 219, 219, 220, 221,
1856 221, 222, 223, 223, 223, 224, 224, 224, 224, 224,
1857 224, 224, 224, 224, 225, 225, 226, 227, 227, 228,
1858 228, 228, 229, 229, 230, 230, 231, 231, 231, 231,
1859 231, 231, 231, 231, 231, 231, 231, 231, 231, 232,
1860 232, 233, 233, 233, 233, 233, 233, 233, 233
1861};
1862
1863/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
1864static const unsigned char yyr2[] =
1865{
1866 0, 2, 1, 1, 1, 1, 1, 1, 1, 1,
1867 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1868 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1869 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1870 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1871 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1872 1, 1, 0, 2, 0, 1, 1, 1, 0, 2,
1873 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
1874 1, 1, 0, 1, 1, 0, 1, 1, 1, 1,
1875 0, 1, 1, 0, 1, 1, 1, 1, 1, 2,
1876 1, 1, 1, 1, 0, 2, 1, 1, 1, 0,
1877 2, 0, 2, 0, 3, 2, 0, 1, 0, 3,
1878 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
1879 2, 5, 5, 5, 5, 3, 2, 5, 4, 2,
1880 1, 1, 1, 3, 1, 3, 1, 0, 1, 3,
1881 4, 3, 3, 4, 4, 3, 6, 5, 2, 2,
1882 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1883 6, 5, 8, 6, 6, 7, 7, 6, 8, 8,
1884 3, 1, 1, 1, 1, 0, 2, 6, 1, 0,
1885 1, 2, 0, 3, 0, 3, 3, 3, 3, 0,
1886 7, 0, 8, 0, 8, 5, 2, 3, 1, 3,
1887 3, 3, 3, 1, 0, 5, 3, 1, 3, 1,
1888 0, 9, 1, 1, 4, 1, 1, 2, 3, 0,
1889 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
1890 1, 5, 1, 1, 1, 1, 1, 1, 2, 2,
1891 2, 3, 2, 0, 1, 2, 2, 3, 9, 9,
1892 8, 14, 1, 1, 6, 5, 2, 6, 7, 3,
1893 5, 0, 0, 3, 2, 1, 5, 5, 6, 6,
1894 4, 6, 4, 4, 6, 6, 2, 8, 1, 1,
1895 0, 3, 6, 3, 6, 2, 5, 7, 4
1896};
1897
1898/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
1899 STATE-NUM when YYTABLE doesn't specify something else to do. Zero
1900 means the default is an error. */
1901static const unsigned short int yydefact[] =
1902{
1903 68, 58, 65, 59, 66, 60, 194, 192, 0, 0,
1904 0, 0, 0, 0, 78, 67, 0, 68, 190, 82,
1905 85, 0, 0, 206, 0, 0, 63, 0, 69, 70,
1906 72, 71, 73, 75, 74, 76, 77, 79, 80, 81,
1907 78, 78, 185, 1, 191, 83, 84, 78, 195, 86,
1908 87, 88, 89, 78, 253, 193, 253, 0, 0, 214,
1909 207, 208, 196, 242, 243, 198, 122, 123, 124, 125,
1910 126, 0, 0, 0, 0, 244, 245, 127, 197, 129,
1911 185, 185, 90, 184, 0, 93, 93, 254, 250, 64,
1912 225, 226, 227, 249, 209, 210, 213, 0, 147, 130,
1913 0, 0, 0, 0, 136, 148, 0, 128, 147, 0,
1914 0, 92, 91, 0, 182, 183, 0, 0, 94, 95,
1915 96, 97, 98, 0, 228, 0, 290, 252, 0, 211,
1916 146, 104, 142, 144, 0, 0, 0, 0, 0, 0,
1917 135, 0, 0, 0, 141, 0, 140, 0, 205, 122,
1918 123, 124, 0, 0, 0, 199, 99, 0, 222, 223,
1919 224, 289, 275, 0, 0, 0, 0, 93, 262, 263,
1920 2, 3, 4, 5, 6, 7, 8, 9, 10, 14,
1921 15, 16, 11, 12, 13, 0, 0, 0, 0, 0,
1922 0, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1923 26, 27, 28, 0, 0, 0, 0, 0, 0, 0,
1924 0, 0, 251, 93, 266, 0, 288, 212, 139, 0,
1925 109, 0, 0, 138, 0, 149, 109, 201, 203, 0,
1926 186, 167, 168, 163, 165, 164, 166, 169, 162, 158,
1927 159, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1928 0, 0, 0, 0, 0, 161, 160, 118, 0, 274,
1929 256, 0, 255, 0, 0, 55, 0, 0, 29, 30,
1930 31, 32, 33, 34, 35, 36, 37, 38, 0, 53,
1931 54, 49, 50, 51, 52, 39, 40, 41, 42, 43,
1932 44, 45, 46, 47, 48, 0, 113, 113, 295, 0,
1933 0, 286, 0, 0, 0, 0, 0, 0, 0, 0,
1934 0, 0, 0, 100, 101, 102, 103, 105, 145, 143,
1935 132, 133, 134, 137, 131, 118, 118, 0, 0, 0,
1936 0, 0, 0, 0, 0, 151, 181, 0, 0, 0,
1937 155, 0, 152, 0, 0, 0, 0, 200, 220, 231,
1938 232, 233, 238, 234, 235, 236, 237, 229, 0, 240,
1939 247, 246, 248, 0, 257, 0, 0, 0, 0, 0,
1940 291, 0, 293, 272, 0, 0, 0, 0, 0, 0,
1941 0, 0, 0, 0, 0, 0, 0, 106, 107, 108,
1942 110, 202, 204, 0, 0, 0, 272, 0, 0, 0,
1943 0, 0, 150, 136, 148, 0, 153, 154, 0, 0,
1944 0, 0, 0, 120, 118, 219, 104, 217, 0, 230,
1945 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1946 298, 0, 0, 0, 282, 283, 0, 0, 0, 0,
1947 280, 0, 113, 0, 0, 0, 0, 0, 0, 0,
1948 0, 0, 180, 157, 0, 0, 0, 0, 115, 121,
1949 119, 62, 0, 109, 0, 239, 0, 0, 271, 0,
1950 0, 113, 114, 113, 0, 0, 0, 0, 0, 0,
1951 276, 277, 271, 0, 296, 0, 187, 0, 0, 171,
1952 0, 0, 0, 0, 156, 0, 0, 0, 61, 216,
1953 218, 104, 116, 0, 0, 0, 0, 0, 278, 279,
1954 292, 294, 273, 0, 0, 281, 284, 285, 0, 113,
1955 0, 0, 0, 177, 0, 0, 173, 174, 170, 62,
1956 117, 111, 241, 0, 0, 104, 0, 109, 267, 0,
1957 109, 297, 175, 176, 0, 0, 0, 215, 0, 221,
1958 0, 260, 0, 0, 269, 0, 0, 268, 287, 172,
1959 178, 179, 112, 258, 0, 259, 0, 104, 0, 0,
1960 0, 270, 0, 0, 0, 0, 265, 0, 0, 264,
1961 0, 261
1962};
1963
1964/* YYDEFGOTO[NTERM-NUM]. */
1965static const short int yydefgoto[] =
1966{
1967 -1, 252, 253, 254, 278, 295, 152, 153, 75, 499,
1968 12, 76, 14, 15, 40, 41, 42, 47, 53, 113,
1969 123, 317, 218, 390, 320, 549, 370, 413, 531, 347,
1970 414, 77, 154, 132, 147, 133, 134, 106, 336, 359,
1971 337, 116, 84, 148, 16, 17, 18, 20, 19, 257,
1972 325, 326, 62, 23, 60, 97, 417, 418, 124, 160,
1973 54, 92, 55, 48, 420, 360, 79, 362, 262, 56,
1974 88, 89, 212, 553, 127, 301, 507, 430, 213, 214,
1975 215, 216
1976};
1977
1978/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1979 STATE-NUM. */
1980#define YYPACT_NINF -509
1981static const short int yypact[] =
1982{
1983 47, -509, -509, -509, -509, -509, -509, -509, -8, -120,
1984 -11, -110, 58, -77, 432, -509, 79, 240, -509, 204,
1985 64, -50, -32, -509, -17, 114, -509, 1280, -509, -509,
1986 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
1987 102, 102, 286, -509, -509, -509, -509, 102, -509, -509,
1988 -509, -509, -509, 102, 122, -509, 1, 130, 141, 157,
1989 -509, -509, -509, -509, -509, 62, -509, -509, -509, -509,
1990 -509, 191, 239, 5, 365, -509, -509, -509, 181, -509,
1991 196, 196, 292, -509, 170, 220, 220, -509, -509, 118,
1992 -509, -509, -509, -509, -509, -509, -509, -93, 1082, -509,
1993 101, 106, 566, 62, -509, 181, -94, -509, 1082, 170,
1994 170, -509, -509, 1122, -509, -509, 1327, 250, -509, -509,
1995 -509, -509, -509, 1342, -509, -14, 1480, -509, 251, -509,
1996 -509, 181, -509, 119, 140, 1379, 1379, 125, -58, 1379,
1997 -509, 147, 1327, 1379, 62, 151, 181, 255, -509, 28,
1998 302, 308, 219, 315, 863, -509, -509, 149, -509, -509,
1999 -509, -509, -509, 273, 1394, 222, 317, 220, -509, -509,
2000 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2001 -509, -509, -509, -509, -509, 395, 443, 1379, 1379, 1379,
2002 1379, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2003 -509, -509, -509, 1379, 1379, 1379, 1379, 1379, 1379, 1379,
2004 1379, 1379, -509, 220, -509, 155, -509, -509, 14, 1137,
2005 -509, -10, -41, -509, 184, 181, -509, -509, 181, 1122,
2006 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2007 -509, 395, 443, 192, 194, 195, 197, 198, 1168, 1431,
2008 820, 319, 199, 200, 201, -509, -509, 205, 206, -509,
2009 62, 610, -509, 739, 739, -509, 739, 1342, -509, -509,
2010 -509, -509, -509, -509, -509, -509, -509, -509, 1379, -509,
2011 -509, -509, -509, -509, -509, -509, -509, -509, -509, -509,
2012 -509, -509, -509, -509, -509, 1379, 2, 66, -509, 610,
2013 46, 207, 208, 210, 216, 217, 224, 610, 610, 323,
2014 1342, 1379, 1379, -509, -509, -509, -509, -509, -509, -509,
2015 41, -509, -509, -509, 41, 205, 205, 326, 227, 238,
2016 1327, 1327, 1327, 1327, 1327, -509, -509, -46, 904, -99,
2017 -509, -56, -509, 1327, 1327, 1327, 19, -509, 1184, -509,
2018 -509, -509, -509, -509, -509, -509, -509, 312, 1327, -509,
2019 -509, -509, -509, 244, -509, 248, 739, 610, 610, 10,
2020 -509, 15, -509, -509, 739, 246, 1379, 1379, 1379, 1379,
2021 1379, 249, 252, 1379, 739, 610, 253, -509, -509, -509,
2022 -509, -509, -509, 1379, 1327, 1327, -509, 254, 257, 258,
2023 259, 1327, -509, 260, 863, -54, -509, -509, 261, 262,
2024 359, 380, 398, -509, 205, -509, 181, 266, 263, -509,
2025 388, -68, 399, 400, 267, 277, 283, 739, 408, 739,
2026 284, 285, 739, 288, 181, -509, 289, 290, 739, 739,
2027 181, 293, 291, 1379, 89, 295, 299, -24, 1327, 1327,
2028 1327, 1327, -509, -509, 296, 1327, 1327, 1379, -509, -509,
2029 -509, 38, 1231, -509, 300, -509, 739, 739, 1379, 739,
2030 739, 291, -509, 291, 1379, 739, 304, 1379, 1379, 1379,
2031 -509, -509, 1379, 391, -509, 610, -509, 1327, 1327, -509,
2032 306, 303, 310, 311, -509, 316, 322, 154, -509, -509,
2033 -509, 181, 83, 428, 321, 324, 610, -23, -509, -509,
2034 -509, -509, -509, 309, 739, -509, -509, -509, 53, 291,
2035 335, 350, 1327, -509, 1327, 1327, -509, -509, -509, 38,
2036 -509, 404, -509, 455, -1, -509, 1379, -509, -509, 351,
2037 -509, -509, -509, -509, 353, 355, 356, -509, 496, -509,
2038 739, -509, 993, 4, 14, 610, 87, -509, 41, -509,
2039 -509, -509, -509, -509, 362, -509, 993, -509, 488, 489,
2040 366, 14, 739, 739, 490, 439, -509, 739, 494, -509,
2041 739, -509
2042};
2043
2044/* YYPGOTO[NTERM-NUM]. */
2045static const short int yypgoto[] =
2046{
2047 -509, 385, 387, 390, 276, 278, -164, -509, 0, -7,
2048 429, 8, -509, -509, -509, -509, 37, -509, -509, -509,
2049 -143, -308, -410, -509, -221, -509, -284, 17, -509, -296,
2050 -509, -509, -26, 305, -119, -509, 413, 424, -30, -151,
2051 -227, 103, 226, 298, -509, -509, 513, -509, -509, -509,
2052 -509, -509, -509, -509, -509, -509, -509, -509, 445, -509,
2053 -509, -509, -509, -509, -509, -508, -140, 96, -169, -509,
2054 476, -509, -509, -509, -509, -509, 51, 156, -509, -509,
2055 -509, -509
2056};
2057
2058/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
2059 positive, shift that token. If negative, reduce the rule which
2060 number is the opposite. If zero, do what YYDEFACT says.
2061 If YYTABLE_NINF, syntax error. */
2062#define YYTABLE_NINF -190
2063static const short int yytable[] =
2064{
2065 11, 78, 266, 255, 157, 324, 461, 230, 13, 101,
2066 265, 158, 389, 372, 256, 265, 389, 11, 24, 87,
2067 298, 427, 339, 341, 267, 13, 429, 90, 26, 391,
2068 392, -55, -55, -55, -55, 302, 303, 304, 305, 306,
2069 401, 21, 309, 25, 564, 139, 128, -189, 105, 406,
2070 411, 231, 232, 129, 1, 22, 140, 3, 570, 5,
2071 428, 28, -64, 1, 2, 428, 3, 4, 5, 412,
2072 310, 401, 131, 27, 6, 7, 105, 80, 81, 43,
2073 465, 139, 131, 401, 85, 401, 155, 146, 57, 11,
2074 86, 529, 224, 401, 407, 8, 454, 146, 9, 107,
2075 402, 108, 10, 49, 50, 51, 58, 322, 52, 221,
2076 222, 405, 227, 225, 411, 474, 536, 228, 460, 489,
2077 537, 361, 568, 361, 361, 554, 361, 59, 313, 314,
2078 107, 421, 108, 61, 1, 159, 321, 3, 261, 5,
2079 87, 369, 107, 386, 108, 551, 315, 316, 366, 94,
2080 565, 91, 313, 314, 102, 313, 314, 571, 484, 361,
2081 95, 296, 297, 261, 299, 258, 2, 361, 361, 4,
2082 315, 316, 387, 315, 316, 388, 96, 300, 261, 261,
2083 261, 261, 261, 307, 308, 261, 107, 510, 108, 511,
2084 374, 384, 536, 131, 389, 99, 540, 313, 314, 114,
2085 115, 313, 314, 146, 98, 371, 107, 433, 108, 435,
2086 436, 437, 142, 143, 387, 315, 316, 388, 387, 315,
2087 316, 388, 233, 234, 235, 236, 361, 361, 361, 107,
2088 83, 108, 486, 263, 361, 541, 264, 37, 38, 39,
2089 -188, 146, 502, 100, 361, 361, 135, 45, 389, 46,
2090 389, 136, 367, 255, 156, -64, 1, 2, 219, 3,
2091 4, 5, 63, 64, 256, 311, 312, 6, 7, 368,
2092 217, 1, 2, 223, 3, 4, 5, 117, 118, 119,
2093 120, 121, 122, 220, 146, 385, 261, 361, 8, 361,
2094 226, 9, 361, 229, 107, 10, 108, 528, 361, 361,
2095 396, 397, 398, 399, 400, 512, 109, 110, 515, 516,
2096 517, -56, 404, 408, 409, 410, 556, -57, 82, 558,
2097 83, 107, 416, 108, 237, 259, 361, 361, 265, 361,
2098 361, 111, 323, 112, 330, 361, 331, 332, 342, 333,
2099 334, 343, 344, 345, 346, 361, 375, 376, 348, 377,
2100 261, 434, 261, 261, 261, 378, 379, 440, 383, 363,
2101 364, 393, 365, 380, 445, 446, 361, 444, 419, 394,
2102 552, 452, 63, 64, 361, 103, 66, 67, 68, 69,
2103 395, 1, 2, 422, 3, 4, 5, 423, 438, 566,
2104 432, 439, 443, 448, 457, 373, 449, 450, 451, 458,
2105 455, 456, 459, 381, 382, 462, 463, 464, 453, 468,
2106 361, 70, 472, 466, 467, 361, 469, 485, 490, 491,
2107 492, 493, 470, 474, 475, 495, 496, 477, 478, 479,
2108 483, 497, 361, 361, 487, 482, 501, 361, 488, 503,
2109 361, 428, 506, 514, 494, 522, 523, 532, 261, 524,
2110 525, 261, 261, 261, 548, 538, 506, 520, 521, 526,
2111 533, 498, 424, 425, 426, 527, 279, 280, 534, 550,
2112 431, 29, 30, 31, 32, 33, 34, 35, 542, 36,
2113 441, 442, 268, 269, 270, 271, 272, 273, 274, 275,
2114 276, 277, 544, 543, 545, 546, 559, 557, 560, 561,
2115 562, 569, 572, 573, 577, 574, 71, 578, 580, 72,
2116 555, 209, 73, 210, 74, 104, 211, 328, 126, 530,
2117 329, 141, 547, 471, 319, 473, 138, 327, 476, 498,
2118 44, 125, 93, 518, 480, 481, 281, 282, 283, 284,
2119 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
2120 0, 0, 447, 0, 0, 0, 0, 0, 0, 0,
2121 0, 0, 504, 505, 0, 508, 509, 37, 38, 39,
2122 0, 513, 0, 63, 64, 0, 103, 66, 67, 68,
2123 69, 519, 1, 2, 0, 3, 4, 5, 0, 0,
2124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2125 0, 0, 535, 0, 0, 0, 0, 0, 0, 0,
2126 539, 0, 70, 349, 350, 0, 0, 63, 64, 351,
2127 0, 0, 0, 0, 0, 0, 1, 2, 0, 3,
2128 4, 5, 352, 353, 354, 0, 0, 0, 0, 0,
2129 0, 0, 0, 0, 0, 0, 563, 355, 356, 0,
2130 0, 567, 0, 0, 0, 0, 0, 0, 0, 0,
2131 0, 0, 0, 0, 357, 0, 0, 0, 575, 576,
2132 0, 0, 0, 579, 0, 0, 581, 0, 0, 0,
2133 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
2134 180, 181, 182, 183, 184, 241, 242, 0, 0, 0,
2135 0, 0, 0, 0, 0, 0, 0, 71, 0, 0,
2136 72, 0, 0, 73, 0, 74, 137, 0, 0, 0,
2137 0, 0, 243, 191, 192, 193, 194, 195, 196, 197,
2138 198, 199, 200, 201, 202, 0, 244, 0, 245, 246,
2139 247, 0, 349, 350, 0, 0, 63, 64, 351, 0,
2140 107, 0, 108, 0, 0, 1, 2, 358, 3, 4,
2141 5, 352, 353, 354, 0, 0, 0, 0, 0, 0,
2142 0, 0, 0, 0, 0, 0, 355, 356, 0, 0,
2143 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2144 0, 0, 0, 357, 0, 0, 0, 0, 0, 0,
2145 0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
2146 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
2147 181, 182, 183, 184, 241, 242, 0, 63, 64, 0,
2148 103, 149, 150, 151, 69, 0, 1, 2, 0, 3,
2149 4, 5, 0, 0, 0, 0, 0, 0, 0, 0,
2150 0, 243, 191, 192, 193, 194, 195, 196, 197, 198,
2151 199, 200, 201, 202, 0, 244, 70, 245, 246, 247,
2152 63, 64, 0, 0, 0, 0, 0, 0, 0, 1,
2153 2, 0, 3, 4, 5, 238, 358, 0, 0, 0,
2154 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2155 239, 240, 0, 0, 0, 0, 0, 0, 0, 0,
2156 0, 63, 64, 0, 103, 149, 150, 151, 69, 0,
2157 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2158 0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
2159 177, 178, 179, 180, 181, 182, 183, 184, 241, 242,
2160 70, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2161 0, 71, 0, 0, 72, 0, 0, 73, 0, 74,
2162 340, 0, 0, 0, 0, 243, 191, 192, 193, 194,
2163 195, 196, 197, 198, 199, 200, 201, 202, 0, 244,
2164 0, 245, 246, 247, 0, 0, 349, 350, 0, 0,
2165 0, 0, 351, 107, 0, 108, 0, 248, 0, 0,
2166 249, 0, 250, 0, 251, 352, 353, 354, 0, 0,
2167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2168 355, 356, 0, 0, 0, 0, 0, 0, 0, 0,
2169 0, 0, 0, 0, 0, 71, 0, 357, 72, 0,
2170 0, 73, 0, 74, 403, 0, 0, 0, 0, 0,
2171 0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
2172 177, 178, 179, 180, 181, 182, 183, 184, 241, 242,
2173 0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
2174 64, 0, 103, 66, 67, 68, 69, 0, 1, 2,
2175 0, 3, 4, 5, 0, 243, 191, 192, 193, 194,
2176 195, 196, 197, 198, 199, 200, 201, 202, 130, 244,
2177 0, 245, 246, 247, 0, 0, 0, 0, 70, 63,
2178 64, 0, 144, 66, 67, 68, 69, 0, 1, 2,
2179 358, 3, 4, 5, 63, 64, 0, 103, 66, 67,
2180 68, 69, 0, 1, 2, 0, 3, 4, 5, 0,
2181 0, 0, 0, 0, 0, 0, 0, 0, 70, 0,
2182 0, 0, 0, 318, 0, 63, 64, 0, 103, 149,
2183 150, 151, 69, 70, 1, 2, 0, 3, 4, 5,
2184 0, 63, 64, 0, 103, 66, 67, 68, 69, 0,
2185 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2186 0, 0, 0, 0, 70, 0, 0, 0, 0, 0,
2187 415, 0, 0, 71, 0, 0, 72, 0, 0, 73,
2188 70, 74, 0, 0, 0, 0, 0, 0, 63, 64,
2189 145, 103, 66, 67, 68, 69, 0, 1, 2, 0,
2190 3, 4, 5, 0, 0, 0, 0, 0, 0, 0,
2191 0, 0, 0, 71, 0, 0, 72, 500, 0, 73,
2192 0, 74, 0, 0, 0, 0, 0, 70, 71, 0,
2193 0, 72, 0, 0, 73, 0, 74, 63, 64, 0,
2194 65, 66, 67, 68, 69, 0, 1, 2, 0, 3,
2195 4, 5, 0, 0, 0, 0, 0, 0, 0, 71,
2196 0, 0, 72, 0, 335, 73, 0, 74, 0, 0,
2197 0, 0, 0, 0, 0, 71, 70, 0, 72, 0,
2198 0, 73, 0, 74, 63, 64, 0, 103, 149, 150,
2199 151, 69, 0, 1, 2, 0, 3, 4, 5, 63,
2200 64, 0, 144, 66, 67, 68, 69, 0, 1, 2,
2201 0, 3, 4, 5, 0, 0, 0, 0, 0, 0,
2202 0, 0, 71, 70, 0, 72, 0, 0, 73, 0,
2203 74, 0, 0, 0, 0, 0, 63, 64, 70, 103,
2204 66, 67, 68, 69, 0, 1, 2, 0, 3, 4,
2205 5, 63, 64, 0, 260, 66, 67, 68, 69, 0,
2206 1, 2, 0, 3, 4, 5, 0, 0, 0, 0,
2207 0, 71, 0, 0, 72, 70, 0, 73, 0, 74,
2208 0, 0, 0, 0, 0, 0, 0, 0, 63, 64,
2209 70, 103, 149, 150, 151, 69, 0, 1, 2, 0,
2210 3, 4, 5, 0, 0, 0, 0, 0, 0, 0,
2211 0, 0, 0, 0, 0, 0, 0, 0, 71, 0,
2212 0, 72, 0, 0, 73, 0, 74, 70, 0, 0,
2213 0, 0, 0, 71, 0, 0, 72, 0, 0, 73,
2214 0, 74, 0, 0, 0, 0, 0, 0, 0, 0,
2215 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2216 0, 0, 0, 161, 0, 0, 0, 0, 0, 0,
2217 71, 0, 0, 72, 0, 0, 73, 0, 74, 0,
2218 0, 0, 162, 163, 0, 71, 0, 0, 72, 0,
2219 0, 73, 0, 74, 164, 165, 166, 167, 168, 169,
2220 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
2221 180, 181, 182, 183, 184, 185, 186, 0, 0, 0,
2222 0, 0, 71, 0, 0, 72, 0, 0, 73, 0,
2223 338, 0, 0, 0, 0, 0, 0, 187, 188, 189,
2224 0, 0, 190, 191, 192, 193, 194, 195, 196, 197,
2225 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
2226 208
2227};
2228
2229static const short int yycheck[] =
2230{
2231 0, 27, 166, 154, 123, 226, 416, 147, 0, 4,
2232 11, 25, 320, 297, 154, 11, 324, 17, 138, 18,
2233 189, 11, 249, 250, 167, 17, 11, 26, 138, 325,
2234 326, 3, 4, 5, 6, 204, 205, 206, 207, 208,
2235 139, 49, 211, 54, 552, 139, 139, 0, 74, 148,
2236 31, 23, 24, 146, 16, 63, 150, 19, 566, 21,
2237 50, 138, 15, 16, 17, 50, 19, 20, 21, 50,
2238 213, 139, 98, 15, 27, 28, 102, 40, 41, 0,
2239 148, 139, 108, 139, 47, 139, 116, 113, 138, 89,
2240 53, 501, 150, 139, 150, 48, 150, 123, 51, 140,
2241 146, 142, 55, 39, 40, 41, 138, 148, 44, 135,
2242 136, 338, 142, 139, 31, 139, 139, 143, 414, 143,
2243 143, 261, 35, 263, 264, 535, 266, 144, 114, 115,
2244 140, 358, 142, 19, 16, 149, 146, 19, 164, 21,
2245 18, 139, 140, 312, 142, 146, 132, 133, 267, 19,
2246 146, 150, 114, 115, 149, 114, 115, 567, 442, 299,
2247 19, 187, 188, 189, 190, 157, 17, 307, 308, 20,
2248 132, 133, 131, 132, 133, 134, 19, 203, 204, 205,
2249 206, 207, 208, 209, 210, 211, 140, 471, 142, 473,
2250 144, 310, 139, 219, 502, 4, 143, 114, 115, 29,
2251 30, 114, 115, 229, 142, 139, 140, 376, 142, 378,
2252 379, 380, 109, 110, 131, 132, 133, 134, 131, 132,
2253 133, 134, 3, 4, 5, 6, 366, 367, 368, 140,
2254 34, 142, 143, 11, 374, 519, 14, 135, 136, 137,
2255 0, 267, 463, 4, 384, 385, 145, 43, 556, 45,
2256 558, 145, 278, 404, 4, 15, 16, 17, 139, 19,
2257 20, 21, 7, 8, 404, 110, 111, 27, 28, 295,
2258 19, 16, 17, 148, 19, 20, 21, 57, 58, 59,
2259 60, 61, 62, 143, 310, 311, 312, 427, 48, 429,
2260 143, 51, 432, 142, 140, 55, 142, 143, 438, 439,
2261 330, 331, 332, 333, 334, 474, 80, 81, 477, 478,
2262 479, 9, 338, 343, 344, 345, 537, 9, 32, 540,
2263 34, 140, 348, 142, 9, 52, 466, 467, 11, 469,
2264 470, 39, 148, 41, 142, 475, 142, 142, 19, 142,
2265 142, 142, 142, 142, 139, 485, 139, 139, 142, 139,
2266 376, 377, 378, 379, 380, 139, 139, 383, 35, 263,
2267 264, 35, 266, 139, 394, 395, 506, 393, 56, 142,
2268 534, 401, 7, 8, 514, 10, 11, 12, 13, 14,
2269 142, 16, 17, 139, 19, 20, 21, 139, 139, 553,
2270 144, 139, 139, 139, 35, 299, 139, 139, 139, 19,
2271 139, 139, 4, 307, 308, 139, 143, 19, 148, 142,
2272 550, 46, 4, 14, 14, 555, 139, 443, 448, 449,
2273 450, 451, 139, 139, 139, 455, 456, 139, 139, 139,
2274 139, 457, 572, 573, 139, 142, 462, 577, 139, 139,
2275 580, 50, 468, 139, 148, 139, 143, 19, 474, 139,
2276 139, 477, 478, 479, 50, 146, 482, 487, 488, 143,
2277 139, 461, 366, 367, 368, 143, 23, 24, 144, 14,
2278 374, 39, 40, 41, 42, 43, 44, 45, 143, 47,
2279 384, 385, 87, 88, 89, 90, 91, 92, 93, 94,
2280 95, 96, 522, 143, 524, 525, 143, 146, 143, 143,
2281 4, 139, 14, 14, 14, 139, 141, 68, 14, 144,
2282 536, 126, 147, 126, 149, 150, 126, 241, 89, 502,
2283 242, 108, 529, 427, 219, 429, 102, 229, 432, 529,
2284 17, 86, 56, 482, 438, 439, 93, 94, 95, 96,
2285 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
2286 -1, -1, 396, -1, -1, -1, -1, -1, -1, -1,
2287 -1, -1, 466, 467, -1, 469, 470, 135, 136, 137,
2288 -1, 475, -1, 7, 8, -1, 10, 11, 12, 13,
2289 14, 485, 16, 17, -1, 19, 20, 21, -1, -1,
2290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2291 -1, -1, 506, -1, -1, -1, -1, -1, -1, -1,
2292 514, -1, 46, 3, 4, -1, -1, 7, 8, 9,
2293 -1, -1, -1, -1, -1, -1, 16, 17, -1, 19,
2294 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
2295 -1, -1, -1, -1, -1, -1, 550, 37, 38, -1,
2296 -1, 555, -1, -1, -1, -1, -1, -1, -1, -1,
2297 -1, -1, -1, -1, 54, -1, -1, -1, 572, 573,
2298 -1, -1, -1, 577, -1, -1, 580, -1, -1, -1,
2299 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2300 80, 81, 82, 83, 84, 85, 86, -1, -1, -1,
2301 -1, -1, -1, -1, -1, -1, -1, 141, -1, -1,
2302 144, -1, -1, 147, -1, 149, 150, -1, -1, -1,
2303 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
2304 120, 121, 122, 123, 124, -1, 126, -1, 128, 129,
2305 130, -1, 3, 4, -1, -1, 7, 8, 9, -1,
2306 140, -1, 142, -1, -1, 16, 17, 147, 19, 20,
2307 21, 22, 23, 24, -1, -1, -1, -1, -1, -1,
2308 -1, -1, -1, -1, -1, -1, 37, 38, -1, -1,
2309 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2310 -1, -1, -1, 54, -1, -1, -1, -1, -1, -1,
2311 -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
2312 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
2313 81, 82, 83, 84, 85, 86, -1, 7, 8, -1,
2314 10, 11, 12, 13, 14, -1, 16, 17, -1, 19,
2315 20, 21, -1, -1, -1, -1, -1, -1, -1, -1,
2316 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
2317 121, 122, 123, 124, -1, 126, 46, 128, 129, 130,
2318 7, 8, -1, -1, -1, -1, -1, -1, -1, 16,
2319 17, -1, 19, 20, 21, 22, 147, -1, -1, -1,
2320 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2321 37, 38, -1, -1, -1, -1, -1, -1, -1, -1,
2322 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2323 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2324 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
2325 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2326 46, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2327 -1, 141, -1, -1, 144, -1, -1, 147, -1, 149,
2328 150, -1, -1, -1, -1, 112, 113, 114, 115, 116,
2329 117, 118, 119, 120, 121, 122, 123, 124, -1, 126,
2330 -1, 128, 129, 130, -1, -1, 3, 4, -1, -1,
2331 -1, -1, 9, 140, -1, 142, -1, 144, -1, -1,
2332 147, -1, 149, -1, 151, 22, 23, 24, -1, -1,
2333 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2334 37, 38, -1, -1, -1, -1, -1, -1, -1, -1,
2335 -1, -1, -1, -1, -1, 141, -1, 54, 144, -1,
2336 -1, 147, -1, 149, 150, -1, -1, -1, -1, -1,
2337 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
2338 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
2339 -1, -1, -1, -1, -1, -1, -1, -1, -1, 7,
2340 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2341 -1, 19, 20, 21, -1, 112, 113, 114, 115, 116,
2342 117, 118, 119, 120, 121, 122, 123, 124, 36, 126,
2343 -1, 128, 129, 130, -1, -1, -1, -1, 46, 7,
2344 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2345 147, 19, 20, 21, 7, 8, -1, 10, 11, 12,
2346 13, 14, -1, 16, 17, -1, 19, 20, 21, -1,
2347 -1, -1, -1, -1, -1, -1, -1, -1, 46, -1,
2348 -1, -1, -1, 36, -1, 7, 8, -1, 10, 11,
2349 12, 13, 14, 46, 16, 17, -1, 19, 20, 21,
2350 -1, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2351 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2352 -1, -1, -1, -1, 46, -1, -1, -1, -1, -1,
2353 36, -1, -1, 141, -1, -1, 144, -1, -1, 147,
2354 46, 149, -1, -1, -1, -1, -1, -1, 7, 8,
2355 118, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2356 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
2357 -1, -1, -1, 141, -1, -1, 144, 36, -1, 147,
2358 -1, 149, -1, -1, -1, -1, -1, 46, 141, -1,
2359 -1, 144, -1, -1, 147, -1, 149, 7, 8, -1,
2360 10, 11, 12, 13, 14, -1, 16, 17, -1, 19,
2361 20, 21, -1, -1, -1, -1, -1, -1, -1, 141,
2362 -1, -1, 144, -1, 146, 147, -1, 149, -1, -1,
2363 -1, -1, -1, -1, -1, 141, 46, -1, 144, -1,
2364 -1, 147, -1, 149, 7, 8, -1, 10, 11, 12,
2365 13, 14, -1, 16, 17, -1, 19, 20, 21, 7,
2366 8, -1, 10, 11, 12, 13, 14, -1, 16, 17,
2367 -1, 19, 20, 21, -1, -1, -1, -1, -1, -1,
2368 -1, -1, 141, 46, -1, 144, -1, -1, 147, -1,
2369 149, -1, -1, -1, -1, -1, 7, 8, 46, 10,
2370 11, 12, 13, 14, -1, 16, 17, -1, 19, 20,
2371 21, 7, 8, -1, 10, 11, 12, 13, 14, -1,
2372 16, 17, -1, 19, 20, 21, -1, -1, -1, -1,
2373 -1, 141, -1, -1, 144, 46, -1, 147, -1, 149,
2374 -1, -1, -1, -1, -1, -1, -1, -1, 7, 8,
2375 46, 10, 11, 12, 13, 14, -1, 16, 17, -1,
2376 19, 20, 21, -1, -1, -1, -1, -1, -1, -1,
2377 -1, -1, -1, -1, -1, -1, -1, -1, 141, -1,
2378 -1, 144, -1, -1, 147, -1, 149, 46, -1, -1,
2379 -1, -1, -1, 141, -1, -1, 144, -1, -1, 147,
2380 -1, 149, -1, -1, -1, -1, -1, -1, -1, -1,
2381 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2382 -1, -1, -1, 33, -1, -1, -1, -1, -1, -1,
2383 141, -1, -1, 144, -1, -1, 147, -1, 149, -1,
2384 -1, -1, 52, 53, -1, 141, -1, -1, 144, -1,
2385 -1, 147, -1, 149, 64, 65, 66, 67, 68, 69,
2386 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2387 80, 81, 82, 83, 84, 85, 86, -1, -1, -1,
2388 -1, -1, 141, -1, -1, 144, -1, -1, 147, -1,
2389 149, -1, -1, -1, -1, -1, -1, 107, 108, 109,
2390 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119,
2391 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
2392 130
2393};
2394
2395/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
2396 symbol of state STATE-NUM. */
2397static const unsigned char yystos[] =
2398{
2399 0, 16, 17, 19, 20, 21, 27, 28, 48, 51,
2400 55, 160, 162, 163, 164, 165, 196, 197, 198, 200,
2401 199, 49, 63, 205, 138, 54, 138, 15, 138, 39,
2402 40, 41, 42, 43, 44, 45, 47, 135, 136, 137,
2403 166, 167, 168, 0, 198, 43, 45, 169, 215, 39,
2404 40, 41, 44, 170, 212, 214, 221, 138, 138, 144,
2405 206, 19, 204, 7, 8, 10, 11, 12, 13, 14,
2406 46, 141, 144, 147, 149, 160, 163, 183, 184, 218,
2407 168, 168, 32, 34, 194, 168, 168, 18, 222, 223,
2408 26, 150, 213, 222, 19, 19, 19, 207, 142, 4,
2409 4, 4, 149, 10, 150, 184, 189, 140, 142, 194,
2410 194, 39, 41, 171, 29, 30, 193, 57, 58, 59,
2411 60, 61, 62, 172, 210, 210, 162, 226, 139, 146,
2412 36, 184, 185, 187, 188, 145, 145, 150, 189, 139,
2413 150, 188, 193, 193, 10, 118, 184, 186, 195, 11,
2414 12, 13, 158, 159, 184, 190, 4, 186, 25, 149,
2415 211, 33, 52, 53, 64, 65, 66, 67, 68, 69,
2416 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
2417 80, 81, 82, 83, 84, 85, 86, 107, 108, 109,
2418 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
2419 122, 123, 124, 125, 126, 127, 128, 129, 130, 153,
2420 154, 155, 224, 230, 231, 232, 233, 19, 174, 139,
2421 143, 184, 184, 148, 150, 184, 143, 190, 184, 142,
2422 218, 23, 24, 3, 4, 5, 6, 9, 22, 37,
2423 38, 85, 86, 112, 126, 128, 129, 130, 144, 147,
2424 149, 151, 153, 154, 155, 191, 218, 201, 163, 52,
2425 10, 184, 220, 11, 14, 11, 158, 172, 87, 88,
2426 89, 90, 91, 92, 93, 94, 95, 96, 156, 23,
2427 24, 93, 94, 95, 96, 97, 98, 99, 100, 101,
2428 102, 103, 104, 105, 106, 157, 184, 184, 220, 184,
2429 184, 227, 220, 220, 220, 220, 220, 184, 184, 220,
2430 172, 110, 111, 114, 115, 132, 133, 173, 36, 185,
2431 176, 146, 148, 148, 176, 202, 203, 195, 156, 157,
2432 142, 142, 142, 142, 142, 146, 190, 192, 149, 192,
2433 150, 192, 19, 142, 142, 142, 139, 181, 142, 3,
2434 4, 9, 22, 23, 24, 37, 38, 54, 147, 191,
2435 217, 218, 219, 219, 219, 219, 186, 184, 184, 139,
2436 178, 139, 178, 219, 144, 139, 139, 139, 139, 139,
2437 139, 219, 219, 35, 186, 184, 220, 131, 134, 173,
2438 175, 181, 181, 35, 142, 142, 190, 190, 190, 190,
2439 190, 139, 146, 150, 184, 192, 148, 150, 190, 190,
2440 190, 31, 50, 179, 182, 36, 184, 208, 209, 56,
2441 216, 192, 139, 139, 219, 219, 219, 11, 50, 11,
2442 229, 219, 144, 220, 184, 220, 220, 220, 139, 139,
2443 184, 219, 219, 139, 184, 190, 190, 229, 139, 139,
2444 139, 139, 190, 148, 150, 139, 139, 35, 19, 4,
2445 181, 174, 139, 143, 19, 148, 14, 14, 142, 139,
2446 139, 219, 4, 219, 139, 139, 219, 139, 139, 139,
2447 219, 219, 142, 139, 178, 184, 143, 139, 139, 143,
2448 190, 190, 190, 190, 148, 190, 190, 184, 160, 161,
2449 36, 184, 176, 139, 219, 219, 184, 228, 219, 219,
2450 178, 178, 220, 219, 139, 220, 220, 220, 228, 219,
2451 190, 190, 139, 143, 139, 139, 143, 143, 143, 174,
2452 179, 180, 19, 139, 144, 219, 139, 143, 146, 219,
2453 143, 178, 143, 143, 190, 190, 190, 161, 50, 177,
2454 14, 146, 158, 225, 174, 184, 176, 146, 176, 143,
2455 143, 143, 4, 219, 217, 146, 158, 219, 35, 139,
2456 217, 174, 14, 14, 139, 219, 219, 14, 68, 219,
2457 14, 219
2458};
Reid Spencer68a24bd2005-08-27 18:50:39 +00002459
2460#define yyerrok (yyerrstatus = 0)
2461#define yyclearin (yychar = YYEMPTY)
Reid Spencered951ea2007-05-19 07:22:10 +00002462#define YYEMPTY (-2)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002463#define YYEOF 0
Reid Spencered951ea2007-05-19 07:22:10 +00002464
Reid Spencer68a24bd2005-08-27 18:50:39 +00002465#define YYACCEPT goto yyacceptlab
Reid Spencered951ea2007-05-19 07:22:10 +00002466#define YYABORT goto yyabortlab
2467#define YYERROR goto yyerrorlab
2468
2469
2470/* Like YYERROR except do call yyerror. This remains here temporarily
2471 to ease the transition to the new meaning of YYERROR, for GCC.
Reid Spencer68a24bd2005-08-27 18:50:39 +00002472 Once GCC version 2 has supplanted version 1, this can go. */
Reid Spencered951ea2007-05-19 07:22:10 +00002473
Reid Spencer68a24bd2005-08-27 18:50:39 +00002474#define YYFAIL goto yyerrlab
Reid Spencered951ea2007-05-19 07:22:10 +00002475
Reid Spencer68a24bd2005-08-27 18:50:39 +00002476#define YYRECOVERING() (!!yyerrstatus)
Reid Spencered951ea2007-05-19 07:22:10 +00002477
2478#define YYBACKUP(Token, Value) \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002479do \
2480 if (yychar == YYEMPTY && yylen == 1) \
Reid Spencered951ea2007-05-19 07:22:10 +00002481 { \
2482 yychar = (Token); \
2483 yylval = (Value); \
2484 yytoken = YYTRANSLATE (yychar); \
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002485 YYPOPSTACK; \
Reid Spencer68a24bd2005-08-27 18:50:39 +00002486 goto yybackup; \
2487 } \
2488 else \
Reid Spencered951ea2007-05-19 07:22:10 +00002489 { \
2490 yyerror (YY_("syntax error: cannot back up")); \
2491 YYERROR; \
2492 } \
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002493while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002494
Reid Spencered951ea2007-05-19 07:22:10 +00002495
Reid Spencer68a24bd2005-08-27 18:50:39 +00002496#define YYTERROR 1
2497#define YYERRCODE 256
2498
Reid Spencered951ea2007-05-19 07:22:10 +00002499
2500/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
2501 If N is 0, then set CURRENT to the empty location which ends
2502 the previous symbol: RHS[0] (always defined). */
2503
2504#define YYRHSLOC(Rhs, K) ((Rhs)[K])
2505#ifndef YYLLOC_DEFAULT
2506# define YYLLOC_DEFAULT(Current, Rhs, N) \
2507 do \
2508 if (N) \
2509 { \
2510 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
2511 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
2512 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
2513 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
2514 } \
2515 else \
2516 { \
2517 (Current).first_line = (Current).last_line = \
2518 YYRHSLOC (Rhs, 0).last_line; \
2519 (Current).first_column = (Current).last_column = \
2520 YYRHSLOC (Rhs, 0).last_column; \
2521 } \
2522 while (0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002523#endif
2524
Reid Spencered951ea2007-05-19 07:22:10 +00002525
2526/* YY_LOCATION_PRINT -- Print the location on the stream.
2527 This macro was not mandated originally: define only if we know
2528 we won't break user code: when these are the locations we know. */
2529
2530#ifndef YY_LOCATION_PRINT
2531# if YYLTYPE_IS_TRIVIAL
2532# define YY_LOCATION_PRINT(File, Loc) \
2533 fprintf (File, "%d.%d-%d.%d", \
2534 (Loc).first_line, (Loc).first_column, \
2535 (Loc).last_line, (Loc).last_column)
2536# else
2537# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
2538# endif
2539#endif
2540
2541
2542/* YYLEX -- calling `yylex' with the right arguments. */
2543
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002544#ifdef YYLEX_PARAM
Reid Spencered951ea2007-05-19 07:22:10 +00002545# define YYLEX yylex (YYLEX_PARAM)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002546#else
Reid Spencered951ea2007-05-19 07:22:10 +00002547# define YYLEX yylex ()
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002548#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002549
2550/* Enable debugging if requested. */
2551#if YYDEBUG
2552
2553# ifndef YYFPRINTF
2554# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2555# define YYFPRINTF fprintf
2556# endif
2557
2558# define YYDPRINTF(Args) \
2559do { \
2560 if (yydebug) \
2561 YYFPRINTF Args; \
2562} while (0)
2563
2564# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
2565do { \
2566 if (yydebug) \
2567 { \
2568 YYFPRINTF (stderr, "%s ", Title); \
2569 yysymprint (stderr, \
2570 Type, Value); \
2571 YYFPRINTF (stderr, "\n"); \
2572 } \
2573} while (0)
2574
2575/*------------------------------------------------------------------.
2576| yy_stack_print -- Print the state stack from its BOTTOM up to its |
2577| TOP (included). |
2578`------------------------------------------------------------------*/
2579
2580#if defined (__STDC__) || defined (__cplusplus)
2581static void
2582yy_stack_print (short int *bottom, short int *top)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002583#else
Reid Spencered951ea2007-05-19 07:22:10 +00002584static void
2585yy_stack_print (bottom, top)
2586 short int *bottom;
2587 short int *top;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002588#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002589{
2590 YYFPRINTF (stderr, "Stack now");
2591 for (/* Nothing. */; bottom <= top; ++bottom)
2592 YYFPRINTF (stderr, " %d", *bottom);
2593 YYFPRINTF (stderr, "\n");
2594}
2595
2596# define YY_STACK_PRINT(Bottom, Top) \
2597do { \
2598 if (yydebug) \
2599 yy_stack_print ((Bottom), (Top)); \
2600} while (0)
2601
2602
2603/*------------------------------------------------.
2604| Report that the YYRULE is going to be reduced. |
2605`------------------------------------------------*/
2606
2607#if defined (__STDC__) || defined (__cplusplus)
2608static void
2609yy_reduce_print (int yyrule)
2610#else
2611static void
2612yy_reduce_print (yyrule)
2613 int yyrule;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002614#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002615{
2616 int yyi;
2617 unsigned long int yylno = yyrline[yyrule];
2618 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ",
2619 yyrule - 1, yylno);
2620 /* Print the symbols being reduced, and their result. */
2621 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
2622 YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]);
2623 YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]);
2624}
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002625
Reid Spencered951ea2007-05-19 07:22:10 +00002626# define YY_REDUCE_PRINT(Rule) \
2627do { \
2628 if (yydebug) \
2629 yy_reduce_print (Rule); \
2630} while (0)
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002631
Reid Spencered951ea2007-05-19 07:22:10 +00002632/* Nonzero means print parse trace. It is left uninitialized so that
2633 multiple parsers can coexist. */
2634int yydebug;
2635#else /* !YYDEBUG */
2636# define YYDPRINTF(Args)
2637# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
2638# define YY_STACK_PRINT(Bottom, Top)
2639# define YY_REDUCE_PRINT(Rule)
2640#endif /* !YYDEBUG */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002641
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002642
Reid Spencered951ea2007-05-19 07:22:10 +00002643/* YYINITDEPTH -- initial size of the parser's stacks. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002644#ifndef YYINITDEPTH
Reid Spencered951ea2007-05-19 07:22:10 +00002645# define YYINITDEPTH 200
Reid Spencer68a24bd2005-08-27 18:50:39 +00002646#endif
2647
Reid Spencered951ea2007-05-19 07:22:10 +00002648/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2649 if the built-in stack extension method is used).
Reid Spencer68a24bd2005-08-27 18:50:39 +00002650
Reid Spencered951ea2007-05-19 07:22:10 +00002651 Do not make this value too large; the results are undefined if
2652 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2653 evaluated with infinite-precision integer arithmetic. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00002654
2655#ifndef YYMAXDEPTH
Reid Spencered951ea2007-05-19 07:22:10 +00002656# define YYMAXDEPTH 10000
Reid Spencer68a24bd2005-08-27 18:50:39 +00002657#endif
Reid Spencered951ea2007-05-19 07:22:10 +00002658
Reid Spencer68a24bd2005-08-27 18:50:39 +00002659
2660
Reid Spencered951ea2007-05-19 07:22:10 +00002661#if YYERROR_VERBOSE
Reid Spencer68a24bd2005-08-27 18:50:39 +00002662
Reid Spencered951ea2007-05-19 07:22:10 +00002663# ifndef yystrlen
2664# if defined (__GLIBC__) && defined (_STRING_H)
2665# define yystrlen strlen
2666# else
2667/* Return the length of YYSTR. */
2668static YYSIZE_T
2669# if defined (__STDC__) || defined (__cplusplus)
2670yystrlen (const char *yystr)
2671# else
2672yystrlen (yystr)
2673 const char *yystr;
2674# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002675{
Reid Spencered951ea2007-05-19 07:22:10 +00002676 const char *yys = yystr;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002677
Reid Spencered951ea2007-05-19 07:22:10 +00002678 while (*yys++ != '\0')
2679 continue;
2680
2681 return yys - yystr - 1;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002682}
Reid Spencered951ea2007-05-19 07:22:10 +00002683# endif
2684# endif
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002685
Reid Spencered951ea2007-05-19 07:22:10 +00002686# ifndef yystpcpy
2687# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
2688# define yystpcpy stpcpy
2689# else
2690/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
2691 YYDEST. */
2692static char *
2693# if defined (__STDC__) || defined (__cplusplus)
2694yystpcpy (char *yydest, const char *yysrc)
2695# else
2696yystpcpy (yydest, yysrc)
2697 char *yydest;
2698 const char *yysrc;
2699# endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002700{
Reid Spencered951ea2007-05-19 07:22:10 +00002701 char *yyd = yydest;
2702 const char *yys = yysrc;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002703
Reid Spencered951ea2007-05-19 07:22:10 +00002704 while ((*yyd++ = *yys++) != '\0')
2705 continue;
2706
2707 return yyd - 1;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002708}
Reid Spencered951ea2007-05-19 07:22:10 +00002709# endif
2710# endif
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002711
Reid Spencered951ea2007-05-19 07:22:10 +00002712# ifndef yytnamerr
2713/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
2714 quotes and backslashes, so that it's suitable for yyerror. The
2715 heuristic is that double-quoting is unnecessary unless the string
2716 contains an apostrophe, a comma, or backslash (other than
2717 backslash-backslash). YYSTR is taken from yytname. If YYRES is
2718 null, do not copy; instead, return the length of what the result
2719 would have been. */
2720static YYSIZE_T
2721yytnamerr (char *yyres, const char *yystr)
2722{
2723 if (*yystr == '"')
2724 {
2725 size_t yyn = 0;
2726 char const *yyp = yystr;
2727
2728 for (;;)
2729 switch (*++yyp)
2730 {
2731 case '\'':
2732 case ',':
2733 goto do_not_strip_quotes;
2734
2735 case '\\':
2736 if (*++yyp != '\\')
2737 goto do_not_strip_quotes;
2738 /* Fall through. */
2739 default:
2740 if (yyres)
2741 yyres[yyn] = *yyp;
2742 yyn++;
2743 break;
2744
2745 case '"':
2746 if (yyres)
2747 yyres[yyn] = '\0';
2748 return yyn;
2749 }
2750 do_not_strip_quotes: ;
2751 }
2752
2753 if (! yyres)
2754 return yystrlen (yystr);
2755
2756 return yystpcpy (yyres, yystr) - yyres;
2757}
2758# endif
2759
2760#endif /* YYERROR_VERBOSE */
2761
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002762
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002763
Reid Spencered951ea2007-05-19 07:22:10 +00002764#if YYDEBUG
2765/*--------------------------------.
2766| Print this symbol on YYOUTPUT. |
2767`--------------------------------*/
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002768
Reid Spencered951ea2007-05-19 07:22:10 +00002769#if defined (__STDC__) || defined (__cplusplus)
2770static void
2771yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002772#else
Reid Spencered951ea2007-05-19 07:22:10 +00002773static void
2774yysymprint (yyoutput, yytype, yyvaluep)
2775 FILE *yyoutput;
2776 int yytype;
2777 YYSTYPE *yyvaluep;
2778#endif
2779{
2780 /* Pacify ``unused variable'' warnings. */
2781 (void) yyvaluep;
2782
2783 if (yytype < YYNTOKENS)
2784 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
2785 else
2786 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
2787
2788
2789# ifdef YYPRINT
2790 if (yytype < YYNTOKENS)
2791 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
2792# endif
2793 switch (yytype)
2794 {
2795 default:
2796 break;
2797 }
2798 YYFPRINTF (yyoutput, ")");
2799}
2800
2801#endif /* ! YYDEBUG */
2802/*-----------------------------------------------.
2803| Release the memory associated to this symbol. |
2804`-----------------------------------------------*/
2805
2806#if defined (__STDC__) || defined (__cplusplus)
2807static void
2808yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
2809#else
2810static void
2811yydestruct (yymsg, yytype, yyvaluep)
2812 const char *yymsg;
2813 int yytype;
2814 YYSTYPE *yyvaluep;
2815#endif
2816{
2817 /* Pacify ``unused variable'' warnings. */
2818 (void) yyvaluep;
2819
2820 if (!yymsg)
2821 yymsg = "Deleting";
2822 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
2823
2824 switch (yytype)
2825 {
2826
2827 default:
2828 break;
2829 }
2830}
2831
2832
2833/* Prevent warnings from -Wmissing-prototypes. */
2834
2835#ifdef YYPARSE_PARAM
2836# if defined (__STDC__) || defined (__cplusplus)
2837int yyparse (void *YYPARSE_PARAM);
2838# else
2839int yyparse ();
2840# endif
2841#else /* ! YYPARSE_PARAM */
2842#if defined (__STDC__) || defined (__cplusplus)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00002843int yyparse (void);
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002844#else
Reid Spencered951ea2007-05-19 07:22:10 +00002845int yyparse ();
2846#endif
2847#endif /* ! YYPARSE_PARAM */
2848
2849
2850
2851/* The look-ahead symbol. */
2852int yychar;
2853
2854/* The semantic value of the look-ahead symbol. */
2855YYSTYPE yylval;
2856
2857/* Number of syntax errors so far. */
2858int yynerrs;
2859
2860
2861
2862/*----------.
2863| yyparse. |
2864`----------*/
2865
2866#ifdef YYPARSE_PARAM
2867# if defined (__STDC__) || defined (__cplusplus)
2868int yyparse (void *YYPARSE_PARAM)
2869# else
2870int yyparse (YYPARSE_PARAM)
2871 void *YYPARSE_PARAM;
2872# endif
2873#else /* ! YYPARSE_PARAM */
2874#if defined (__STDC__) || defined (__cplusplus)
2875int
2876yyparse (void)
2877#else
2878int
2879yyparse ()
2880
2881#endif
2882#endif
2883{
2884
2885 int yystate;
2886 int yyn;
2887 int yyresult;
2888 /* Number of tokens to shift before error messages enabled. */
2889 int yyerrstatus;
2890 /* Look-ahead token as an internal (translated) token number. */
2891 int yytoken = 0;
2892
2893 /* Three stacks and their tools:
2894 `yyss': related to states,
2895 `yyvs': related to semantic values,
2896 `yyls': related to locations.
2897
2898 Refer to the stacks thru separate pointers, to allow yyoverflow
2899 to reallocate them elsewhere. */
2900
2901 /* The state stack. */
2902 short int yyssa[YYINITDEPTH];
2903 short int *yyss = yyssa;
2904 short int *yyssp;
2905
2906 /* The semantic value stack. */
2907 YYSTYPE yyvsa[YYINITDEPTH];
2908 YYSTYPE *yyvs = yyvsa;
2909 YYSTYPE *yyvsp;
2910
2911
2912
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002913#define YYPOPSTACK (yyvsp--, yyssp--)
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00002914
Reid Spencered951ea2007-05-19 07:22:10 +00002915 YYSIZE_T yystacksize = YYINITDEPTH;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002916
Reid Spencered951ea2007-05-19 07:22:10 +00002917 /* The variables used to return semantic value and location from the
2918 action routines. */
2919 YYSTYPE yyval;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002920
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002921
Reid Spencered951ea2007-05-19 07:22:10 +00002922 /* When reducing, the number of symbols on the RHS of the reduced
2923 rule. */
Chris Lattner39b2e8b2007-05-04 04:01:37 +00002924 int yylen;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002925
Reid Spencered951ea2007-05-19 07:22:10 +00002926 YYDPRINTF ((stderr, "Starting parse\n"));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00002927
Reid Spencer68a24bd2005-08-27 18:50:39 +00002928 yystate = 0;
2929 yyerrstatus = 0;
2930 yynerrs = 0;
2931 yychar = YYEMPTY; /* Cause a token to be read. */
2932
2933 /* Initialize stack pointers.
2934 Waste one element of value and location stack
2935 so that they stay on the same level as the state stack.
2936 The wasted elements are never initialized. */
2937
Reid Spencered951ea2007-05-19 07:22:10 +00002938 yyssp = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002939 yyvsp = yyvs;
2940
Reid Spencered951ea2007-05-19 07:22:10 +00002941 goto yysetstate;
Jeff Cohen66c5fd62005-10-23 04:37:20 +00002942
Reid Spencered951ea2007-05-19 07:22:10 +00002943/*------------------------------------------------------------.
2944| yynewstate -- Push a new state, which is found in yystate. |
2945`------------------------------------------------------------*/
2946 yynewstate:
2947 /* In all cases, when you get here, the value and location stacks
2948 have just been pushed. so pushing a state here evens the stacks.
2949 */
2950 yyssp++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002951
Reid Spencered951ea2007-05-19 07:22:10 +00002952 yysetstate:
2953 *yyssp = yystate;
2954
2955 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002956 {
2957 /* Get the current used size of the three stacks, in elements. */
Reid Spencered951ea2007-05-19 07:22:10 +00002958 YYSIZE_T yysize = yyssp - yyss + 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002959
2960#ifdef yyoverflow
Reid Spencered951ea2007-05-19 07:22:10 +00002961 {
2962 /* Give user a chance to reallocate the stack. Use copies of
2963 these so that the &'s don't force the real ones into
2964 memory. */
2965 YYSTYPE *yyvs1 = yyvs;
2966 short int *yyss1 = yyss;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002967
Reid Spencered951ea2007-05-19 07:22:10 +00002968
2969 /* Each stack pointer address is followed by the size of the
2970 data in use in that stack, in bytes. This used to be a
2971 conditional around just the two extra args, but that might
2972 be undefined if yyoverflow is a macro. */
2973 yyoverflow (YY_("memory exhausted"),
2974 &yyss1, yysize * sizeof (*yyssp),
2975 &yyvs1, yysize * sizeof (*yyvsp),
2976
2977 &yystacksize);
2978
2979 yyss = yyss1;
2980 yyvs = yyvs1;
2981 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00002982#else /* no yyoverflow */
Reid Spencered951ea2007-05-19 07:22:10 +00002983# ifndef YYSTACK_RELOCATE
2984 goto yyexhaustedlab;
2985# else
Reid Spencer68a24bd2005-08-27 18:50:39 +00002986 /* Extend the stack our own way. */
Reid Spencered951ea2007-05-19 07:22:10 +00002987 if (YYMAXDEPTH <= yystacksize)
2988 goto yyexhaustedlab;
Reid Spencer68a24bd2005-08-27 18:50:39 +00002989 yystacksize *= 2;
Reid Spencered951ea2007-05-19 07:22:10 +00002990 if (YYMAXDEPTH < yystacksize)
Reid Spencer68a24bd2005-08-27 18:50:39 +00002991 yystacksize = YYMAXDEPTH;
Reid Spencered951ea2007-05-19 07:22:10 +00002992
2993 {
2994 short int *yyss1 = yyss;
2995 union yyalloc *yyptr =
2996 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
2997 if (! yyptr)
2998 goto yyexhaustedlab;
2999 YYSTACK_RELOCATE (yyss);
3000 YYSTACK_RELOCATE (yyvs);
3001
3002# undef YYSTACK_RELOCATE
3003 if (yyss1 != yyssa)
3004 YYSTACK_FREE (yyss1);
3005 }
3006# endif
Reid Spencer68a24bd2005-08-27 18:50:39 +00003007#endif /* no yyoverflow */
3008
Reid Spencered951ea2007-05-19 07:22:10 +00003009 yyssp = yyss + yysize - 1;
3010 yyvsp = yyvs + yysize - 1;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003011
3012
Reid Spencered951ea2007-05-19 07:22:10 +00003013 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3014 (unsigned long int) yystacksize));
3015
3016 if (yyss + yystacksize - 1 <= yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003017 YYABORT;
3018 }
3019
Reid Spencered951ea2007-05-19 07:22:10 +00003020 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003021
3022 goto yybackup;
Reid Spencered951ea2007-05-19 07:22:10 +00003023
3024/*-----------.
3025| yybackup. |
3026`-----------*/
3027yybackup:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003028
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003029/* Do appropriate processing given the current state. */
Reid Spencered951ea2007-05-19 07:22:10 +00003030/* Read a look-ahead token if we need one and don't already have one. */
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003031/* yyresume: */
Andrew Lenharth6353e052006-12-08 18:07:09 +00003032
Reid Spencered951ea2007-05-19 07:22:10 +00003033 /* First try to decide what to do without reference to look-ahead token. */
Reid Spencer7780acb2007-04-16 06:56:07 +00003034
Reid Spencer68a24bd2005-08-27 18:50:39 +00003035 yyn = yypact[yystate];
Reid Spencered951ea2007-05-19 07:22:10 +00003036 if (yyn == YYPACT_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003037 goto yydefault;
3038
Reid Spencered951ea2007-05-19 07:22:10 +00003039 /* Not known => get a look-ahead token if don't already have one. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003040
Reid Spencered951ea2007-05-19 07:22:10 +00003041 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003042 if (yychar == YYEMPTY)
3043 {
Reid Spencered951ea2007-05-19 07:22:10 +00003044 YYDPRINTF ((stderr, "Reading a token: "));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003045 yychar = YYLEX;
3046 }
3047
Reid Spencered951ea2007-05-19 07:22:10 +00003048 if (yychar <= YYEOF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003049 {
Reid Spencered951ea2007-05-19 07:22:10 +00003050 yychar = yytoken = YYEOF;
3051 YYDPRINTF ((stderr, "Now at end of input.\n"));
Reid Spencer68a24bd2005-08-27 18:50:39 +00003052 }
3053 else
3054 {
Reid Spencered951ea2007-05-19 07:22:10 +00003055 yytoken = YYTRANSLATE (yychar);
3056 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
Reid Spencer68a24bd2005-08-27 18:50:39 +00003057 }
3058
Reid Spencered951ea2007-05-19 07:22:10 +00003059 /* If the proper action on seeing token YYTOKEN is to reduce or to
3060 detect an error, take that action. */
3061 yyn += yytoken;
3062 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003063 goto yydefault;
3064 yyn = yytable[yyn];
Reid Spencered951ea2007-05-19 07:22:10 +00003065 if (yyn <= 0)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003066 {
Reid Spencered951ea2007-05-19 07:22:10 +00003067 if (yyn == 0 || yyn == YYTABLE_NINF)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003068 goto yyerrlab;
3069 yyn = -yyn;
3070 goto yyreduce;
3071 }
3072
3073 if (yyn == YYFINAL)
3074 YYACCEPT;
3075
Reid Spencered951ea2007-05-19 07:22:10 +00003076 /* Shift the look-ahead token. */
3077 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003078
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003079 /* Discard the token being shifted unless it is eof. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003080 if (yychar != YYEOF)
3081 yychar = YYEMPTY;
3082
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003083 *++yyvsp = yylval;
3084
Reid Spencered951ea2007-05-19 07:22:10 +00003085
3086 /* Count tokens shifted since error; after three, turn off error
3087 status. */
3088 if (yyerrstatus)
3089 yyerrstatus--;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003090
3091 yystate = yyn;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003092 goto yynewstate;
3093
Chris Lattner39b2e8b2007-05-04 04:01:37 +00003094
Reid Spencered951ea2007-05-19 07:22:10 +00003095/*-----------------------------------------------------------.
3096| yydefault -- do the default action for the current state. |
3097`-----------------------------------------------------------*/
3098yydefault:
Reid Spencer68a24bd2005-08-27 18:50:39 +00003099 yyn = yydefact[yystate];
3100 if (yyn == 0)
3101 goto yyerrlab;
Reid Spencered951ea2007-05-19 07:22:10 +00003102 goto yyreduce;
Reid Spencer68a24bd2005-08-27 18:50:39 +00003103
Reid Spencered951ea2007-05-19 07:22:10 +00003104
3105/*-----------------------------.
3106| yyreduce -- Do a reduction. |
3107`-----------------------------*/
Reid Spencer68a24bd2005-08-27 18:50:39 +00003108yyreduce:
Reid Spencered951ea2007-05-19 07:22:10 +00003109 /* yyn is the number of a rule to reduce with. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00003110 yylen = yyr2[yyn];
3111
Reid Spencered951ea2007-05-19 07:22:10 +00003112 /* If YYLEN is nonzero, implement the default value of the action:
3113 `$$ = $1'.
3114
3115 Otherwise, the following line sets YYVAL to garbage.
3116 This behavior is undocumented and Bison
3117 users should not rely upon it. Assigning to YYVAL
3118 unconditionally makes the parser a bit smaller, and it avoids a
3119 GCC warning that YYVAL may be used uninitialized. */
3120 yyval = yyvsp[1-yylen];
3121
3122
3123 YY_REDUCE_PRINT (yyn);
3124 switch (yyn)
Reid Spencer68a24bd2005-08-27 18:50:39 +00003125 {
Reid Spencered951ea2007-05-19 07:22:10 +00003126 case 29:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003127#line 1122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003128 { (yyval.IPredicate) = ICmpInst::ICMP_EQ; ;}
3129 break;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003130
Reid Spencered951ea2007-05-19 07:22:10 +00003131 case 30:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003132#line 1122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003133 { (yyval.IPredicate) = ICmpInst::ICMP_NE; ;}
3134 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003135
Reid Spencered951ea2007-05-19 07:22:10 +00003136 case 31:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003137#line 1123 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003138 { (yyval.IPredicate) = ICmpInst::ICMP_SLT; ;}
3139 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003140
Reid Spencered951ea2007-05-19 07:22:10 +00003141 case 32:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003142#line 1123 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003143 { (yyval.IPredicate) = ICmpInst::ICMP_SGT; ;}
3144 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003145
Reid Spencered951ea2007-05-19 07:22:10 +00003146 case 33:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003147#line 1124 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003148 { (yyval.IPredicate) = ICmpInst::ICMP_SLE; ;}
3149 break;
Reid Spencerb0fcf8f2007-01-17 02:48:45 +00003150
Reid Spencered951ea2007-05-19 07:22:10 +00003151 case 34:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003152#line 1124 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003153 { (yyval.IPredicate) = ICmpInst::ICMP_SGE; ;}
3154 break;
3155
3156 case 35:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003157#line 1125 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003158 { (yyval.IPredicate) = ICmpInst::ICMP_ULT; ;}
3159 break;
3160
3161 case 36:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003162#line 1125 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003163 { (yyval.IPredicate) = ICmpInst::ICMP_UGT; ;}
3164 break;
3165
3166 case 37:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003167#line 1126 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003168 { (yyval.IPredicate) = ICmpInst::ICMP_ULE; ;}
3169 break;
3170
3171 case 38:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003172#line 1126 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003173 { (yyval.IPredicate) = ICmpInst::ICMP_UGE; ;}
3174 break;
3175
3176 case 39:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003177#line 1130 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003178 { (yyval.FPredicate) = FCmpInst::FCMP_OEQ; ;}
3179 break;
3180
3181 case 40:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003182#line 1130 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003183 { (yyval.FPredicate) = FCmpInst::FCMP_ONE; ;}
3184 break;
3185
3186 case 41:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003187#line 1131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003188 { (yyval.FPredicate) = FCmpInst::FCMP_OLT; ;}
3189 break;
3190
3191 case 42:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003192#line 1131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003193 { (yyval.FPredicate) = FCmpInst::FCMP_OGT; ;}
3194 break;
3195
3196 case 43:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003197#line 1132 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003198 { (yyval.FPredicate) = FCmpInst::FCMP_OLE; ;}
3199 break;
3200
3201 case 44:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003202#line 1132 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003203 { (yyval.FPredicate) = FCmpInst::FCMP_OGE; ;}
3204 break;
3205
3206 case 45:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003207#line 1133 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003208 { (yyval.FPredicate) = FCmpInst::FCMP_ORD; ;}
3209 break;
3210
3211 case 46:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003212#line 1133 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003213 { (yyval.FPredicate) = FCmpInst::FCMP_UNO; ;}
3214 break;
3215
3216 case 47:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003217#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003218 { (yyval.FPredicate) = FCmpInst::FCMP_UEQ; ;}
3219 break;
3220
3221 case 48:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003222#line 1134 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003223 { (yyval.FPredicate) = FCmpInst::FCMP_UNE; ;}
3224 break;
3225
3226 case 49:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003227#line 1135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003228 { (yyval.FPredicate) = FCmpInst::FCMP_ULT; ;}
3229 break;
3230
3231 case 50:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003232#line 1135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003233 { (yyval.FPredicate) = FCmpInst::FCMP_UGT; ;}
3234 break;
3235
3236 case 51:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003237#line 1136 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003238 { (yyval.FPredicate) = FCmpInst::FCMP_ULE; ;}
3239 break;
3240
3241 case 52:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003242#line 1136 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003243 { (yyval.FPredicate) = FCmpInst::FCMP_UGE; ;}
3244 break;
3245
3246 case 53:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003247#line 1137 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003248 { (yyval.FPredicate) = FCmpInst::FCMP_TRUE; ;}
3249 break;
3250
3251 case 54:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003252#line 1138 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003253 { (yyval.FPredicate) = FCmpInst::FCMP_FALSE; ;}
3254 break;
3255
3256 case 62:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003257#line 1147 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003258 { (yyval.StrVal) = 0; ;}
3259 break;
3260
3261 case 63:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003262#line 1151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003263 {
3264 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003265 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003266 ;}
3267 break;
3268
3269 case 64:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003270#line 1155 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003271 {
3272 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003273 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003274 ;}
3275 break;
3276
3277 case 68:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003278#line 1163 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003279 {
3280 (yyval.StrVal) = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003281 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003282 ;}
3283 break;
3284
3285 case 69:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003286#line 1168 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003287 {
3288 (yyval.StrVal) = (yyvsp[-1].StrVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003289 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003290 ;}
3291 break;
3292
3293 case 70:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003294#line 1174 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003295 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3296 break;
3297
3298 case 71:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003299#line 1175 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003300 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3301 break;
3302
3303 case 72:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003304#line 1176 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003305 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3306 break;
3307
3308 case 73:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003309#line 1177 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003310 { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
3311 break;
3312
3313 case 74:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003314#line 1178 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003315 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3316 break;
3317
3318 case 75:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003319#line 1182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003320 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3321 break;
3322
3323 case 76:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003324#line 1183 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003325 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3326 break;
3327
3328 case 77:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003329#line 1184 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003330 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3331 break;
3332
3333 case 78:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003334#line 1188 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003335 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3336 break;
3337
3338 case 79:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003339#line 1189 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003340 { (yyval.Visibility) = GlobalValue::DefaultVisibility; ;}
3341 break;
3342
3343 case 80:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003344#line 1190 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003345 { (yyval.Visibility) = GlobalValue::HiddenVisibility; ;}
3346 break;
3347
3348 case 81:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003349#line 1191 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003350 { (yyval.Visibility) = GlobalValue::ProtectedVisibility; ;}
3351 break;
3352
3353 case 82:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003354#line 1195 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003355 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3356 break;
3357
3358 case 83:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003359#line 1196 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003360 { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
3361 break;
3362
3363 case 84:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003364#line 1197 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003365 { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
3366 break;
3367
3368 case 85:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003369#line 1201 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003370 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3371 break;
3372
3373 case 86:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003374#line 1202 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003375 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3376 break;
3377
3378 case 87:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003379#line 1203 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003380 { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
3381 break;
3382
3383 case 88:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003384#line 1204 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003385 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3386 break;
3387
3388 case 89:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003389#line 1205 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003390 { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
3391 break;
3392
3393 case 90:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003394#line 1209 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003395 { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
3396 break;
3397
3398 case 91:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003399#line 1210 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003400 { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
3401 break;
3402
3403 case 92:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003404#line 1211 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003405 { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
3406 break;
3407
3408 case 93:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003409#line 1214 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003410 { (yyval.UIntVal) = CallingConv::C; ;}
3411 break;
3412
3413 case 94:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003414#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003415 { (yyval.UIntVal) = CallingConv::C; ;}
3416 break;
3417
3418 case 95:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003419#line 1216 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003420 { (yyval.UIntVal) = CallingConv::Fast; ;}
3421 break;
3422
3423 case 96:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003424#line 1217 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003425 { (yyval.UIntVal) = CallingConv::Cold; ;}
3426 break;
3427
3428 case 97:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003429#line 1218 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003430 { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
3431 break;
3432
3433 case 98:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003434#line 1219 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003435 { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
3436 break;
3437
3438 case 99:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003439#line 1220 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003440 {
3441 if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003442 GEN_ERROR("Calling conv too large");
Reid Spencered951ea2007-05-19 07:22:10 +00003443 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003444 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003445 ;}
3446 break;
3447
3448 case 100:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003449#line 1227 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003450 { (yyval.ParamAttrs) = ParamAttr::ZExt; ;}
3451 break;
3452
3453 case 101:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003454#line 1228 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003455 { (yyval.ParamAttrs) = ParamAttr::SExt; ;}
3456 break;
3457
3458 case 102:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003459#line 1229 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003460 { (yyval.ParamAttrs) = ParamAttr::InReg; ;}
3461 break;
3462
3463 case 103:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003464#line 1230 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003465 { (yyval.ParamAttrs) = ParamAttr::StructRet; ;}
3466 break;
3467
3468 case 104:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003469#line 1233 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003470 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3471 break;
3472
3473 case 105:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003474#line 1234 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003475 {
3476 (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
3477 ;}
3478 break;
3479
3480 case 106:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003481#line 1239 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003482 { (yyval.ParamAttrs) = ParamAttr::NoReturn; ;}
3483 break;
3484
3485 case 107:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003486#line 1240 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003487 { (yyval.ParamAttrs) = ParamAttr::NoUnwind; ;}
3488 break;
3489
3490 case 109:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003491#line 1244 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003492 { (yyval.ParamAttrs) = ParamAttr::None; ;}
3493 break;
3494
3495 case 110:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003496#line 1245 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003497 {
3498 (yyval.ParamAttrs) = (yyvsp[-1].ParamAttrs) | (yyvsp[0].ParamAttrs);
3499 ;}
3500 break;
3501
3502 case 111:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003503#line 1252 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003504 { (yyval.UIntVal) = 0; ;}
3505 break;
3506
3507 case 112:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003508#line 1253 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003509 {
3510 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3511 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003512 GEN_ERROR("Alignment must be a power of two");
3513 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003514;}
3515 break;
3516
3517 case 113:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003518#line 1259 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003519 { (yyval.UIntVal) = 0; ;}
3520 break;
3521
3522 case 114:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003523#line 1260 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003524 {
3525 (yyval.UIntVal) = (yyvsp[0].UInt64Val);
3526 if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003527 GEN_ERROR("Alignment must be a power of two");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003528 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003529;}
3530 break;
3531
3532 case 115:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003533#line 1268 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003534 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003535 for (unsigned i = 0, e = (yyvsp[0].StrVal)->length(); i != e; ++i)
3536 if ((*(yyvsp[0].StrVal))[i] == '"' || (*(yyvsp[0].StrVal))[i] == '\\')
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003537 GEN_ERROR("Invalid character in section name");
Reid Spencered951ea2007-05-19 07:22:10 +00003538 (yyval.StrVal) = (yyvsp[0].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003539 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003540;}
3541 break;
3542
3543 case 116:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003544#line 1276 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003545 { (yyval.StrVal) = 0; ;}
3546 break;
3547
3548 case 117:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003549#line 1277 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003550 { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
3551 break;
3552
3553 case 118:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003554#line 1282 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003555 {;}
3556 break;
3557
3558 case 119:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003559#line 1283 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003560 {;}
3561 break;
3562
3563 case 120:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003564#line 1284 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003565 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003566 CurGV->setSection(*(yyvsp[0].StrVal));
3567 delete (yyvsp[0].StrVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003568 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003569 ;}
3570 break;
3571
3572 case 121:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003573#line 1289 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003574 {
3575 if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003576 GEN_ERROR("Alignment must be a power of two");
Reid Spencered951ea2007-05-19 07:22:10 +00003577 CurGV->setAlignment((yyvsp[0].UInt64Val));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003578 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003579 ;}
3580 break;
3581
3582 case 126:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003583#line 1305 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003584 {
3585 (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00003586 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003587 ;}
3588 break;
3589
3590 case 127:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003591#line 1309 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003592 {
3593 (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003594 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003595 ;}
3596 break;
3597
3598 case 128:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003599#line 1313 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003600 { // Pointer type?
3601 if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003602 GEN_ERROR("Cannot form a pointer to a basic block");
Reid Spencered951ea2007-05-19 07:22:10 +00003603 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
3604 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003605 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003606 ;}
3607 break;
3608
3609 case 129:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003610#line 1320 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003611 { // Named types are also simple types...
3612 const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003613 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003614 (yyval.TypeVal) = new PATypeHolder(tmp);
3615 ;}
3616 break;
3617
3618 case 130:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003619#line 1325 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003620 { // Type UpReference
3621 if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003622 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
Reid Spencered951ea2007-05-19 07:22:10 +00003623 UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT)); // Add to vector...
3624 (yyval.TypeVal) = new PATypeHolder(OT);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003625 UR_OUT("New Upreference!\n");
3626 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003627 ;}
3628 break;
3629
3630 case 131:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003631#line 1333 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003632 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00003633 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003634 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00003635 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
3636 ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00003637 Attrs.push_back(X);
3638 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00003639 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00003640 TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003641 for (; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003642 const Type *Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003643 Params.push_back(Ty);
3644 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003645 if (I->Attrs != ParamAttr::None) {
3646 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3647 Attrs.push_back(X);
3648 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003649 }
3650 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3651 if (isVarArg) Params.pop_back();
3652
Reid Spencer7b5d4662007-04-09 06:16:21 +00003653 ParamAttrsList *ActualAttrs = 0;
3654 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003655 ActualAttrs = ParamAttrsList::get(Attrs);
Reid Spencered951ea2007-05-19 07:22:10 +00003656 FunctionType *FT = FunctionType::get(*(yyvsp[-4].TypeVal), Params, isVarArg, ActualAttrs);
3657 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3658 delete (yyvsp[-4].TypeVal); // Delete the return type handle
3659 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencere4d87aa2006-12-23 06:05:41 +00003660 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003661 ;}
3662 break;
3663
3664 case 132:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003665#line 1363 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003666 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003667 std::vector<const Type*> Params;
Christopher Lamb5c104242007-04-22 20:09:11 +00003668 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00003669 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
3670 ParamAttrsWithIndex X; X.index = 0; X.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00003671 Attrs.push_back(X);
3672 }
Reid Spencered951ea2007-05-19 07:22:10 +00003673 TypeWithAttrsList::iterator I = (yyvsp[-2].TypeWithAttrsList)->begin(), E = (yyvsp[-2].TypeWithAttrsList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00003674 unsigned index = 1;
3675 for ( ; I != E; ++I, ++index) {
Reid Spencer66728ef2007-03-20 01:13:36 +00003676 const Type* Ty = I->Ty->get();
Reid Spencer66728ef2007-03-20 01:13:36 +00003677 Params.push_back(Ty);
3678 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00003679 if (I->Attrs != ParamAttr::None) {
3680 ParamAttrsWithIndex X; X.index = index; X.attrs = I->Attrs;
3681 Attrs.push_back(X);
3682 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003683 }
3684 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3685 if (isVarArg) Params.pop_back();
3686
Reid Spencer7b5d4662007-04-09 06:16:21 +00003687 ParamAttrsList *ActualAttrs = 0;
3688 if (!Attrs.empty())
Christopher Lamb5c104242007-04-22 20:09:11 +00003689 ActualAttrs = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00003690
Reid Spencered951ea2007-05-19 07:22:10 +00003691 FunctionType *FT = FunctionType::get((yyvsp[-4].PrimType), Params, isVarArg, ActualAttrs);
3692 delete (yyvsp[-2].TypeWithAttrsList); // Delete the argument list
3693 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(FT));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003694 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003695 ;}
3696 break;
3697
3698 case 133:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003699#line 1394 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003700 { // Sized array type?
3701 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3702 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003703 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003704 ;}
3705 break;
3706
3707 case 134:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003708#line 1399 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003709 { // Vector type?
3710 const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
3711 if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003712 GEN_ERROR("Unsigned result not equal to signed result");
3713 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
3714 GEN_ERROR("Element type of a VectorType must be primitive");
Reid Spencered951ea2007-05-19 07:22:10 +00003715 if (!isPowerOf2_32((yyvsp[-3].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003716 GEN_ERROR("Vector length should be a power of 2");
Reid Spencered951ea2007-05-19 07:22:10 +00003717 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(VectorType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
3718 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003719 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003720 ;}
3721 break;
3722
3723 case 135:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003724#line 1411 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003725 { // Structure type?
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003726 std::vector<const Type*> Elements;
Reid Spencered951ea2007-05-19 07:22:10 +00003727 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
3728 E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003729 Elements.push_back(*I);
3730
Reid Spencered951ea2007-05-19 07:22:10 +00003731 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3732 delete (yyvsp[-1].TypeList);
Reid Spencer14310612006-12-31 05:40:51 +00003733 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003734 ;}
3735 break;
3736
3737 case 136:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003738#line 1421 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003739 { // Empty structure type?
3740 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
Reid Spencer14310612006-12-31 05:40:51 +00003741 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003742 ;}
3743 break;
3744
3745 case 137:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003746#line 1425 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003747 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003748 std::vector<const Type*> Elements;
Reid Spencered951ea2007-05-19 07:22:10 +00003749 for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-2].TypeList)->begin(),
3750 E = (yyvsp[-2].TypeList)->end(); I != E; ++I)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003751 Elements.push_back(*I);
3752
Reid Spencered951ea2007-05-19 07:22:10 +00003753 (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3754 delete (yyvsp[-2].TypeList);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003755 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003756 ;}
3757 break;
3758
3759 case 138:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003760#line 1435 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003761 { // Empty structure type?
3762 (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003763 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003764 ;}
3765 break;
3766
3767 case 139:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003768#line 1442 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003769 {
3770 (yyval.TypeWithAttrs).Ty = (yyvsp[-1].TypeVal);
3771 (yyval.TypeWithAttrs).Attrs = (yyvsp[0].ParamAttrs);
3772 ;}
3773 break;
3774
3775 case 140:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003776#line 1449 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003777 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003778 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003779 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
3780 if (!(*(yyvsp[0].TypeVal))->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003781 GEN_ERROR("LLVM functions cannot return aggregate types");
Reid Spencered951ea2007-05-19 07:22:10 +00003782 (yyval.TypeVal) = (yyvsp[0].TypeVal);
3783 ;}
3784 break;
3785
3786 case 141:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003787#line 1456 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003788 {
3789 (yyval.TypeVal) = new PATypeHolder(Type::VoidTy);
3790 ;}
3791 break;
3792
3793 case 142:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003794#line 1461 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003795 {
3796 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
3797 (yyval.TypeWithAttrsList)->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer3da59db2006-11-27 01:05:10 +00003798 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003799 ;}
3800 break;
3801
3802 case 143:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003803#line 1466 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003804 {
3805 ((yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList))->push_back((yyvsp[0].TypeWithAttrs));
Reid Spencer41dff5e2007-01-26 08:05:27 +00003806 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003807 ;}
3808 break;
3809
3810 case 145:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003811#line 1474 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003812 {
3813 (yyval.TypeWithAttrsList)=(yyvsp[-2].TypeWithAttrsList);
Reid Spencer18da0722007-04-11 02:44:20 +00003814 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
Reid Spencer41dff5e2007-01-26 08:05:27 +00003815 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencered951ea2007-05-19 07:22:10 +00003816 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003817 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003818 ;}
3819 break;
3820
3821 case 146:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003822#line 1481 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003823 {
3824 (yyval.TypeWithAttrsList) = new TypeWithAttrsList;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003825 TypeWithAttrs TWA; TWA.Attrs = ParamAttr::None;
3826 TWA.Ty = new PATypeHolder(Type::VoidTy);
Reid Spencered951ea2007-05-19 07:22:10 +00003827 (yyval.TypeWithAttrsList)->push_back(TWA);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003828 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003829 ;}
3830 break;
3831
3832 case 147:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003833#line 1488 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003834 {
3835 (yyval.TypeWithAttrsList) = new TypeWithAttrsList();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003836 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003837 ;}
3838 break;
3839
3840 case 148:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003841#line 1496 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003842 {
3843 (yyval.TypeList) = new std::list<PATypeHolder>();
3844 (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal));
3845 delete (yyvsp[0].TypeVal);
Reid Spencer3da59db2006-11-27 01:05:10 +00003846 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003847 ;}
3848 break;
3849
3850 case 149:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003851#line 1502 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003852 {
3853 ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal));
3854 delete (yyvsp[0].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003855 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003856 ;}
3857 break;
3858
3859 case 150:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003860#line 1514 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003861 { // Nonempty unsized arr
Reid Spencer14310612006-12-31 05:40:51 +00003862 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003863 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3864 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00003865 if (ATy == 0)
Reid Spencer61c83e02006-08-18 08:43:06 +00003866 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003867 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003868 const Type *ETy = ATy->getElementType();
3869 int NumElements = ATy->getNumElements();
3870
3871 // Verify that we have the correct size...
Reid Spencered951ea2007-05-19 07:22:10 +00003872 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003873 GEN_ERROR("Type mismatch: constant sized array initialized with " +
Reid Spencered951ea2007-05-19 07:22:10 +00003874 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003875 itostr(NumElements) + "");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003876
3877 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00003878 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3879 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003880 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3881 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencered951ea2007-05-19 07:22:10 +00003882 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003883 }
3884
Reid Spencered951ea2007-05-19 07:22:10 +00003885 (yyval.ConstVal) = ConstantArray::get(ATy, *(yyvsp[-1].ConstVector));
3886 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003887 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003888 ;}
3889 break;
3890
3891 case 151:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003892#line 1542 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003893 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003894 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003895 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3896 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003897 if (ATy == 0)
3898 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003899 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer68a24bd2005-08-27 18:50:39 +00003900
Andrew Lenharth6353e052006-12-08 18:07:09 +00003901 int NumElements = ATy->getNumElements();
3902 if (NumElements != -1 && NumElements != 0)
3903 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
Reid Spencerb5334b02007-02-05 10:18:06 +00003904 " arguments, but has size of " + itostr(NumElements) +"");
Reid Spencered951ea2007-05-19 07:22:10 +00003905 (yyval.ConstVal) = ConstantArray::get(ATy, std::vector<Constant*>());
3906 delete (yyvsp[-2].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00003907 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003908 ;}
3909 break;
3910
3911 case 152:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003912#line 1558 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003913 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003914 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003915 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
3916 const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003917 if (ATy == 0)
3918 GEN_ERROR("Cannot make array constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003919 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003920
3921 int NumElements = ATy->getNumElements();
3922 const Type *ETy = ATy->getElementType();
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003923 if (NumElements != -1 && NumElements != int((yyvsp[0].StrVal)->length()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003924 GEN_ERROR("Can't build string constant of size " +
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003925 itostr((int)((yyvsp[0].StrVal)->length())) +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003926 " when array has size " + itostr(NumElements) + "");
3927 std::vector<Constant*> Vals;
3928 if (ETy == Type::Int8Ty) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003929 for (unsigned i = 0; i < (yyvsp[0].StrVal)->length(); ++i)
3930 Vals.push_back(ConstantInt::get(ETy, (*(yyvsp[0].StrVal))[i]));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003931 } else {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003932 delete (yyvsp[0].StrVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003933 GEN_ERROR("Cannot build string arrays of non byte sized elements");
3934 }
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003935 delete (yyvsp[0].StrVal);
Reid Spencered951ea2007-05-19 07:22:10 +00003936 (yyval.ConstVal) = ConstantArray::get(ATy, Vals);
3937 delete (yyvsp[-2].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003938 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003939 ;}
3940 break;
3941
3942 case 153:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003943#line 1585 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003944 { // Nonempty unsized arr
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003945 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00003946 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
3947 const VectorType *PTy = dyn_cast<VectorType>((yyvsp[-3].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003948 if (PTy == 0)
3949 GEN_ERROR("Cannot make packed constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003950 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003951 const Type *ETy = PTy->getElementType();
3952 int NumElements = PTy->getNumElements();
Reid Spencer41dff5e2007-01-26 08:05:27 +00003953
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003954 // Verify that we have the correct size...
Reid Spencered951ea2007-05-19 07:22:10 +00003955 if (NumElements != -1 && NumElements != (int)(yyvsp[-1].ConstVector)->size())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003956 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
Reid Spencered951ea2007-05-19 07:22:10 +00003957 utostr((yyvsp[-1].ConstVector)->size()) + " arguments, but has size of " +
Reid Spencerb5334b02007-02-05 10:18:06 +00003958 itostr(NumElements) + "");
Reid Spencer41dff5e2007-01-26 08:05:27 +00003959
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003960 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00003961 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
3962 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003963 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3964 ETy->getDescription() +"' as required!\nIt is of type '"+
Reid Spencered951ea2007-05-19 07:22:10 +00003965 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003966 }
Reid Spencer41dff5e2007-01-26 08:05:27 +00003967
Reid Spencered951ea2007-05-19 07:22:10 +00003968 (yyval.ConstVal) = ConstantVector::get(PTy, *(yyvsp[-1].ConstVector));
3969 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00003970 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00003971 ;}
3972 break;
3973
3974 case 154:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00003975#line 1613 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00003976 {
3977 const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00003978 if (STy == 0)
3979 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00003980 (*(yyvsp[-3].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003981
Reid Spencered951ea2007-05-19 07:22:10 +00003982 if ((yyvsp[-1].ConstVector)->size() != STy->getNumContainedTypes())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003983 GEN_ERROR("Illegal number of initializers for structure type");
3984
3985 // Check to ensure that constants are compatible with the type initializer!
Reid Spencered951ea2007-05-19 07:22:10 +00003986 for (unsigned i = 0, e = (yyvsp[-1].ConstVector)->size(); i != e; ++i)
3987 if ((*(yyvsp[-1].ConstVector))[i]->getType() != STy->getElementType(i))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00003988 GEN_ERROR("Expected type '" +
3989 STy->getElementType(i)->getDescription() +
3990 "' for element #" + utostr(i) +
3991 " of structure initializer");
3992
3993 // Check to ensure that Type is not packed
3994 if (STy->isPacked())
3995 GEN_ERROR("Unpacked Initializer to vector type '" +
3996 STy->getDescription() + "'");
3997
Reid Spencered951ea2007-05-19 07:22:10 +00003998 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-1].ConstVector));
3999 delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004000 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004001 ;}
4002 break;
4003
4004 case 155:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004005#line 1639 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004006 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004007 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004008 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4009 const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004010 if (STy == 0)
4011 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004012 (*(yyvsp[-2].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004013
4014 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004015 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004016
4017 // Check to ensure that Type is not packed
4018 if (STy->isPacked())
Chris Lattner6cdc6822007-04-26 05:31:05 +00004019 GEN_ERROR("Unpacked Initializer to vector type '" +
4020 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004021
Reid Spencered951ea2007-05-19 07:22:10 +00004022 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4023 delete (yyvsp[-2].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004024 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004025 ;}
4026 break;
4027
4028 case 156:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004029#line 1659 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004030 {
4031 const StructType *STy = dyn_cast<StructType>((yyvsp[-5].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004032 if (STy == 0)
4033 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004034 (*(yyvsp[-5].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004035
Reid Spencered951ea2007-05-19 07:22:10 +00004036 if ((yyvsp[-2].ConstVector)->size() != STy->getNumContainedTypes())
Reid Spencerb5334b02007-02-05 10:18:06 +00004037 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004038
4039 // Check to ensure that constants are compatible with the type initializer!
Reid Spencered951ea2007-05-19 07:22:10 +00004040 for (unsigned i = 0, e = (yyvsp[-2].ConstVector)->size(); i != e; ++i)
4041 if ((*(yyvsp[-2].ConstVector))[i]->getType() != STy->getElementType(i))
Reid Spencer41dff5e2007-01-26 08:05:27 +00004042 GEN_ERROR("Expected type '" +
4043 STy->getElementType(i)->getDescription() +
4044 "' for element #" + utostr(i) +
Reid Spencerb5334b02007-02-05 10:18:06 +00004045 " of structure initializer");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004046
4047 // Check to ensure that Type is packed
4048 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004049 GEN_ERROR("Vector initializer to non-vector type '" +
4050 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004051
Reid Spencered951ea2007-05-19 07:22:10 +00004052 (yyval.ConstVal) = ConstantStruct::get(STy, *(yyvsp[-2].ConstVector));
4053 delete (yyvsp[-5].TypeVal); delete (yyvsp[-2].ConstVector);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004054 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004055 ;}
4056 break;
4057
4058 case 157:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004059#line 1685 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004060 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004061 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004062 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
4063 const StructType *STy = dyn_cast<StructType>((yyvsp[-4].TypeVal)->get());
Reid Spencer41dff5e2007-01-26 08:05:27 +00004064 if (STy == 0)
4065 GEN_ERROR("Cannot make struct constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004066 (*(yyvsp[-4].TypeVal))->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004067
4068 if (STy->getNumContainedTypes() != 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004069 GEN_ERROR("Illegal number of initializers for structure type");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004070
4071 // Check to ensure that Type is packed
4072 if (!STy->isPacked())
Chris Lattner32980692007-02-19 07:44:24 +00004073 GEN_ERROR("Vector initializer to non-vector type '" +
4074 STy->getDescription() + "'");
Reid Spencer41dff5e2007-01-26 08:05:27 +00004075
Reid Spencered951ea2007-05-19 07:22:10 +00004076 (yyval.ConstVal) = ConstantStruct::get(STy, std::vector<Constant*>());
4077 delete (yyvsp[-4].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004078 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004079 ;}
4080 break;
4081
4082 case 158:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004083#line 1705 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004084 {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004085 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004086 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4087 const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004088 if (PTy == 0)
4089 GEN_ERROR("Cannot make null pointer constant with type: '" +
Reid Spencered951ea2007-05-19 07:22:10 +00004090 (*(yyvsp[-1].TypeVal))->getDescription() + "'");
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004091
Reid Spencered951ea2007-05-19 07:22:10 +00004092 (yyval.ConstVal) = ConstantPointerNull::get(PTy);
4093 delete (yyvsp[-1].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004094 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004095 ;}
4096 break;
4097
4098 case 159:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004099#line 1717 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004100 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004101 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004102 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4103 (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
4104 delete (yyvsp[-1].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004105 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004106 ;}
4107 break;
4108
4109 case 160:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004110#line 1724 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004111 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004112 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004113 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4114 const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004115 if (Ty == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00004116 GEN_ERROR("Global const reference must be a pointer type");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004117
4118 // ConstExprs can exist in the body of a function, thus creating
4119 // GlobalValues whenever they refer to a variable. Because we are in
Reid Spencer93c40032007-03-19 18:40:50 +00004120 // the context of a function, getExistingVal will search the functions
Reid Spencer68a24bd2005-08-27 18:50:39 +00004121 // symbol table instead of the module symbol table for the global symbol,
4122 // which throws things all off. To get around this, we just tell
Reid Spencer93c40032007-03-19 18:40:50 +00004123 // getExistingVal that we are at global scope here.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004124 //
4125 Function *SavedCurFn = CurFun.CurrentFunction;
4126 CurFun.CurrentFunction = 0;
4127
Reid Spencered951ea2007-05-19 07:22:10 +00004128 Value *V = getExistingVal(Ty, (yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00004129 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004130
4131 CurFun.CurrentFunction = SavedCurFn;
4132
4133 // If this is an initializer for a constant pointer, which is referencing a
4134 // (currently) undefined variable, create a stub now that shall be replaced
4135 // in the future with the right type of variable.
4136 //
4137 if (V == 0) {
Reid Spencera9720f52007-02-05 17:04:00 +00004138 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004139 const PointerType *PT = cast<PointerType>(Ty);
4140
4141 // First check to see if the forward references value is already created!
4142 PerModuleInfo::GlobalRefsType::iterator I =
Reid Spencered951ea2007-05-19 07:22:10 +00004143 CurModule.GlobalRefs.find(std::make_pair(PT, (yyvsp[0].ValIDVal)));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004144
4145 if (I != CurModule.GlobalRefs.end()) {
4146 V = I->second; // Placeholder already exists, use it...
Reid Spencered951ea2007-05-19 07:22:10 +00004147 (yyvsp[0].ValIDVal).destroy();
Reid Spencer68a24bd2005-08-27 18:50:39 +00004148 } else {
4149 std::string Name;
Reid Spencered951ea2007-05-19 07:22:10 +00004150 if ((yyvsp[0].ValIDVal).Type == ValID::GlobalName)
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004151 Name = (yyvsp[0].ValIDVal).getName();
Reid Spencered951ea2007-05-19 07:22:10 +00004152 else if ((yyvsp[0].ValIDVal).Type != ValID::GlobalID)
Reid Spencer41dff5e2007-01-26 08:05:27 +00004153 GEN_ERROR("Invalid reference to global");
Reid Spencer68a24bd2005-08-27 18:50:39 +00004154
4155 // Create the forward referenced global.
4156 GlobalValue *GV;
4157 if (const FunctionType *FTy =
4158 dyn_cast<FunctionType>(PT->getElementType())) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004159 GV = new Function(FTy, GlobalValue::ExternalWeakLinkage, Name,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004160 CurModule.CurrentModule);
4161 } else {
4162 GV = new GlobalVariable(PT->getElementType(), false,
Chris Lattner6cdc6822007-04-26 05:31:05 +00004163 GlobalValue::ExternalWeakLinkage, 0,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004164 Name, CurModule.CurrentModule);
4165 }
4166
4167 // Keep track of the fact that we have a forward ref to recycle it
Reid Spencered951ea2007-05-19 07:22:10 +00004168 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, (yyvsp[0].ValIDVal)), GV));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004169 V = GV;
4170 }
4171 }
4172
Reid Spencered951ea2007-05-19 07:22:10 +00004173 (yyval.ConstVal) = cast<GlobalValue>(V);
4174 delete (yyvsp[-1].TypeVal); // Free the type handle
Reid Spencer61c83e02006-08-18 08:43:06 +00004175 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004176 ;}
4177 break;
4178
4179 case 161:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004180#line 1790 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004181 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004182 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004183 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4184 if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004185 GEN_ERROR("Mismatched types for constant expression: " +
Reid Spencered951ea2007-05-19 07:22:10 +00004186 (*(yyvsp[-1].TypeVal))->getDescription() + " and " + (yyvsp[0].ConstVal)->getType()->getDescription());
4187 (yyval.ConstVal) = (yyvsp[0].ConstVal);
4188 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004189 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004190 ;}
4191 break;
4192
4193 case 162:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004194#line 1800 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004195 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004196 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004197 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4198 const Type *Ty = (yyvsp[-1].TypeVal)->get();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004199 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
4200 GEN_ERROR("Cannot create a null initialized value of this type");
Reid Spencered951ea2007-05-19 07:22:10 +00004201 (yyval.ConstVal) = Constant::getNullValue(Ty);
4202 delete (yyvsp[-1].TypeVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004203 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004204 ;}
4205 break;
4206
4207 case 163:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004208#line 1810 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004209 { // integral constants
4210 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004211 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencered951ea2007-05-19 07:22:10 +00004212 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val), true);
Reid Spencer38c91a92007-02-28 02:24:54 +00004213 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004214 ;}
4215 break;
4216
4217 case 164:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004218#line 1816 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004219 { // arbitrary precision integer constants
4220 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4221 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004222 GEN_ERROR("Constant value does not fit in type");
4223 }
Reid Spencered951ea2007-05-19 07:22:10 +00004224 (yyvsp[0].APIntVal)->sextOrTrunc(BitWidth);
4225 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4226 delete (yyvsp[0].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004227 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004228 ;}
4229 break;
4230
4231 case 165:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004232#line 1826 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004233 { // integral constants
4234 if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004235 GEN_ERROR("Constant value doesn't fit in type");
Reid Spencered951ea2007-05-19 07:22:10 +00004236 (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val), false);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004237 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004238 ;}
4239 break;
4240
4241 case 166:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004242#line 1832 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004243 { // arbitrary precision integer constants
4244 uint32_t BitWidth = cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth();
4245 if ((yyvsp[0].APIntVal)->getBitWidth() > BitWidth) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004246 GEN_ERROR("Constant value does not fit in type");
4247 }
Reid Spencered951ea2007-05-19 07:22:10 +00004248 (yyvsp[0].APIntVal)->zextOrTrunc(BitWidth);
4249 (yyval.ConstVal) = ConstantInt::get(*(yyvsp[0].APIntVal));
4250 delete (yyvsp[0].APIntVal);
Reid Spencer41dff5e2007-01-26 08:05:27 +00004251 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004252 ;}
4253 break;
4254
4255 case 167:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004256#line 1842 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004257 { // Boolean constants
4258 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4259 (yyval.ConstVal) = ConstantInt::getTrue();
Reid Spencer38c91a92007-02-28 02:24:54 +00004260 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004261 ;}
4262 break;
4263
4264 case 168:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004265#line 1847 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004266 { // Boolean constants
4267 assert(cast<IntegerType>((yyvsp[-1].PrimType))->getBitWidth() == 1 && "Not Bool?");
4268 (yyval.ConstVal) = ConstantInt::getFalse();
Reid Spencer6f407902007-01-13 05:00:46 +00004269 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004270 ;}
4271 break;
4272
4273 case 169:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004274#line 1852 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004275 { // Float & Double constants
4276 if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004277 GEN_ERROR("Floating point constant invalid for type");
Reid Spencered951ea2007-05-19 07:22:10 +00004278 (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004279 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004280 ;}
4281 break;
4282
4283 case 170:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004284#line 1860 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004285 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004286 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004287 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
4288 Constant *Val = (yyvsp[-3].ConstVal);
4289 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4290 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004291 GEN_ERROR("invalid cast opcode for cast from '" +
4292 Val->getType()->getDescription() + "' to '" +
4293 DestTy->getDescription() + "'");
Reid Spencered951ea2007-05-19 07:22:10 +00004294 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
4295 delete (yyvsp[-1].TypeVal);
4296 ;}
4297 break;
4298
4299 case 171:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004300#line 1872 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004301 {
4302 if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
Reid Spencerb5334b02007-02-05 10:18:06 +00004303 GEN_ERROR("GetElementPtr requires a pointer operand");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004304
4305 const Type *IdxTy =
Reid Spencered951ea2007-05-19 07:22:10 +00004306 GetElementPtrInst::getIndexedType((yyvsp[-2].ConstVal)->getType(), &(*(yyvsp[-1].ValueList))[0], (yyvsp[-1].ValueList)->size(),
Chris Lattner7d9801d2007-02-13 00:58:01 +00004307 true);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004308 if (!IdxTy)
Reid Spencerb5334b02007-02-05 10:18:06 +00004309 GEN_ERROR("Index list invalid for constant getelementptr");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004310
Chris Lattnerf7469af2007-01-31 04:44:08 +00004311 SmallVector<Constant*, 8> IdxVec;
Reid Spencered951ea2007-05-19 07:22:10 +00004312 for (unsigned i = 0, e = (yyvsp[-1].ValueList)->size(); i != e; ++i)
4313 if (Constant *C = dyn_cast<Constant>((*(yyvsp[-1].ValueList))[i]))
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004314 IdxVec.push_back(C);
4315 else
Reid Spencerb5334b02007-02-05 10:18:06 +00004316 GEN_ERROR("Indices to constant getelementptr must be constants");
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004317
Reid Spencered951ea2007-05-19 07:22:10 +00004318 delete (yyvsp[-1].ValueList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004319
Reid Spencered951ea2007-05-19 07:22:10 +00004320 (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), &IdxVec[0], IdxVec.size());
Andrew Lenharth6353e052006-12-08 18:07:09 +00004321 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004322 ;}
4323 break;
4324
4325 case 172:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004326#line 1894 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004327 {
4328 if ((yyvsp[-5].ConstVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004329 GEN_ERROR("Select condition must be of boolean type");
Reid Spencered951ea2007-05-19 07:22:10 +00004330 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004331 GEN_ERROR("Select operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004332 (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004333 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004334 ;}
4335 break;
4336
4337 case 173:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004338#line 1902 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004339 {
4340 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004341 GEN_ERROR("Binary operator types must match");
4342 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004343 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4344 ;}
4345 break;
4346
4347 case 174:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004348#line 1908 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004349 {
4350 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004351 GEN_ERROR("Logical operator types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004352 if (!(yyvsp[-3].ConstVal)->getType()->isInteger()) {
4353 if (Instruction::isShift((yyvsp[-5].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].ConstVal)->getType()) ||
4354 !cast<VectorType>((yyvsp[-3].ConstVal)->getType())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004355 GEN_ERROR("Logical operator requires integral operands");
4356 }
Reid Spencered951ea2007-05-19 07:22:10 +00004357 (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004358 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004359 ;}
4360 break;
4361
4362 case 175:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004363#line 1919 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004364 {
4365 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004366 GEN_ERROR("icmp operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004367 (yyval.ConstVal) = ConstantExpr::getICmp((yyvsp[-5].IPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4368 ;}
4369 break;
4370
4371 case 176:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004372#line 1924 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004373 {
4374 if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004375 GEN_ERROR("fcmp operand types must match");
Reid Spencered951ea2007-05-19 07:22:10 +00004376 (yyval.ConstVal) = ConstantExpr::getFCmp((yyvsp[-5].FPredicate), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
4377 ;}
4378 break;
4379
4380 case 177:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004381#line 1929 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004382 {
4383 if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004384 GEN_ERROR("Invalid extractelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004385 (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004386 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004387 ;}
4388 break;
4389
4390 case 178:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004391#line 1935 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004392 {
4393 if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004394 GEN_ERROR("Invalid insertelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004395 (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004396 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004397 ;}
4398 break;
4399
4400 case 179:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004401#line 1941 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004402 {
4403 if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004404 GEN_ERROR("Invalid shufflevector operands");
Reid Spencered951ea2007-05-19 07:22:10 +00004405 (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004406 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004407 ;}
4408 break;
4409
4410 case 180:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004411#line 1950 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004412 {
4413 ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004414 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004415 ;}
4416 break;
4417
4418 case 181:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004419#line 1954 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004420 {
4421 (yyval.ConstVector) = new std::vector<Constant*>();
4422 (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004423 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004424 ;}
4425 break;
4426
4427 case 182:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004428#line 1962 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004429 { (yyval.BoolVal) = false; ;}
4430 break;
4431
4432 case 183:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004433#line 1962 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004434 { (yyval.BoolVal) = true; ;}
4435 break;
4436
4437 case 184:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004438#line 1965 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004439 { (yyval.BoolVal) = true; ;}
4440 break;
4441
4442 case 185:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004443#line 1965 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004444 { (yyval.BoolVal) = false; ;}
4445 break;
4446
4447 case 186:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004448#line 1968 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004449 {
4450 const Type* VTy = (yyvsp[-1].TypeVal)->get();
4451 Value *V = getVal(VTy, (yyvsp[0].ValIDVal));
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004452 GlobalValue* Aliasee = dyn_cast<GlobalValue>(V);
4453 if (!Aliasee)
4454 GEN_ERROR("Aliases can be created only to global values");
4455
Reid Spencered951ea2007-05-19 07:22:10 +00004456 (yyval.ConstVal) = Aliasee;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004457 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004458 delete (yyvsp[-1].TypeVal);
4459 ;}
4460 break;
4461
4462 case 187:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004463#line 1979 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004464 {
4465 Constant *Val = (yyvsp[-3].ConstVal);
4466 const Type *DestTy = (yyvsp[-1].TypeVal)->get();
4467 if (!CastInst::castIsValid((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy))
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004468 GEN_ERROR("invalid cast opcode for cast from '" +
4469 Val->getType()->getDescription() + "' to '" +
4470 DestTy->getDescription() + "'");
4471
Reid Spencered951ea2007-05-19 07:22:10 +00004472 (yyval.ConstVal) = ConstantExpr::getCast((yyvsp[-5].CastOpVal), (yyvsp[-3].ConstVal), DestTy);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004473 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004474 delete (yyvsp[-1].TypeVal);
4475 ;}
4476 break;
4477
4478 case 188:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004479#line 2000 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004480 {
4481 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004482 CurModule.ModuleDone();
4483 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004484 ;}
4485 break;
4486
4487 case 189:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004488#line 2005 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004489 {
4490 (yyval.ModuleVal) = ParserResult = CurModule.CurrentModule;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004491 CurModule.ModuleDone();
4492 CHECK_FOR_ERROR;
Reid Spencered951ea2007-05-19 07:22:10 +00004493 ;}
4494 break;
4495
4496 case 192:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004497#line 2018 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004498 { CurFun.isDeclare = false; ;}
4499 break;
4500
4501 case 193:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004502#line 2018 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004503 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004504 CurFun.FunctionDone();
4505 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004506 ;}
4507 break;
4508
4509 case 194:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004510#line 2022 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004511 { CurFun.isDeclare = true; ;}
4512 break;
4513
4514 case 195:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004515#line 2022 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004516 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004517 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004518 ;}
4519 break;
4520
4521 case 196:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004522#line 2025 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004523 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004524 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004525 ;}
4526 break;
4527
4528 case 197:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004529#line 2028 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004530 {
Reid Spencer14310612006-12-31 05:40:51 +00004531 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004532 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004533 // Eagerly resolve types. This is not an optimization, this is a
4534 // requirement that is due to the fact that we could have this:
4535 //
4536 // %list = type { %list * }
4537 // %list = type { %list * } ; repeated type decl
4538 //
4539 // If types are not resolved eagerly, then the two types will not be
4540 // determined to be the same type!
4541 //
Reid Spencered951ea2007-05-19 07:22:10 +00004542 ResolveTypeTo((yyvsp[-2].StrVal), *(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004543
Reid Spencered951ea2007-05-19 07:22:10 +00004544 if (!setTypeName(*(yyvsp[0].TypeVal), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Reid Spencer5b7e7532006-09-28 19:28:24 +00004545 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004546 // If this is a named type that is not a redefinition, add it to the slot
4547 // table.
Reid Spencered951ea2007-05-19 07:22:10 +00004548 CurModule.Types.push_back(*(yyvsp[0].TypeVal));
Reid Spencer68a24bd2005-08-27 18:50:39 +00004549 }
Reid Spencera132e042006-12-03 05:46:11 +00004550
Reid Spencered951ea2007-05-19 07:22:10 +00004551 delete (yyvsp[0].TypeVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004552 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004553 ;}
4554 break;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00004555
Reid Spencered951ea2007-05-19 07:22:10 +00004556 case 198:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004557#line 2052 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004558 {
4559 ResolveTypeTo((yyvsp[-2].StrVal), (yyvsp[0].PrimType));
4560
4561 if (!setTypeName((yyvsp[0].PrimType), (yyvsp[-2].StrVal)) && !(yyvsp[-2].StrVal)) {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004562 CHECK_FOR_ERROR
4563 // If this is a named type that is not a redefinition, add it to the slot
4564 // table.
Reid Spencered951ea2007-05-19 07:22:10 +00004565 CurModule.Types.push_back((yyvsp[0].PrimType));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004566 }
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004567 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004568 ;}
4569 break;
4570
4571 case 199:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004572#line 2063 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004573 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004574 /* "Externally Visible" Linkage */
Reid Spencered951ea2007-05-19 07:22:10 +00004575 if ((yyvsp[0].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004576 GEN_ERROR("Global value initializer is not a constant");
Reid Spencered951ea2007-05-19 07:22:10 +00004577 CurGV = ParseGlobalVariable((yyvsp[-4].StrVal), GlobalValue::ExternalLinkage,
4578 (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004579 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004580 ;}
4581 break;
4582
4583 case 200:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004584#line 2070 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004585 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004586 CurGV = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00004587 ;}
4588 break;
4589
4590 case 201:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004591#line 2074 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004592 {
4593 if ((yyvsp[0].ConstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004594 GEN_ERROR("Global value initializer is not a constant");
Reid Spencered951ea2007-05-19 07:22:10 +00004595 CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), (yyvsp[0].ConstVal)->getType(), (yyvsp[0].ConstVal), (yyvsp[-2].BoolVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004596 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004597 ;}
4598 break;
4599
4600 case 202:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004601#line 2079 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004602 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004603 CurGV = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00004604 ;}
4605 break;
4606
4607 case 203:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004608#line 2083 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004609 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004610 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004611 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
4612 CurGV = ParseGlobalVariable((yyvsp[-5].StrVal), (yyvsp[-4].Linkage), (yyvsp[-3].Visibility), (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0, (yyvsp[-2].BoolVal));
Reid Spencer41dff5e2007-01-26 08:05:27 +00004613 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004614 delete (yyvsp[0].TypeVal);
4615 ;}
4616 break;
4617
4618 case 204:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004619#line 2089 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004620 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004621 CurGV = 0;
Reid Spencer41dff5e2007-01-26 08:05:27 +00004622 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004623 ;}
4624 break;
4625
4626 case 205:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004627#line 2093 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004628 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004629 std::string Name;
4630 if ((yyvsp[-4].StrVal)) {
4631 Name = *(yyvsp[-4].StrVal);
4632 delete (yyvsp[-4].StrVal);
4633 }
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004634 if (Name.empty())
4635 GEN_ERROR("Alias name cannot be empty");
4636
Reid Spencered951ea2007-05-19 07:22:10 +00004637 Constant* Aliasee = (yyvsp[0].ConstVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004638 if (Aliasee == 0)
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004639 GEN_ERROR(std::string("Invalid aliasee for alias: ") + Name);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004640
Reid Spencered951ea2007-05-19 07:22:10 +00004641 GlobalAlias* GA = new GlobalAlias(Aliasee->getType(), (yyvsp[-1].Linkage), Name, Aliasee,
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004642 CurModule.CurrentModule);
Reid Spencered951ea2007-05-19 07:22:10 +00004643 GA->setVisibility((yyvsp[-3].Visibility));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004644 InsertValue(GA, CurModule.Values);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004645 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004646 ;}
4647 break;
4648
4649 case 206:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004650#line 2112 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004651 {
Anton Korobeynikov77d0f972007-04-25 14:29:12 +00004652 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004653 ;}
4654 break;
4655
4656 case 207:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004657#line 2115 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004658 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004659 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004660 ;}
4661 break;
4662
4663 case 208:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004664#line 2121 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004665 {
Chris Lattner66316012006-01-24 04:14:29 +00004666 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
Chris Lattner66316012006-01-24 04:14:29 +00004667 if (AsmSoFar.empty())
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004668 CurModule.CurrentModule->setModuleInlineAsm(*(yyvsp[0].StrVal));
Chris Lattner66316012006-01-24 04:14:29 +00004669 else
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004670 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+*(yyvsp[0].StrVal));
4671 delete (yyvsp[0].StrVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00004672 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004673;}
4674 break;
4675
4676 case 209:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004677#line 2131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004678 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004679 CurModule.CurrentModule->setTargetTriple(*(yyvsp[0].StrVal));
4680 delete (yyvsp[0].StrVal);
Reid Spencered951ea2007-05-19 07:22:10 +00004681 ;}
4682 break;
4683
4684 case 210:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004685#line 2135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004686 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004687 CurModule.CurrentModule->setDataLayout(*(yyvsp[0].StrVal));
4688 delete (yyvsp[0].StrVal);
Reid Spencered951ea2007-05-19 07:22:10 +00004689 ;}
4690 break;
4691
4692 case 212:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004693#line 2142 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004694 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004695 CurModule.CurrentModule->addLibrary(*(yyvsp[0].StrVal));
4696 delete (yyvsp[0].StrVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004697 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004698 ;}
4699 break;
4700
4701 case 213:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004702#line 2147 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004703 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004704 CurModule.CurrentModule->addLibrary(*(yyvsp[0].StrVal));
4705 delete (yyvsp[0].StrVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004706 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004707 ;}
4708 break;
4709
4710 case 214:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004711#line 2152 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004712 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004713 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004714 ;}
4715 break;
4716
4717 case 215:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004718#line 2161 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004719 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004720 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004721 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4722 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004723 GEN_ERROR("void typed arguments are invalid");
Reid Spencered951ea2007-05-19 07:22:10 +00004724 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4725 (yyval.ArgList) = (yyvsp[-4].ArgList);
4726 (yyvsp[-4].ArgList)->push_back(E);
Reid Spencer6f407902007-01-13 05:00:46 +00004727 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004728 ;}
4729 break;
4730
4731 case 216:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004732#line 2171 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004733 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004734 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00004735 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
4736 if (*(yyvsp[-2].TypeVal) == Type::VoidTy)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004737 GEN_ERROR("void typed arguments are invalid");
Reid Spencered951ea2007-05-19 07:22:10 +00004738 ArgListEntry E; E.Attrs = (yyvsp[-1].ParamAttrs); E.Ty = (yyvsp[-2].TypeVal); E.Name = (yyvsp[0].StrVal);
4739 (yyval.ArgList) = new ArgListType;
4740 (yyval.ArgList)->push_back(E);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004741 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004742 ;}
4743 break;
4744
4745 case 217:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004746#line 2182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004747 {
4748 (yyval.ArgList) = (yyvsp[0].ArgList);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004749 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004750 ;}
4751 break;
4752
4753 case 218:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004754#line 2186 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004755 {
4756 (yyval.ArgList) = (yyvsp[-2].ArgList);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004757 struct ArgListEntry E;
4758 E.Ty = new PATypeHolder(Type::VoidTy);
4759 E.Name = 0;
Reid Spencer18da0722007-04-11 02:44:20 +00004760 E.Attrs = ParamAttr::None;
Reid Spencered951ea2007-05-19 07:22:10 +00004761 (yyval.ArgList)->push_back(E);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004762 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004763 ;}
4764 break;
4765
4766 case 219:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004767#line 2195 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004768 {
4769 (yyval.ArgList) = new ArgListType;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004770 struct ArgListEntry E;
4771 E.Ty = new PATypeHolder(Type::VoidTy);
4772 E.Name = 0;
4773 E.Attrs = ParamAttr::None;
Reid Spencered951ea2007-05-19 07:22:10 +00004774 (yyval.ArgList)->push_back(E);
Reid Spencer61c83e02006-08-18 08:43:06 +00004775 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004776 ;}
4777 break;
4778
4779 case 220:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004780#line 2204 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004781 {
4782 (yyval.ArgList) = 0;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004783 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004784 ;}
4785 break;
4786
4787 case 221:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004788#line 2210 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004789 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004790 std::string FunctionName(*(yyvsp[-6].StrVal));
4791 delete (yyvsp[-6].StrVal); // Free strdup'd memory!
Reid Spencer68a24bd2005-08-27 18:50:39 +00004792
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004793 // Check the function result for abstractness if this is a define. We should
4794 // have no abstract types at this point
Reid Spencered951ea2007-05-19 07:22:10 +00004795 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved((yyvsp[-7].TypeVal)))
4796 GEN_ERROR("Reference to abstract result: "+ (yyvsp[-7].TypeVal)->get()->getDescription());
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004797
Reid Spencer68a24bd2005-08-27 18:50:39 +00004798 std::vector<const Type*> ParamTypeList;
Christopher Lamb5c104242007-04-22 20:09:11 +00004799 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00004800 if ((yyvsp[-2].ParamAttrs) != ParamAttr::None) {
4801 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-2].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00004802 Attrs.push_back(PAWI);
4803 }
Reid Spencered951ea2007-05-19 07:22:10 +00004804 if ((yyvsp[-4].ArgList)) { // If there are arguments...
Reid Spencer7b5d4662007-04-09 06:16:21 +00004805 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00004806 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin(); I != (yyvsp[-4].ArgList)->end(); ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00004807 const Type* Ty = I->Ty->get();
Reid Spencer8c8a2dc2007-01-02 21:54:12 +00004808 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
4809 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
Reid Spencer14310612006-12-31 05:40:51 +00004810 ParamTypeList.push_back(Ty);
4811 if (Ty != Type::VoidTy)
Christopher Lamb5c104242007-04-22 20:09:11 +00004812 if (I->Attrs != ParamAttr::None) {
4813 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
4814 Attrs.push_back(PAWI);
4815 }
Reid Spencer14310612006-12-31 05:40:51 +00004816 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004817 }
4818
4819 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
4820 if (isVarArg) ParamTypeList.pop_back();
4821
Christopher Lamb5c104242007-04-22 20:09:11 +00004822 ParamAttrsList *PAL = 0;
4823 if (!Attrs.empty())
4824 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00004825
Reid Spencered951ea2007-05-19 07:22:10 +00004826 FunctionType *FT = FunctionType::get(*(yyvsp[-7].TypeVal), ParamTypeList, isVarArg, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004827 const PointerType *PFT = PointerType::get(FT);
Reid Spencered951ea2007-05-19 07:22:10 +00004828 delete (yyvsp[-7].TypeVal);
Reid Spencer68a24bd2005-08-27 18:50:39 +00004829
4830 ValID ID;
4831 if (!FunctionName.empty()) {
Reid Spencer41dff5e2007-01-26 08:05:27 +00004832 ID = ValID::createGlobalName((char*)FunctionName.c_str());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004833 } else {
Reid Spencer93c40032007-03-19 18:40:50 +00004834 ID = ValID::createGlobalID(CurModule.Values.size());
Reid Spencer68a24bd2005-08-27 18:50:39 +00004835 }
4836
4837 Function *Fn = 0;
4838 // See if this function was forward referenced. If so, recycle the object.
4839 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4840 // Move the function to the end of the list, from whereever it was
4841 // previously inserted.
4842 Fn = cast<Function>(FWRef);
4843 CurModule.CurrentModule->getFunctionList().remove(Fn);
4844 CurModule.CurrentModule->getFunctionList().push_back(Fn);
4845 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
Reid Spenceref9b9a72007-02-05 20:47:22 +00004846 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004847 if (Fn->getFunctionType() != FT) {
Reid Spenceref9b9a72007-02-05 20:47:22 +00004848 // The existing function doesn't have the same type. This is an overload
4849 // error.
4850 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
4851 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
Chris Lattner6cdc6822007-04-26 05:31:05 +00004852 // Neither the existing or the current function is a declaration and they
4853 // have the same name and same type. Clearly this is a redefinition.
4854 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004855 } if (Fn->isDeclaration()) {
4856 // Make sure to strip off any argument names so we can't get conflicts.
Reid Spencer68a24bd2005-08-27 18:50:39 +00004857 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
4858 AI != AE; ++AI)
4859 AI->setName("");
Reid Spenceref9b9a72007-02-05 20:47:22 +00004860 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004861 } else { // Not already defined?
Chris Lattner6cdc6822007-04-26 05:31:05 +00004862 Fn = new Function(FT, GlobalValue::ExternalWeakLinkage, FunctionName,
Reid Spencer68a24bd2005-08-27 18:50:39 +00004863 CurModule.CurrentModule);
Anton Korobeynikov43e3aad2006-09-14 18:25:26 +00004864
Reid Spencer68a24bd2005-08-27 18:50:39 +00004865 InsertValue(Fn, CurModule.Values);
4866 }
4867
4868 CurFun.FunctionStart(Fn);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004869
4870 if (CurFun.isDeclare) {
4871 // If we have declaration, always overwrite linkage. This will allow us to
4872 // correctly handle cases, when pointer to function is passed as argument to
4873 // another function.
4874 Fn->setLinkage(CurFun.Linkage);
Anton Korobeynikov178a3522007-01-12 19:22:51 +00004875 Fn->setVisibility(CurFun.Visibility);
Anton Korobeynikov93c2b372006-09-17 13:06:18 +00004876 }
Reid Spencered951ea2007-05-19 07:22:10 +00004877 Fn->setCallingConv((yyvsp[-8].UIntVal));
4878 Fn->setAlignment((yyvsp[0].UIntVal));
4879 if ((yyvsp[-1].StrVal)) {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004880 Fn->setSection(*(yyvsp[-1].StrVal));
4881 delete (yyvsp[-1].StrVal);
Chris Lattnere869eef2005-11-12 00:11:49 +00004882 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00004883
4884 // Add all of the arguments we parsed to the function...
Reid Spencered951ea2007-05-19 07:22:10 +00004885 if ((yyvsp[-4].ArgList)) { // Is null if empty...
Reid Spencer68a24bd2005-08-27 18:50:39 +00004886 if (isVarArg) { // Nuke the last entry
Reid Spencered951ea2007-05-19 07:22:10 +00004887 assert((yyvsp[-4].ArgList)->back().Ty->get() == Type::VoidTy && (yyvsp[-4].ArgList)->back().Name == 0 &&
Reid Spencera9720f52007-02-05 17:04:00 +00004888 "Not a varargs marker!");
Reid Spencered951ea2007-05-19 07:22:10 +00004889 delete (yyvsp[-4].ArgList)->back().Ty;
4890 (yyvsp[-4].ArgList)->pop_back(); // Delete the last entry
Reid Spencer68a24bd2005-08-27 18:50:39 +00004891 }
4892 Function::arg_iterator ArgIt = Fn->arg_begin();
Reid Spenceref9b9a72007-02-05 20:47:22 +00004893 Function::arg_iterator ArgEnd = Fn->arg_end();
Reid Spencer14310612006-12-31 05:40:51 +00004894 unsigned Idx = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00004895 for (ArgListType::iterator I = (yyvsp[-4].ArgList)->begin();
4896 I != (yyvsp[-4].ArgList)->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
Reid Spencer14310612006-12-31 05:40:51 +00004897 delete I->Ty; // Delete the typeholder...
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004898 setValueName(ArgIt, I->Name); // Insert arg into symtab...
Reid Spencer5b7e7532006-09-28 19:28:24 +00004899 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00004900 InsertValue(ArgIt);
Reid Spencer14310612006-12-31 05:40:51 +00004901 Idx++;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004902 }
Reid Spencera132e042006-12-03 05:46:11 +00004903
Reid Spencered951ea2007-05-19 07:22:10 +00004904 delete (yyvsp[-4].ArgList); // We're now done with the argument list
Reid Spencer68a24bd2005-08-27 18:50:39 +00004905 }
Reid Spencer61c83e02006-08-18 08:43:06 +00004906 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004907;}
4908 break;
4909
4910 case 224:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004911#line 2332 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004912 {
4913 (yyval.FunctionVal) = CurFun.CurrentFunction;
Reid Spencer68a24bd2005-08-27 18:50:39 +00004914
4915 // Make sure that we keep track of the linkage type even if there was a
4916 // previous "declare".
Reid Spencered951ea2007-05-19 07:22:10 +00004917 (yyval.FunctionVal)->setLinkage((yyvsp[-3].Linkage));
4918 (yyval.FunctionVal)->setVisibility((yyvsp[-2].Visibility));
4919;}
4920 break;
4921
4922 case 227:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004923#line 2343 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004924 {
4925 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004926 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004927;}
4928 break;
4929
4930 case 228:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004931#line 2348 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004932 {
4933 CurFun.CurrentFunction->setLinkage((yyvsp[-2].Linkage));
4934 CurFun.CurrentFunction->setVisibility((yyvsp[-1].Visibility));
4935 (yyval.FunctionVal) = CurFun.CurrentFunction;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00004936 CurFun.FunctionDone();
Reid Spencer41dff5e2007-01-26 08:05:27 +00004937 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004938 ;}
4939 break;
4940
4941 case 229:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004942#line 2360 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004943 {
4944 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00004945 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004946 ;}
4947 break;
4948
4949 case 230:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004950#line 2364 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004951 {
4952 (yyval.BoolVal) = true;
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00004953 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004954 ;}
4955 break;
4956
4957 case 231:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004958#line 2369 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004959 { // A reference to a direct constant
4960 (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004961 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004962 ;}
4963 break;
4964
4965 case 232:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004966#line 2373 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004967 {
4968 (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00004969 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004970 ;}
4971 break;
4972
4973 case 233:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004974#line 2377 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004975 { // Perhaps it's an FP constant?
4976 (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00004977 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004978 ;}
4979 break;
4980
4981 case 234:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004982#line 2381 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004983 {
4984 (yyval.ValIDVal) = ValID::create(ConstantInt::getTrue());
Reid Spencere4d87aa2006-12-23 06:05:41 +00004985 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004986 ;}
4987 break;
4988
4989 case 235:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004990#line 2385 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004991 {
4992 (yyval.ValIDVal) = ValID::create(ConstantInt::getFalse());
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00004993 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00004994 ;}
4995 break;
4996
4997 case 236:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00004998#line 2389 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00004999 {
5000 (yyval.ValIDVal) = ValID::createNull();
Zhou Sheng6b6b6ef2007-01-11 12:24:14 +00005001 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005002 ;}
5003 break;
5004
5005 case 237:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005006#line 2393 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005007 {
5008 (yyval.ValIDVal) = ValID::createUndef();
Reid Spencer61c83e02006-08-18 08:43:06 +00005009 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005010 ;}
5011 break;
5012
5013 case 238:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005014#line 2397 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005015 { // A vector zero constant.
5016 (yyval.ValIDVal) = ValID::createZeroInit();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005017 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005018 ;}
5019 break;
5020
5021 case 239:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005022#line 2401 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005023 { // Nonempty unsized packed vector
5024 const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
5025 int NumElements = (yyvsp[-1].ConstVector)->size();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005026
Reid Spencer9d6565a2007-02-15 02:26:10 +00005027 VectorType* pt = VectorType::get(ETy, NumElements);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005028 PATypeHolder* PTy = new PATypeHolder(
Reid Spencera132e042006-12-03 05:46:11 +00005029 HandleUpRefs(
Reid Spencer9d6565a2007-02-15 02:26:10 +00005030 VectorType::get(
Reid Spencera132e042006-12-03 05:46:11 +00005031 ETy,
5032 NumElements)
5033 )
5034 );
Reid Spencer68a24bd2005-08-27 18:50:39 +00005035
5036 // Verify all elements are correct type!
Reid Spencered951ea2007-05-19 07:22:10 +00005037 for (unsigned i = 0; i < (yyvsp[-1].ConstVector)->size(); i++) {
5038 if (ETy != (*(yyvsp[-1].ConstVector))[i]->getType())
Reid Spencer61c83e02006-08-18 08:43:06 +00005039 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
Reid Spencer68a24bd2005-08-27 18:50:39 +00005040 ETy->getDescription() +"' as required!\nIt is of type '" +
Reid Spencered951ea2007-05-19 07:22:10 +00005041 (*(yyvsp[-1].ConstVector))[i]->getType()->getDescription() + "'.");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005042 }
5043
Reid Spencered951ea2007-05-19 07:22:10 +00005044 (yyval.ValIDVal) = ValID::create(ConstantVector::get(pt, *(yyvsp[-1].ConstVector)));
5045 delete PTy; delete (yyvsp[-1].ConstVector);
Reid Spencer832254e2007-02-02 02:16:23 +00005046 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005047 ;}
5048 break;
5049
5050 case 240:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005051#line 2426 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005052 {
5053 (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005054 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005055 ;}
5056 break;
5057
5058 case 241:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005059#line 2430 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005060 {
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005061 (yyval.ValIDVal) = ValID::createInlineAsm(*(yyvsp[-2].StrVal), *(yyvsp[0].StrVal), (yyvsp[-3].BoolVal));
5062 delete (yyvsp[-2].StrVal);
5063 delete (yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005064 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005065 ;}
5066 break;
5067
5068 case 242:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005069#line 2440 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005070 { // Is it an integer reference...?
5071 (yyval.ValIDVal) = ValID::createLocalID((yyvsp[0].UIntVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005072 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005073 ;}
5074 break;
5075
5076 case 243:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005077#line 2444 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005078 {
5079 (yyval.ValIDVal) = ValID::createGlobalID((yyvsp[0].UIntVal));
Reid Spencer832254e2007-02-02 02:16:23 +00005080 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005081 ;}
5082 break;
5083
5084 case 244:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005085#line 2448 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005086 { // Is it a named reference...?
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005087 (yyval.ValIDVal) = ValID::createLocalName(*(yyvsp[0].StrVal));
5088 delete (yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005089 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005090 ;}
5091 break;
5092
5093 case 245:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005094#line 2453 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005095 { // Is it a named reference...?
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005096 (yyval.ValIDVal) = ValID::createGlobalName(*(yyvsp[0].StrVal));
5097 delete (yyvsp[0].StrVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005098 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005099 ;}
5100 break;
5101
5102 case 248:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005103#line 2466 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005104 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005105 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005106 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5107 (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal));
5108 delete (yyvsp[-1].TypeVal);
Reid Spencer832254e2007-02-02 02:16:23 +00005109 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005110 ;}
5111 break;
5112
5113 case 249:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005114#line 2475 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005115 {
5116 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005117 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005118 ;}
5119 break;
5120
5121 case 250:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005122#line 2479 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005123 { // Do not allow functions with 0 basic blocks
5124 (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005125 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005126 ;}
5127 break;
5128
5129 case 251:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005130#line 2488 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005131 {
5132 setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005133 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005134 InsertValue((yyvsp[0].TermInstVal));
5135 (yyvsp[-2].BasicBlockVal)->getInstList().push_back((yyvsp[0].TermInstVal));
5136 (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005137 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005138 ;}
5139 break;
5140
5141 case 252:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005142#line 2497 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005143 {
5144 if (CastInst *CI1 = dyn_cast<CastInst>((yyvsp[0].InstVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005145 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
5146 if (CI2->getParent() == 0)
Reid Spencered951ea2007-05-19 07:22:10 +00005147 (yyvsp[-1].BasicBlockVal)->getInstList().push_back(CI2);
5148 (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
5149 (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005150 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005151 ;}
5152 break;
Anton Korobeynikov38e09802007-04-28 13:48:45 +00005153
Reid Spencered951ea2007-05-19 07:22:10 +00005154 case 253:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005155#line 2506 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005156 { // Empty space between instruction lists
5157 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalID(CurFun.NextValNum));
5158 CHECK_FOR_ERROR
5159 ;}
5160 break;
5161
5162 case 254:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005163#line 2510 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005164 { // Labelled (named) basic block
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005165 (yyval.BasicBlockVal) = defineBBVal(ValID::createLocalName(*(yyvsp[0].StrVal)));
5166 delete (yyvsp[0].StrVal);
Reid Spencered951ea2007-05-19 07:22:10 +00005167 CHECK_FOR_ERROR
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005168
Reid Spencered951ea2007-05-19 07:22:10 +00005169 ;}
5170 break;
5171
5172 case 255:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005173#line 2517 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005174 { // Return with a result...
5175 (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
5176 CHECK_FOR_ERROR
5177 ;}
5178 break;
5179
5180 case 256:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005181#line 2521 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005182 { // Return with no result...
5183 (yyval.TermInstVal) = new ReturnInst();
5184 CHECK_FOR_ERROR
5185 ;}
5186 break;
5187
5188 case 257:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005189#line 2525 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005190 { // Unconditional Branch...
5191 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
5192 CHECK_FOR_ERROR
5193 (yyval.TermInstVal) = new BranchInst(tmpBB);
5194 ;}
5195 break;
5196
5197 case 258:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005198#line 2530 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005199 {
5200 assert(cast<IntegerType>((yyvsp[-7].PrimType))->getBitWidth() == 1 && "Not Bool?");
5201 BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
5202 CHECK_FOR_ERROR
5203 BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
5204 CHECK_FOR_ERROR
5205 Value* tmpVal = getVal(Type::Int1Ty, (yyvsp[-6].ValIDVal));
5206 CHECK_FOR_ERROR
5207 (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
5208 ;}
5209 break;
5210
5211 case 259:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005212#line 2540 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005213 {
5214 Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
5215 CHECK_FOR_ERROR
5216 BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
5217 CHECK_FOR_ERROR
5218 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, (yyvsp[-1].JumpTable)->size());
5219 (yyval.TermInstVal) = S;
5220
5221 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = (yyvsp[-1].JumpTable)->begin(),
5222 E = (yyvsp[-1].JumpTable)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005223 for (; I != E; ++I) {
5224 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
5225 S->addCase(CI, I->second);
5226 else
Reid Spencerb5334b02007-02-05 10:18:06 +00005227 GEN_ERROR("Switch case is constant, but not a simple integer");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005228 }
Reid Spencered951ea2007-05-19 07:22:10 +00005229 delete (yyvsp[-1].JumpTable);
Reid Spencer61c83e02006-08-18 08:43:06 +00005230 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005231 ;}
5232 break;
5233
5234 case 260:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005235#line 2559 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005236 {
5237 Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005238 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005239 BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005240 CHECK_FOR_ERROR
5241 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
Reid Spencered951ea2007-05-19 07:22:10 +00005242 (yyval.TermInstVal) = S;
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005243 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005244 ;}
5245 break;
5246
5247 case 261:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005248#line 2569 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005249 {
Reid Spencer3822ff52006-11-08 06:47:33 +00005250
Reid Spencer14310612006-12-31 05:40:51 +00005251 // Handle the short syntax
5252 const PointerType *PFTy = 0;
5253 const FunctionType *Ty = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00005254 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-11].TypeVal)->get())) ||
Reid Spencer68a24bd2005-08-27 18:50:39 +00005255 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5256 // Pull out the types of all of the arguments...
5257 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005258 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005259 if ((yyvsp[-6].ParamAttrs) != ParamAttr::None) {
5260 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[-6].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005261 Attrs.push_back(PAWI);
5262 }
Reid Spencered951ea2007-05-19 07:22:10 +00005263 ValueRefList::iterator I = (yyvsp[-8].ValueRefList)->begin(), E = (yyvsp[-8].ValueRefList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005264 unsigned index = 1;
5265 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005266 const Type *Ty = I->Val->getType();
5267 if (Ty == Type::VoidTy)
5268 GEN_ERROR("Short call syntax cannot be used with varargs");
5269 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005270 if (I->Attrs != ParamAttr::None) {
5271 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5272 Attrs.push_back(PAWI);
5273 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005274 }
5275
Christopher Lamb5c104242007-04-22 20:09:11 +00005276 ParamAttrsList *PAL = 0;
5277 if (!Attrs.empty())
5278 PAL = ParamAttrsList::get(Attrs);
Reid Spencered951ea2007-05-19 07:22:10 +00005279 Ty = FunctionType::get((yyvsp[-11].TypeVal)->get(), ParamTypes, false, PAL);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005280 PFTy = PointerType::get(Ty);
5281 }
5282
Reid Spencered951ea2007-05-19 07:22:10 +00005283 delete (yyvsp[-11].TypeVal);
Reid Spencer66728ef2007-03-20 01:13:36 +00005284
Reid Spencered951ea2007-05-19 07:22:10 +00005285 Value *V = getVal(PFTy, (yyvsp[-10].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005286 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005287 BasicBlock *Normal = getBBVal((yyvsp[-3].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005288 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005289 BasicBlock *Except = getBBVal((yyvsp[0].ValIDVal));
Reid Spencer5b7e7532006-09-28 19:28:24 +00005290 CHECK_FOR_ERROR
Reid Spencer68a24bd2005-08-27 18:50:39 +00005291
Reid Spencer14310612006-12-31 05:40:51 +00005292 // Check the arguments
5293 ValueList Args;
Reid Spencered951ea2007-05-19 07:22:10 +00005294 if ((yyvsp[-8].ValueRefList)->empty()) { // Has no arguments?
Reid Spencer14310612006-12-31 05:40:51 +00005295 // Make sure no arguments is a good thing!
5296 if (Ty->getNumParams() != 0)
5297 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005298 "expects arguments");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005299 } else { // Has arguments?
5300 // Loop through FunctionType's arguments and ensure they are specified
5301 // correctly!
Reid Spencer68a24bd2005-08-27 18:50:39 +00005302 FunctionType::param_iterator I = Ty->param_begin();
5303 FunctionType::param_iterator E = Ty->param_end();
Reid Spencered951ea2007-05-19 07:22:10 +00005304 ValueRefList::iterator ArgI = (yyvsp[-8].ValueRefList)->begin(), ArgE = (yyvsp[-8].ValueRefList)->end();
Reid Spencer68a24bd2005-08-27 18:50:39 +00005305
Reid Spencer14310612006-12-31 05:40:51 +00005306 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5307 if (ArgI->Val->getType() != *I)
5308 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005309 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005310 Args.push_back(ArgI->Val);
5311 }
Reid Spencer68a24bd2005-08-27 18:50:39 +00005312
Reid Spencer14310612006-12-31 05:40:51 +00005313 if (Ty->isVarArg()) {
5314 if (I == E)
5315 for (; ArgI != ArgE; ++ArgI)
5316 Args.push_back(ArgI->Val); // push the remaining varargs
5317 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005318 GEN_ERROR("Invalid number of parameters detected");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005319 }
Reid Spencer14310612006-12-31 05:40:51 +00005320
5321 // Create the InvokeInst
Chris Lattner9d2fda62007-02-13 05:53:56 +00005322 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
Reid Spencered951ea2007-05-19 07:22:10 +00005323 II->setCallingConv((yyvsp[-12].UIntVal));
5324 (yyval.TermInstVal) = II;
5325 delete (yyvsp[-8].ValueRefList);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005326 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005327 ;}
5328 break;
5329
5330 case 262:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005331#line 2648 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005332 {
5333 (yyval.TermInstVal) = new UnwindInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005334 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005335 ;}
5336 break;
5337
5338 case 263:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005339#line 2652 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005340 {
5341 (yyval.TermInstVal) = new UnreachableInst();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005342 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005343 ;}
5344 break;
5345
5346 case 264:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005347#line 2659 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005348 {
5349 (yyval.JumpTable) = (yyvsp[-5].JumpTable);
5350 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005351 CHECK_FOR_ERROR
5352 if (V == 0)
5353 GEN_ERROR("May only switch on a constant pool value");
5354
Reid Spencered951ea2007-05-19 07:22:10 +00005355 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005356 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005357 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5358 ;}
5359 break;
5360
5361 case 265:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005362#line 2670 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005363 {
5364 (yyval.JumpTable) = new std::vector<std::pair<Constant*, BasicBlock*> >();
5365 Constant *V = cast<Constant>(getExistingVal((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005366 CHECK_FOR_ERROR
5367
5368 if (V == 0)
Reid Spencerb5334b02007-02-05 10:18:06 +00005369 GEN_ERROR("May only switch on a constant pool value");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005370
Reid Spencered951ea2007-05-19 07:22:10 +00005371 BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005372 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005373 (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
5374 ;}
5375 break;
5376
5377 case 266:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005378#line 2683 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005379 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005380 // Is this definition named?? if so, assign the name...
Reid Spencered951ea2007-05-19 07:22:10 +00005381 setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005382 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005383 InsertValue((yyvsp[0].InstVal));
5384 (yyval.InstVal) = (yyvsp[0].InstVal);
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005385 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005386 ;}
5387 break;
5388
5389 case 267:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005390#line 2693 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005391 { // Used for PHI nodes
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005392 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005393 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-5].TypeVal))->getDescription());
5394 (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
5395 Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
Reid Spencer6f407902007-01-13 05:00:46 +00005396 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005397 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005398 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005399 (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5400 delete (yyvsp[-5].TypeVal);
5401 ;}
5402 break;
5403
5404 case 268:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005405#line 2704 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005406 {
5407 (yyval.PHIList) = (yyvsp[-6].PHIList);
5408 Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005409 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005410 BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005411 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005412 (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
5413 ;}
5414 break;
5415
5416 case 269:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005417#line 2714 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005418 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005419 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005420 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005421 // Used for call and invoke instructions
Reid Spencered951ea2007-05-19 07:22:10 +00005422 (yyval.ValueRefList) = new ValueRefList();
5423 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5424 (yyval.ValueRefList)->push_back(E);
5425 delete (yyvsp[-2].TypeVal);
5426 ;}
5427 break;
5428
5429 case 270:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005430#line 2723 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005431 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005432 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005433 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5434 (yyval.ValueRefList) = (yyvsp[-4].ValueRefList);
5435 ValueRefListEntry E; E.Attrs = (yyvsp[0].ParamAttrs); E.Val = getVal((yyvsp[-2].TypeVal)->get(), (yyvsp[-1].ValIDVal));
5436 (yyval.ValueRefList)->push_back(E);
5437 delete (yyvsp[-2].TypeVal);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005438 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005439 ;}
5440 break;
5441
5442 case 271:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005443#line 2732 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005444 { (yyval.ValueRefList) = new ValueRefList(); ;}
5445 break;
5446
5447 case 272:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005448#line 2735 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005449 { (yyval.ValueList) = new std::vector<Value*>(); ;}
5450 break;
5451
5452 case 273:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005453#line 2736 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005454 {
5455 (yyval.ValueList) = (yyvsp[-2].ValueList);
5456 (yyval.ValueList)->push_back((yyvsp[0].ValueVal));
Reid Spencere4d87aa2006-12-23 06:05:41 +00005457 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005458 ;}
5459 break;
5460
5461 case 274:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005462#line 2743 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005463 {
5464 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005465 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005466 ;}
5467 break;
5468
5469 case 275:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005470#line 2747 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005471 {
5472 (yyval.BoolVal) = false;
Andrew Lenharth6353e052006-12-08 18:07:09 +00005473 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005474 ;}
5475 break;
5476
5477 case 276:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005478#line 2752 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005479 {
Reid Spencer14310612006-12-31 05:40:51 +00005480 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005481 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5482 if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
5483 !isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005484 GEN_ERROR(
5485 "Arithmetic operator requires integer, FP, or packed operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005486 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()) &&
5487 ((yyvsp[-4].BinaryOpVal) == Instruction::URem ||
5488 (yyvsp[-4].BinaryOpVal) == Instruction::SRem ||
5489 (yyvsp[-4].BinaryOpVal) == Instruction::FRem))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005490 GEN_ERROR("Remainder not supported on vector types");
Reid Spencered951ea2007-05-19 07:22:10 +00005491 Value* val1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005492 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005493 Value* val2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005494 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005495 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), val1, val2);
5496 if ((yyval.InstVal) == 0)
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005497 GEN_ERROR("binary operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005498 delete (yyvsp[-3].TypeVal);
5499 ;}
5500 break;
5501
5502 case 277:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005503#line 2773 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005504 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005505 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005506 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5507 if (!(*(yyvsp[-3].TypeVal))->isInteger()) {
5508 if (Instruction::isShift((yyvsp[-4].BinaryOpVal)) || !isa<VectorType>((yyvsp[-3].TypeVal)->get()) ||
5509 !cast<VectorType>((yyvsp[-3].TypeVal)->get())->getElementType()->isInteger())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005510 GEN_ERROR("Logical operator requires integral operands");
5511 }
Reid Spencered951ea2007-05-19 07:22:10 +00005512 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005513 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005514 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005515 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005516 (yyval.InstVal) = BinaryOperator::create((yyvsp[-4].BinaryOpVal), tmpVal1, tmpVal2);
5517 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005518 GEN_ERROR("binary operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005519 delete (yyvsp[-3].TypeVal);
5520 ;}
5521 break;
5522
5523 case 278:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005524#line 2790 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005525 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005526 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005527 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5528 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005529 GEN_ERROR("Vector types not supported by icmp instruction");
Reid Spencered951ea2007-05-19 07:22:10 +00005530 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005531 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005532 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005533 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005534 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].IPredicate), tmpVal1, tmpVal2);
5535 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005536 GEN_ERROR("icmp operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005537 delete (yyvsp[-3].TypeVal);
5538 ;}
5539 break;
5540
5541 case 279:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005542#line 2804 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005543 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005544 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005545 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-3].TypeVal))->getDescription());
5546 if (isa<VectorType>((*(yyvsp[-3].TypeVal)).get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005547 GEN_ERROR("Vector types not supported by fcmp instruction");
Reid Spencered951ea2007-05-19 07:22:10 +00005548 Value* tmpVal1 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[-2].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005549 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005550 Value* tmpVal2 = getVal(*(yyvsp[-3].TypeVal), (yyvsp[0].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005551 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005552 (yyval.InstVal) = CmpInst::create((yyvsp[-5].OtherOpVal), (yyvsp[-4].FPredicate), tmpVal1, tmpVal2);
5553 if ((yyval.InstVal) == 0)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005554 GEN_ERROR("fcmp operator returned null");
Reid Spencered951ea2007-05-19 07:22:10 +00005555 delete (yyvsp[-3].TypeVal);
5556 ;}
5557 break;
5558
5559 case 280:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005560#line 2818 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005561 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005562 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005563 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5564 Value* Val = (yyvsp[-2].ValueVal);
5565 const Type* DestTy = (yyvsp[0].TypeVal)->get();
5566 if (!CastInst::castIsValid((yyvsp[-3].CastOpVal), Val, DestTy))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005567 GEN_ERROR("invalid cast opcode for cast from '" +
5568 Val->getType()->getDescription() + "' to '" +
5569 DestTy->getDescription() + "'");
Reid Spencered951ea2007-05-19 07:22:10 +00005570 (yyval.InstVal) = CastInst::create((yyvsp[-3].CastOpVal), Val, DestTy);
5571 delete (yyvsp[0].TypeVal);
5572 ;}
5573 break;
5574
5575 case 281:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005576#line 2830 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005577 {
5578 if ((yyvsp[-4].ValueVal)->getType() != Type::Int1Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005579 GEN_ERROR("select condition must be boolean");
Reid Spencered951ea2007-05-19 07:22:10 +00005580 if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005581 GEN_ERROR("select value types should match");
Reid Spencered951ea2007-05-19 07:22:10 +00005582 (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Andrew Lenharth6353e052006-12-08 18:07:09 +00005583 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005584 ;}
5585 break;
5586
5587 case 282:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005588#line 2838 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005589 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005590 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005591 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
5592 (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
5593 delete (yyvsp[0].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005594 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005595 ;}
5596 break;
5597
5598 case 283:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005599#line 2845 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005600 {
5601 if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005602 GEN_ERROR("Invalid extractelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005603 (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005604 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005605 ;}
5606 break;
5607
5608 case 284:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005609#line 2851 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005610 {
5611 if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005612 GEN_ERROR("Invalid insertelement operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005613 (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005614 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005615 ;}
5616 break;
5617
5618 case 285:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005619#line 2857 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005620 {
5621 if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005622 GEN_ERROR("Invalid shufflevector operands");
Reid Spencered951ea2007-05-19 07:22:10 +00005623 (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005624 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005625 ;}
5626 break;
5627
5628 case 286:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005629#line 2863 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005630 {
5631 const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005632 if (!Ty->isFirstClassType())
5633 GEN_ERROR("PHI node operands must be of first class type");
Reid Spencered951ea2007-05-19 07:22:10 +00005634 (yyval.InstVal) = new PHINode(Ty);
5635 ((PHINode*)(yyval.InstVal))->reserveOperandSpace((yyvsp[0].PHIList)->size());
5636 while ((yyvsp[0].PHIList)->begin() != (yyvsp[0].PHIList)->end()) {
5637 if ((yyvsp[0].PHIList)->front().first->getType() != Ty)
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005638 GEN_ERROR("All elements of a PHI node must be of the same type");
Reid Spencered951ea2007-05-19 07:22:10 +00005639 cast<PHINode>((yyval.InstVal))->addIncoming((yyvsp[0].PHIList)->front().first, (yyvsp[0].PHIList)->front().second);
5640 (yyvsp[0].PHIList)->pop_front();
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005641 }
Reid Spencered951ea2007-05-19 07:22:10 +00005642 delete (yyvsp[0].PHIList); // Free the list...
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005643 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005644 ;}
5645 break;
5646
5647 case 287:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005648#line 2879 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005649 {
Reid Spencer14310612006-12-31 05:40:51 +00005650
5651 // Handle the short syntax
Andrew Lenharth6353e052006-12-08 18:07:09 +00005652 const PointerType *PFTy = 0;
5653 const FunctionType *Ty = 0;
Reid Spencered951ea2007-05-19 07:22:10 +00005654 if (!(PFTy = dyn_cast<PointerType>((yyvsp[-5].TypeVal)->get())) ||
Andrew Lenharth6353e052006-12-08 18:07:09 +00005655 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5656 // Pull out the types of all of the arguments...
5657 std::vector<const Type*> ParamTypes;
Christopher Lamb5c104242007-04-22 20:09:11 +00005658 ParamAttrsVector Attrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005659 if ((yyvsp[0].ParamAttrs) != ParamAttr::None) {
5660 ParamAttrsWithIndex PAWI; PAWI.index = 0; PAWI.attrs = (yyvsp[0].ParamAttrs);
Christopher Lamb5c104242007-04-22 20:09:11 +00005661 Attrs.push_back(PAWI);
5662 }
Reid Spencer7b5d4662007-04-09 06:16:21 +00005663 unsigned index = 1;
Reid Spencered951ea2007-05-19 07:22:10 +00005664 ValueRefList::iterator I = (yyvsp[-2].ValueRefList)->begin(), E = (yyvsp[-2].ValueRefList)->end();
Reid Spencer7b5d4662007-04-09 06:16:21 +00005665 for (; I != E; ++I, ++index) {
Reid Spencer14310612006-12-31 05:40:51 +00005666 const Type *Ty = I->Val->getType();
5667 if (Ty == Type::VoidTy)
5668 GEN_ERROR("Short call syntax cannot be used with varargs");
5669 ParamTypes.push_back(Ty);
Christopher Lamb5c104242007-04-22 20:09:11 +00005670 if (I->Attrs != ParamAttr::None) {
5671 ParamAttrsWithIndex PAWI; PAWI.index = index; PAWI.attrs = I->Attrs;
5672 Attrs.push_back(PAWI);
5673 }
Andrew Lenharth6353e052006-12-08 18:07:09 +00005674 }
5675
Christopher Lamb5c104242007-04-22 20:09:11 +00005676 ParamAttrsList *PAL = 0;
5677 if (!Attrs.empty())
5678 PAL = ParamAttrsList::get(Attrs);
Reid Spencer7b5d4662007-04-09 06:16:21 +00005679
Reid Spencered951ea2007-05-19 07:22:10 +00005680 Ty = FunctionType::get((yyvsp[-5].TypeVal)->get(), ParamTypes, false, PAL);
Andrew Lenharth6353e052006-12-08 18:07:09 +00005681 PFTy = PointerType::get(Ty);
5682 }
Chris Lattner6cdc6822007-04-26 05:31:05 +00005683
Reid Spencered951ea2007-05-19 07:22:10 +00005684 Value *V = getVal(PFTy, (yyvsp[-4].ValIDVal)); // Get the function we're calling...
Andrew Lenharth6353e052006-12-08 18:07:09 +00005685 CHECK_FOR_ERROR
Chris Lattner6cdc6822007-04-26 05:31:05 +00005686
Reid Spencer7780acb2007-04-16 06:56:07 +00005687 // Check for call to invalid intrinsic to avoid crashing later.
5688 if (Function *theF = dyn_cast<Function>(V)) {
Reid Spencered48de22007-04-16 22:02:23 +00005689 if (theF->hasName() && (theF->getValueName()->getKeyLength() >= 5) &&
Reid Spencer36fdde12007-04-16 20:35:38 +00005690 (0 == strncmp(theF->getValueName()->getKeyData(), "llvm.", 5)) &&
5691 !theF->getIntrinsicID(true))
Reid Spencer7780acb2007-04-16 06:56:07 +00005692 GEN_ERROR("Call to invalid LLVM intrinsic function '" +
5693 theF->getName() + "'");
5694 }
5695
Reid Spencer14310612006-12-31 05:40:51 +00005696 // Check the arguments
5697 ValueList Args;
Reid Spencered951ea2007-05-19 07:22:10 +00005698 if ((yyvsp[-2].ValueRefList)->empty()) { // Has no arguments?
Andrew Lenharth6353e052006-12-08 18:07:09 +00005699 // Make sure no arguments is a good thing!
5700 if (Ty->getNumParams() != 0)
5701 GEN_ERROR("No arguments passed to a function that "
Reid Spencerb5334b02007-02-05 10:18:06 +00005702 "expects arguments");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005703 } else { // Has arguments?
5704 // Loop through FunctionType's arguments and ensure they are specified
5705 // correctly!
5706 //
5707 FunctionType::param_iterator I = Ty->param_begin();
5708 FunctionType::param_iterator E = Ty->param_end();
Reid Spencered951ea2007-05-19 07:22:10 +00005709 ValueRefList::iterator ArgI = (yyvsp[-2].ValueRefList)->begin(), ArgE = (yyvsp[-2].ValueRefList)->end();
Andrew Lenharth6353e052006-12-08 18:07:09 +00005710
Reid Spencer14310612006-12-31 05:40:51 +00005711 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
5712 if (ArgI->Val->getType() != *I)
5713 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
Reid Spencerb5334b02007-02-05 10:18:06 +00005714 (*I)->getDescription() + "'");
Reid Spencer14310612006-12-31 05:40:51 +00005715 Args.push_back(ArgI->Val);
5716 }
5717 if (Ty->isVarArg()) {
5718 if (I == E)
5719 for (; ArgI != ArgE; ++ArgI)
5720 Args.push_back(ArgI->Val); // push the remaining varargs
5721 } else if (I != E || ArgI != ArgE)
Reid Spencerb5334b02007-02-05 10:18:06 +00005722 GEN_ERROR("Invalid number of parameters detected");
Andrew Lenharth6353e052006-12-08 18:07:09 +00005723 }
Reid Spencer14310612006-12-31 05:40:51 +00005724 // Create the call node
Chris Lattner9d2fda62007-02-13 05:53:56 +00005725 CallInst *CI = new CallInst(V, &Args[0], Args.size());
Reid Spencered951ea2007-05-19 07:22:10 +00005726 CI->setTailCall((yyvsp[-7].BoolVal));
5727 CI->setCallingConv((yyvsp[-6].UIntVal));
5728 (yyval.InstVal) = CI;
5729 delete (yyvsp[-2].ValueRefList);
5730 delete (yyvsp[-5].TypeVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005731 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005732 ;}
5733 break;
5734
5735 case 288:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005736#line 2963 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005737 {
5738 (yyval.InstVal) = (yyvsp[0].InstVal);
Reid Spencere4d87aa2006-12-23 06:05:41 +00005739 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005740 ;}
5741 break;
5742
5743 case 289:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005744#line 2968 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005745 {
5746 (yyval.BoolVal) = true;
Reid Spencere4d87aa2006-12-23 06:05:41 +00005747 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005748 ;}
5749 break;
5750
5751 case 290:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005752#line 2972 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005753 {
5754 (yyval.BoolVal) = false;
Reid Spencer61c83e02006-08-18 08:43:06 +00005755 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005756 ;}
5757 break;
5758
5759 case 291:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005760#line 2979 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005761 {
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005762 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005763 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5764 (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5765 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005766 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005767 ;}
5768 break;
5769
5770 case 292:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005771#line 2986 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005772 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005773 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005774 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5775 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005776 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005777 (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5778 delete (yyvsp[-4].TypeVal);
5779 ;}
5780 break;
5781
5782 case 293:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005783#line 2994 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005784 {
Reid Spencer14310612006-12-31 05:40:51 +00005785 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005786 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-1].TypeVal))->getDescription());
5787 (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
5788 delete (yyvsp[-1].TypeVal);
Reid Spencer61c83e02006-08-18 08:43:06 +00005789 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005790 ;}
5791 break;
5792
5793 case 294:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005794#line 3001 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005795 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005796 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005797 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-4].TypeVal))->getDescription());
5798 Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
Anton Korobeynikov9adeaa22007-01-28 13:37:39 +00005799 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005800 (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
5801 delete (yyvsp[-4].TypeVal);
5802 ;}
5803 break;
5804
5805 case 295:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005806#line 3009 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005807 {
5808 if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005809 GEN_ERROR("Trying to free nonpointer type " +
Reid Spencered951ea2007-05-19 07:22:10 +00005810 (yyvsp[0].ValueVal)->getType()->getDescription() + "");
5811 (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005812 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005813 ;}
5814 break;
5815
5816 case 296:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005817#line 3017 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005818 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005819 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005820 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5821 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005822 GEN_ERROR("Can't load from nonpointer type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005823 (*(yyvsp[-2].TypeVal))->getDescription());
5824 if (!cast<PointerType>((yyvsp[-2].TypeVal)->get())->getElementType()->isFirstClassType())
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005825 GEN_ERROR("Can't load from pointer of non-first-class type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005826 (*(yyvsp[-2].TypeVal))->getDescription());
5827 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005828 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005829 (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-4].BoolVal), (yyvsp[0].UIntVal));
5830 delete (yyvsp[-2].TypeVal);
5831 ;}
5832 break;
5833
5834 case 297:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005835#line 3031 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005836 {
Lauro Ramos Venancioc7635522007-04-12 18:32:50 +00005837 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005838 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5839 const PointerType *PT = dyn_cast<PointerType>((yyvsp[-2].TypeVal)->get());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005840 if (!PT)
5841 GEN_ERROR("Can't store to a nonpointer type: " +
Reid Spencered951ea2007-05-19 07:22:10 +00005842 (*(yyvsp[-2].TypeVal))->getDescription());
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005843 const Type *ElTy = PT->getElementType();
Reid Spencered951ea2007-05-19 07:22:10 +00005844 if (ElTy != (yyvsp[-4].ValueVal)->getType())
5845 GEN_ERROR("Can't store '" + (yyvsp[-4].ValueVal)->getType()->getDescription() +
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005846 "' into space of type '" + ElTy->getDescription() + "'");
5847
Reid Spencered951ea2007-05-19 07:22:10 +00005848 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005849 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005850 (yyval.InstVal) = new StoreInst((yyvsp[-4].ValueVal), tmpVal, (yyvsp[-6].BoolVal), (yyvsp[0].UIntVal));
5851 delete (yyvsp[-2].TypeVal);
5852 ;}
5853 break;
5854
5855 case 298:
Reid Spencer0a8a16b2007-05-22 18:52:55 +00005856#line 3048 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencered951ea2007-05-19 07:22:10 +00005857 {
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00005858 if (!UpRefs.empty())
Reid Spencered951ea2007-05-19 07:22:10 +00005859 GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[-2].TypeVal))->getDescription());
5860 if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
Reid Spencerb5334b02007-02-05 10:18:06 +00005861 GEN_ERROR("getelementptr insn requires pointer operand");
Reid Spencer68a24bd2005-08-27 18:50:39 +00005862
Reid Spencered951ea2007-05-19 07:22:10 +00005863 if (!GetElementPtrInst::getIndexedType(*(yyvsp[-2].TypeVal), &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size(), true))
Reid Spencer61c83e02006-08-18 08:43:06 +00005864 GEN_ERROR("Invalid getelementptr indices for type '" +
Reid Spencered951ea2007-05-19 07:22:10 +00005865 (*(yyvsp[-2].TypeVal))->getDescription()+ "'");
5866 Value* tmpVal = getVal(*(yyvsp[-2].TypeVal), (yyvsp[-1].ValIDVal));
Reid Spencer61c83e02006-08-18 08:43:06 +00005867 CHECK_FOR_ERROR
Reid Spencered951ea2007-05-19 07:22:10 +00005868 (yyval.InstVal) = new GetElementPtrInst(tmpVal, &(*(yyvsp[0].ValueList))[0], (yyvsp[0].ValueList)->size());
5869 delete (yyvsp[-2].TypeVal);
5870 delete (yyvsp[0].ValueList);
5871 ;}
5872 break;
5873
5874
5875 default: break;
5876 }
5877
5878/* Line 1126 of yacc.c. */
5879#line 5880 "llvmAsmParser.tab.c"
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005880
5881 yyvsp -= yylen;
5882 yyssp -= yylen;
Reid Spencer7780acb2007-04-16 06:56:07 +00005883
Reid Spencered951ea2007-05-19 07:22:10 +00005884
5885 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00005886
5887 *++yyvsp = yyval;
5888
5889
Reid Spencered951ea2007-05-19 07:22:10 +00005890 /* Now `shift' the result of the reduction. Determine what state
5891 that goes to, based on the state we popped back to and the rule
5892 number reduced by. */
Reid Spencer68a24bd2005-08-27 18:50:39 +00005893
5894 yyn = yyr1[yyn];
5895
Reid Spencered951ea2007-05-19 07:22:10 +00005896 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5897 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005898 yystate = yytable[yystate];
5899 else
Reid Spencered951ea2007-05-19 07:22:10 +00005900 yystate = yydefgoto[yyn - YYNTOKENS];
Reid Spencer68a24bd2005-08-27 18:50:39 +00005901
5902 goto yynewstate;
5903
5904
Reid Spencered951ea2007-05-19 07:22:10 +00005905/*------------------------------------.
5906| yyerrlab -- here on detecting error |
5907`------------------------------------*/
5908yyerrlab:
5909 /* If not already recovering from an error, report this error. */
5910 if (!yyerrstatus)
Reid Spencer68a24bd2005-08-27 18:50:39 +00005911 {
5912 ++yynerrs;
Reid Spencered951ea2007-05-19 07:22:10 +00005913#if YYERROR_VERBOSE
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005914 yyn = yypact[yystate];
5915
Reid Spencered951ea2007-05-19 07:22:10 +00005916 if (YYPACT_NINF < yyn && yyn < YYLAST)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005917 {
Reid Spencered951ea2007-05-19 07:22:10 +00005918 int yytype = YYTRANSLATE (yychar);
5919 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
5920 YYSIZE_T yysize = yysize0;
5921 YYSIZE_T yysize1;
5922 int yysize_overflow = 0;
5923 char *yymsg = 0;
5924# define YYERROR_VERBOSE_ARGS_MAXIMUM 5
5925 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
5926 int yyx;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005927
Reid Spencered951ea2007-05-19 07:22:10 +00005928#if 0
5929 /* This is so xgettext sees the translatable formats that are
5930 constructed on the fly. */
5931 YY_("syntax error, unexpected %s");
5932 YY_("syntax error, unexpected %s, expecting %s");
5933 YY_("syntax error, unexpected %s, expecting %s or %s");
5934 YY_("syntax error, unexpected %s, expecting %s or %s or %s");
5935 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
5936#endif
5937 char *yyfmt;
5938 char const *yyf;
5939 static char const yyunexpected[] = "syntax error, unexpected %s";
5940 static char const yyexpecting[] = ", expecting %s";
5941 static char const yyor[] = " or %s";
5942 char yyformat[sizeof yyunexpected
5943 + sizeof yyexpecting - 1
5944 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
5945 * (sizeof yyor - 1))];
5946 char const *yyprefix = yyexpecting;
5947
5948 /* Start YYX at -YYN if negative to avoid negative indexes in
5949 YYCHECK. */
5950 int yyxbegin = yyn < 0 ? -yyn : 0;
5951
5952 /* Stay within bounds of both yycheck and yytname. */
5953 int yychecklim = YYLAST - yyn;
5954 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
5955 int yycount = 1;
5956
5957 yyarg[0] = yytname[yytype];
5958 yyfmt = yystpcpy (yyformat, yyunexpected);
5959
5960 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
5961 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
5962 {
5963 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
5964 {
5965 yycount = 1;
5966 yysize = yysize0;
5967 yyformat[sizeof yyunexpected - 1] = '\0';
5968 break;
5969 }
5970 yyarg[yycount++] = yytname[yyx];
5971 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
5972 yysize_overflow |= yysize1 < yysize;
5973 yysize = yysize1;
5974 yyfmt = yystpcpy (yyfmt, yyprefix);
5975 yyprefix = yyor;
5976 }
5977
5978 yyf = YY_(yyformat);
5979 yysize1 = yysize + yystrlen (yyf);
5980 yysize_overflow |= yysize1 < yysize;
5981 yysize = yysize1;
5982
5983 if (!yysize_overflow && yysize <= YYSTACK_ALLOC_MAXIMUM)
5984 yymsg = (char *) YYSTACK_ALLOC (yysize);
5985 if (yymsg)
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005986 {
Reid Spencered951ea2007-05-19 07:22:10 +00005987 /* Avoid sprintf, as that infringes on the user's name space.
5988 Don't have undefined behavior even if the translation
5989 produced a string with the wrong number of "%s"s. */
5990 char *yyp = yymsg;
5991 int yyi = 0;
5992 while ((*yyp = *yyf))
Chris Lattner39b2e8b2007-05-04 04:01:37 +00005993 {
Reid Spencered951ea2007-05-19 07:22:10 +00005994 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
5995 {
5996 yyp += yytnamerr (yyp, yyarg[yyi++]);
5997 yyf += 2;
5998 }
5999 else
6000 {
6001 yyp++;
6002 yyf++;
6003 }
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006004 }
Reid Spencered951ea2007-05-19 07:22:10 +00006005 yyerror (yymsg);
6006 YYSTACK_FREE (yymsg);
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006007 }
6008 else
Reid Spencered951ea2007-05-19 07:22:10 +00006009 {
6010 yyerror (YY_("syntax error"));
6011 goto yyexhaustedlab;
6012 }
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006013 }
6014 else
6015#endif /* YYERROR_VERBOSE */
Reid Spencered951ea2007-05-19 07:22:10 +00006016 yyerror (YY_("syntax error"));
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006017 }
6018
Reid Spencered951ea2007-05-19 07:22:10 +00006019
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006020
6021 if (yyerrstatus == 3)
6022 {
Reid Spencered951ea2007-05-19 07:22:10 +00006023 /* If just tried and failed to reuse look-ahead token after an
6024 error, discard it. */
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006025
Reid Spencered951ea2007-05-19 07:22:10 +00006026 if (yychar <= YYEOF)
6027 {
6028 /* Return failure if at end of input. */
6029 if (yychar == YYEOF)
6030 YYABORT;
6031 }
6032 else
6033 {
6034 yydestruct ("Error: discarding", yytoken, &yylval);
6035 yychar = YYEMPTY;
6036 }
6037 }
6038
6039 /* Else will try to reuse look-ahead token after shifting the error
6040 token. */
6041 goto yyerrlab1;
6042
6043
6044/*---------------------------------------------------.
6045| yyerrorlab -- error raised explicitly by YYERROR. |
6046`---------------------------------------------------*/
6047yyerrorlab:
6048
6049 /* Pacify compilers like GCC when the user code never invokes
6050 YYERROR and the label yyerrorlab therefore never appears in user
6051 code. */
6052 if (0)
6053 goto yyerrorlab;
6054
6055yyvsp -= yylen;
6056 yyssp -= yylen;
6057 yystate = *yyssp;
6058 goto yyerrlab1;
6059
6060
6061/*-------------------------------------------------------------.
6062| yyerrlab1 -- common code for both syntax error and YYERROR. |
6063`-------------------------------------------------------------*/
6064yyerrlab1:
6065 yyerrstatus = 3; /* Each real token shifted decrements this. */
6066
6067 for (;;)
6068 {
6069 yyn = yypact[yystate];
6070 if (yyn != YYPACT_NINF)
6071 {
6072 yyn += YYTERROR;
6073 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
6074 {
6075 yyn = yytable[yyn];
6076 if (0 < yyn)
6077 break;
6078 }
6079 }
6080
6081 /* Pop the current state because it cannot handle the error token. */
6082 if (yyssp == yyss)
Reid Spencer68a24bd2005-08-27 18:50:39 +00006083 YYABORT;
6084
Reid Spencere4d87aa2006-12-23 06:05:41 +00006085
Reid Spencered951ea2007-05-19 07:22:10 +00006086 yydestruct ("Error: popping", yystos[yystate], yyvsp);
6087 YYPOPSTACK;
6088 yystate = *yyssp;
6089 YY_STACK_PRINT (yyss, yyssp);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006090 }
6091
6092 if (yyn == YYFINAL)
6093 YYACCEPT;
6094
Reid Spencer68a24bd2005-08-27 18:50:39 +00006095 *++yyvsp = yylval;
Reid Spencered951ea2007-05-19 07:22:10 +00006096
6097
6098 /* Shift the error token. */
6099 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
Anton Korobeynikovf52e6082007-04-29 18:38:24 +00006100
Reid Spencer68a24bd2005-08-27 18:50:39 +00006101 yystate = yyn;
6102 goto yynewstate;
6103
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006104
Reid Spencered951ea2007-05-19 07:22:10 +00006105/*-------------------------------------.
6106| yyacceptlab -- YYACCEPT comes here. |
6107`-------------------------------------*/
6108yyacceptlab:
6109 yyresult = 0;
6110 goto yyreturn;
6111
6112/*-----------------------------------.
6113| yyabortlab -- YYABORT comes here. |
6114`-----------------------------------*/
6115yyabortlab:
6116 yyresult = 1;
6117 goto yyreturn;
6118
6119#ifndef yyoverflow
6120/*-------------------------------------------------.
6121| yyexhaustedlab -- memory exhaustion comes here. |
6122`-------------------------------------------------*/
6123yyexhaustedlab:
6124 yyerror (YY_("memory exhausted"));
6125 yyresult = 2;
6126 /* Fall through. */
Anton Korobeynikov38e09802007-04-28 13:48:45 +00006127#endif
Reid Spencered951ea2007-05-19 07:22:10 +00006128
6129yyreturn:
6130 if (yychar != YYEOF && yychar != YYEMPTY)
6131 yydestruct ("Cleanup: discarding lookahead",
6132 yytoken, &yylval);
6133 while (yyssp != yyss)
6134 {
6135 yydestruct ("Cleanup: popping",
6136 yystos[*yyssp], yyvsp);
6137 YYPOPSTACK;
Chris Lattner39b2e8b2007-05-04 04:01:37 +00006138 }
Reid Spencered951ea2007-05-19 07:22:10 +00006139#ifndef yyoverflow
6140 if (yyss != yyssa)
6141 YYSTACK_FREE (yyss);
6142#endif
6143 return yyresult;
Reid Spencer68a24bd2005-08-27 18:50:39 +00006144}
Reid Spencered951ea2007-05-19 07:22:10 +00006145
6146
Reid Spencer0a8a16b2007-05-22 18:52:55 +00006147#line 3065 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
Reid Spencer61c83e02006-08-18 08:43:06 +00006148
6149
Reid Spencer14310612006-12-31 05:40:51 +00006150// common code from the two 'RunVMAsmParser' functions
6151static Module* RunParser(Module * M) {
6152
6153 llvmAsmlineno = 1; // Reset the current line number...
6154 CurModule.CurrentModule = M;
6155#if YYDEBUG
6156 yydebug = Debug;
6157#endif
6158
6159 // Check to make sure the parser succeeded
6160 if (yyparse()) {
6161 if (ParserResult)
6162 delete ParserResult;
6163 return 0;
6164 }
6165
Reid Spencer0d60b5a2007-03-30 01:37:39 +00006166 // Emit an error if there are any unresolved types left.
6167 if (!CurModule.LateResolveTypes.empty()) {
6168 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
6169 if (DID.Type == ValID::LocalName) {
6170 GenerateError("Undefined type remains at eof: '"+DID.getName() + "'");
6171 } else {
6172 GenerateError("Undefined type remains at eof: #" + itostr(DID.Num));
6173 }
6174 if (ParserResult)
6175 delete ParserResult;
6176 return 0;
6177 }
6178
6179 // Emit an error if there are any unresolved values left.
6180 if (!CurModule.LateResolveValues.empty()) {
6181 Value *V = CurModule.LateResolveValues.back();
6182 std::map<Value*, std::pair<ValID, int> >::iterator I =
6183 CurModule.PlaceHolderInfo.find(V);
6184
6185 if (I != CurModule.PlaceHolderInfo.end()) {
6186 ValID &DID = I->second.first;
6187 if (DID.Type == ValID::LocalName) {
6188 GenerateError("Undefined value remains at eof: "+DID.getName() + "'");
6189 } else {
6190 GenerateError("Undefined value remains at eof: #" + itostr(DID.Num));
6191 }
6192 if (ParserResult)
6193 delete ParserResult;
6194 return 0;
6195 }
6196 }
6197
Reid Spencer14310612006-12-31 05:40:51 +00006198 // Check to make sure that parsing produced a result
6199 if (!ParserResult)
6200 return 0;
6201
6202 // Reset ParserResult variable while saving its value for the result.
6203 Module *Result = ParserResult;
6204 ParserResult = 0;
6205
6206 return Result;
6207}
6208
Reid Spencer61c83e02006-08-18 08:43:06 +00006209void llvm::GenerateError(const std::string &message, int LineNo) {
6210 if (LineNo == -1) LineNo = llvmAsmlineno;
6211 // TODO: column number in exception
6212 if (TheParseError)
6213 TheParseError->setError(CurFilename, message, LineNo);
6214 TriggerError = 1;
6215}
Reid Spencer68a24bd2005-08-27 18:50:39 +00006216
6217int yyerror(const char *ErrorMsg) {
6218 std::string where
6219 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
6220 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
Reid Spenceref9b9a72007-02-05 20:47:22 +00006221 std::string errMsg = where + "error: " + std::string(ErrorMsg);
6222 if (yychar != YYEMPTY && yychar != 0)
6223 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
6224 "'";
Reid Spencer61c83e02006-08-18 08:43:06 +00006225 GenerateError(errMsg);
Reid Spencer68a24bd2005-08-27 18:50:39 +00006226 return 0;
6227}
Reid Spencered951ea2007-05-19 07:22:10 +00006228