2 /* A Bison parser, made from /Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y
3 by GNU Bison version 1.28 */
5 #define YYBISON 1 /* Identify Bison output. */
7 #define yyparse llvmAsmparse
8 #define yylex llvmAsmlex
9 #define yyerror llvmAsmerror
10 #define yylval llvmAsmlval
11 #define yychar llvmAsmchar
12 #define yydebug llvmAsmdebug
13 #define yynerrs llvmAsmnerrs
14 #define ESINT64VAL 257
15 #define EUINT64VAL 258
16 #define LOCALVAL_ID 259
17 #define GLOBALVAL_ID 260
28 #define STRINGCONSTANT 271
29 #define ATSTRINGCONSTANT 272
30 #define IMPLEMENTATION 273
31 #define ZEROINITIALIZER 274
52 #define EXTERN_WEAK 295
63 #define SIDEEFFECT 306
66 #define FASTCC_TOK 309
67 #define COLDCC_TOK 310
68 #define X86_STDCALLCC_TOK 311
69 #define X86_FASTCALLCC_TOK 312
70 #define DATALAYOUT 313
76 #define UNREACHABLE 319
119 #define GETELEMENTPTR 362
135 #define EXTRACTELEMENT 378
136 #define INSERTELEMENT 379
137 #define SHUFFLEVECTOR 380
144 #line 14 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
146 #include "ParserInternals.h"
147 #include "llvm/CallingConv.h"
148 #include "llvm/InlineAsm.h"
149 #include "llvm/Instructions.h"
150 #include "llvm/Module.h"
151 #include "llvm/ValueSymbolTable.h"
152 #include "llvm/Support/GetElementPtrTypeIterator.h"
153 #include "llvm/Support/CommandLine.h"
154 #include "llvm/ADT/SmallVector.h"
155 #include "llvm/ADT/STLExtras.h"
156 #include "llvm/Support/MathExtras.h"
157 #include "llvm/Support/Streams.h"
166 // The following is a gross hack. In order to rid the libAsmParser library of
167 // exceptions, we have to have a way of getting the yyparse function to go into
168 // an error situation. So, whenever we want an error to occur, the GenerateError
169 // function (see bottom of file) sets TriggerError. Then, at the end of each
170 // production in the grammer we use CHECK_FOR_ERROR which will invoke YYERROR
171 // (a goto) to put YACC in error state. Furthermore, several calls to
172 // GenerateError are made from inside productions and they must simulate the
173 // previous exception behavior by exiting the production immediately. We have
174 // replaced these with the GEN_ERROR macro which calls GeneratError and then
175 // immediately invokes YYERROR. This would be so much cleaner if it was a
176 // recursive descent parser.
177 static bool TriggerError = false;
178 #define CHECK_FOR_ERROR { if (TriggerError) { TriggerError = false; YYABORT; } }
179 #define GEN_ERROR(msg) { GenerateError(msg); YYERROR; }
181 int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
182 int yylex(); // declaration" of xxx warnings.
186 std::string CurFilename;
189 Debug("debug-yacc", cl::desc("Print yacc debug state changes"),
190 cl::Hidden, cl::init(false));
193 using namespace llvm;
195 static Module *ParserResult;
197 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
198 // relating to upreferences in the input stream.
200 //#define DEBUG_UPREFS 1
202 #define UR_OUT(X) cerr << X
207 #define YYERROR_VERBOSE 1
209 static GlobalVariable *CurGV;
212 // This contains info used when building the body of a function. It is
213 // destroyed when the function is completed.
215 typedef std::vector<Value *> ValueList; // Numbered defs
218 ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
219 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
221 static struct PerModuleInfo {
222 Module *CurrentModule;
223 std::map<const Type *, ValueList> Values; // Module level numbered definitions
224 std::map<const Type *,ValueList> LateResolveValues;
225 std::vector<PATypeHolder> Types;
226 std::map<ValID, PATypeHolder> LateResolveTypes;
228 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
229 /// how they were referenced and on which line of the input they came from so
230 /// that we can resolve them later and print error messages as appropriate.
231 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
233 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
234 // references to global values. Global values may be referenced before they
235 // are defined, and if so, the temporary object that they represent is held
236 // here. This is used for forward references of GlobalValues.
238 typedef std::map<std::pair<const PointerType *,
239 ValID>, GlobalValue*> GlobalRefsType;
240 GlobalRefsType GlobalRefs;
243 // If we could not resolve some functions at function compilation time
244 // (calls to functions before they are defined), resolve them now... Types
245 // are resolved when the constant pool has been completely parsed.
247 ResolveDefinitions(LateResolveValues);
251 // Check to make sure that all global value forward references have been
254 if (!GlobalRefs.empty()) {
255 std::string UndefinedReferences = "Unresolved global references exist:\n";
257 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
259 UndefinedReferences += " " + I->first.first->getDescription() + " " +
260 I->first.second.getName() + "\n";
262 GenerateError(UndefinedReferences);
266 Values.clear(); // Clear out function local definitions
271 // GetForwardRefForGlobal - Check to see if there is a forward reference
272 // for this global. If so, remove it from the GlobalRefs map and return it.
273 // If not, just return null.
274 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
275 // Check to see if there is a forward reference to this global variable...
276 // if there is, eliminate it and patch the reference to use the new def'n.
277 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
278 GlobalValue *Ret = 0;
279 if (I != GlobalRefs.end()) {
286 bool TypeIsUnresolved(PATypeHolder* PATy) {
287 // If it isn't abstract, its resolved
288 const Type* Ty = PATy->get();
289 if (!Ty->isAbstract())
291 // Traverse the type looking for abstract types. If it isn't abstract then
292 // we don't need to traverse that leg of the type.
293 std::vector<const Type*> WorkList, SeenList;
294 WorkList.push_back(Ty);
295 while (!WorkList.empty()) {
296 const Type* Ty = WorkList.back();
297 SeenList.push_back(Ty);
299 if (const OpaqueType* OpTy = dyn_cast<OpaqueType>(Ty)) {
300 // Check to see if this is an unresolved type
301 std::map<ValID, PATypeHolder>::iterator I = LateResolveTypes.begin();
302 std::map<ValID, PATypeHolder>::iterator E = LateResolveTypes.end();
303 for ( ; I != E; ++I) {
304 if (I->second.get() == OpTy)
307 } else if (const SequentialType* SeqTy = dyn_cast<SequentialType>(Ty)) {
308 const Type* TheTy = SeqTy->getElementType();
309 if (TheTy->isAbstract() && TheTy != Ty) {
310 std::vector<const Type*>::iterator I = SeenList.begin(),
316 WorkList.push_back(TheTy);
318 } else if (const StructType* StrTy = dyn_cast<StructType>(Ty)) {
319 for (unsigned i = 0; i < StrTy->getNumElements(); ++i) {
320 const Type* TheTy = StrTy->getElementType(i);
321 if (TheTy->isAbstract() && TheTy != Ty) {
322 std::vector<const Type*>::iterator I = SeenList.begin(),
328 WorkList.push_back(TheTy);
339 static struct PerFunctionInfo {
340 Function *CurrentFunction; // Pointer to current function being created
342 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
343 std::map<const Type*, ValueList> LateResolveValues;
344 bool isDeclare; // Is this function a forward declararation?
345 GlobalValue::LinkageTypes Linkage; // Linkage for forward declaration.
346 GlobalValue::VisibilityTypes Visibility;
348 /// BBForwardRefs - When we see forward references to basic blocks, keep
349 /// track of them here.
350 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
351 std::vector<BasicBlock*> NumberedBlocks;
354 inline PerFunctionInfo() {
357 Linkage = GlobalValue::ExternalLinkage;
358 Visibility = GlobalValue::DefaultVisibility;
361 inline void FunctionStart(Function *M) {
366 void FunctionDone() {
367 NumberedBlocks.clear();
369 // Any forward referenced blocks left?
370 if (!BBForwardRefs.empty()) {
371 GenerateError("Undefined reference to label " +
372 BBForwardRefs.begin()->first->getName());
376 // Resolve all forward references now.
377 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
379 Values.clear(); // Clear out function local definitions
382 Linkage = GlobalValue::ExternalLinkage;
383 Visibility = GlobalValue::DefaultVisibility;
385 } CurFun; // Info for the current function...
387 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
390 //===----------------------------------------------------------------------===//
391 // Code to handle definitions of all the types
392 //===----------------------------------------------------------------------===//
394 static int InsertValue(Value *V,
395 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
396 if (V->hasName()) return -1; // Is this a numbered definition?
398 // Yes, insert the value into the value table...
399 ValueList &List = ValueTab[V->getType()];
401 return List.size()-1;
404 static const Type *getTypeVal(const ValID &D, bool DoNotImprovise = false) {
406 case ValID::LocalID: // Is it a numbered definition?
407 // Module constants occupy the lowest numbered slots...
408 if (D.Num < CurModule.Types.size())
409 return CurModule.Types[D.Num];
411 case ValID::LocalName: // Is it a named definition?
412 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
413 D.destroy(); // Free old strdup'd memory...
418 GenerateError("Internal parser error: Invalid symbol type reference");
422 // If we reached here, we referenced either a symbol that we don't know about
423 // or an id number that hasn't been read yet. We may be referencing something
424 // forward, so just create an entry to be resolved later and get to it...
426 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
429 if (inFunctionScope()) {
430 if (D.Type == ValID::LocalName) {
431 GenerateError("Reference to an undefined type: '" + D.getName() + "'");
434 GenerateError("Reference to an undefined type: #" + utostr(D.Num));
439 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
440 if (I != CurModule.LateResolveTypes.end())
443 Type *Typ = OpaqueType::get();
444 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
448 // getValNonImprovising - Look up the value specified by the provided type and
449 // the provided ValID. If the value exists and has already been defined, return
450 // it. Otherwise return null.
452 static Value *getValNonImprovising(const Type *Ty, const ValID &D) {
453 if (isa<FunctionType>(Ty)) {
454 GenerateError("Functions are not values and "
455 "must be referenced as pointers");
460 case ValID::LocalID: { // Is it a numbered definition?
461 // Module constants occupy the lowest numbered slots.
462 std::map<const Type*,ValueList>::iterator VI = CurFun.Values.find(Ty);
463 // Make sure that our type is within bounds.
464 if (VI == CurFun.Values.end()) return 0;
466 // Check that the number is within bounds.
467 if (D.Num >= VI->second.size()) return 0;
469 return VI->second[D.Num];
471 case ValID::GlobalID: { // Is it a numbered definition?
472 unsigned Num = D.Num;
474 // Module constants occupy the lowest numbered slots...
475 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
476 if (VI == CurModule.Values.end())
478 if (D.Num >= VI->second.size())
480 return VI->second[Num];
483 case ValID::LocalName: { // Is it a named definition?
484 if (!inFunctionScope())
486 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
487 Value *N = SymTab.lookup(D.Name);
490 if (N->getType() != Ty)
493 D.destroy(); // Free old strdup'd memory...
496 case ValID::GlobalName: { // Is it a named definition?
497 ValueSymbolTable &SymTab = CurModule.CurrentModule->getValueSymbolTable();
498 Value *N = SymTab.lookup(D.Name);
501 if (N->getType() != Ty)
504 D.destroy(); // Free old strdup'd memory...
508 // Check to make sure that "Ty" is an integral type, and that our
509 // value will fit into the specified type...
510 case ValID::ConstSIntVal: // Is it a constant pool reference??
511 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
512 GenerateError("Signed integral constant '" +
513 itostr(D.ConstPool64) + "' is invalid for type '" +
514 Ty->getDescription() + "'");
517 return ConstantInt::get(Ty, D.ConstPool64);
519 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
520 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
521 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
522 GenerateError("Integral constant '" + utostr(D.UConstPool64) +
523 "' is invalid or out of range");
525 } else { // This is really a signed reference. Transmogrify.
526 return ConstantInt::get(Ty, D.ConstPool64);
529 return ConstantInt::get(Ty, D.UConstPool64);
532 case ValID::ConstFPVal: // Is it a floating point const pool reference?
533 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP)) {
534 GenerateError("FP constant invalid for type");
537 return ConstantFP::get(Ty, D.ConstPoolFP);
539 case ValID::ConstNullVal: // Is it a null value?
540 if (!isa<PointerType>(Ty)) {
541 GenerateError("Cannot create a a non pointer null");
544 return ConstantPointerNull::get(cast<PointerType>(Ty));
546 case ValID::ConstUndefVal: // Is it an undef value?
547 return UndefValue::get(Ty);
549 case ValID::ConstZeroVal: // Is it a zero value?
550 return Constant::getNullValue(Ty);
552 case ValID::ConstantVal: // Fully resolved constant?
553 if (D.ConstantValue->getType() != Ty) {
554 GenerateError("Constant expression type different from required type");
557 return D.ConstantValue;
559 case ValID::InlineAsmVal: { // Inline asm expression
560 const PointerType *PTy = dyn_cast<PointerType>(Ty);
561 const FunctionType *FTy =
562 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
563 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints)) {
564 GenerateError("Invalid type for asm constraint string");
567 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
568 D.IAD->HasSideEffects);
569 D.destroy(); // Free InlineAsmDescriptor.
573 assert(0 && "Unhandled case!");
577 assert(0 && "Unhandled case!");
581 // getVal - This function is identical to getValNonImprovising, except that if a
582 // value is not already defined, it "improvises" by creating a placeholder var
583 // that looks and acts just like the requested variable. When the value is
584 // defined later, all uses of the placeholder variable are replaced with the
587 static Value *getVal(const Type *Ty, const ValID &ID) {
588 if (Ty == Type::LabelTy) {
589 GenerateError("Cannot use a basic block here");
593 // See if the value has already been defined.
594 Value *V = getValNonImprovising(Ty, ID);
596 if (TriggerError) return 0;
598 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty)) {
599 GenerateError("Invalid use of a composite type");
603 // If we reached here, we referenced either a symbol that we don't know about
604 // or an id number that hasn't been read yet. We may be referencing something
605 // forward, so just create an entry to be resolved later and get to it...
607 V = new Argument(Ty);
609 // Remember where this forward reference came from. FIXME, shouldn't we try
610 // to recycle these things??
611 CurModule.PlaceHolderInfo.insert(std::make_pair(V, std::make_pair(ID,
614 if (inFunctionScope())
615 InsertValue(V, CurFun.LateResolveValues);
617 InsertValue(V, CurModule.LateResolveValues);
621 /// getBBVal - This is used for two purposes:
622 /// * If isDefinition is true, a new basic block with the specified ID is being
624 /// * If isDefinition is true, this is a reference to a basic block, which may
625 /// or may not be a forward reference.
627 static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
628 assert(inFunctionScope() && "Can't get basic block at global scope!");
634 GenerateError("Illegal label reference " + ID.getName());
636 case ValID::LocalID: // Is it a numbered definition?
637 if (ID.Num >= CurFun.NumberedBlocks.size())
638 CurFun.NumberedBlocks.resize(ID.Num+1);
639 BB = CurFun.NumberedBlocks[ID.Num];
641 case ValID::LocalName: // Is it a named definition?
643 Value *N = CurFun.CurrentFunction->getValueSymbolTable().lookup(Name);
644 if (N && N->getType()->getTypeID() == Type::LabelTyID)
645 BB = cast<BasicBlock>(N);
649 // See if the block has already been defined.
651 // If this is the definition of the block, make sure the existing value was
652 // just a forward reference. If it was a forward reference, there will be
653 // an entry for it in the PlaceHolderInfo map.
654 if (isDefinition && !CurFun.BBForwardRefs.erase(BB)) {
655 // The existing value was a definition, not a forward reference.
656 GenerateError("Redefinition of label " + ID.getName());
660 ID.destroy(); // Free strdup'd memory.
664 // Otherwise this block has not been seen before.
665 BB = new BasicBlock("", CurFun.CurrentFunction);
666 if (ID.Type == ValID::LocalName) {
667 BB->setName(ID.Name);
669 CurFun.NumberedBlocks[ID.Num] = BB;
672 // If this is not a definition, keep track of it so we can use it as a forward
675 // Remember where this forward reference came from.
676 CurFun.BBForwardRefs[BB] = std::make_pair(ID, llvmAsmlineno);
678 // The forward declaration could have been inserted anywhere in the
679 // function: insert it into the correct place now.
680 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
681 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
688 //===----------------------------------------------------------------------===//
689 // Code to handle forward references in instructions
690 //===----------------------------------------------------------------------===//
692 // This code handles the late binding needed with statements that reference
693 // values not defined yet... for example, a forward branch, or the PHI node for
696 // This keeps a table (CurFun.LateResolveValues) of all such forward references
697 // and back patchs after we are done.
700 // ResolveDefinitions - If we could not resolve some defs at parsing
701 // time (forward branches, phi functions for loops, etc...) resolve the
705 ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
706 std::map<const Type*,ValueList> *FutureLateResolvers) {
707 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
708 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
709 E = LateResolvers.end(); LRI != E; ++LRI) {
710 ValueList &List = LRI->second;
711 while (!List.empty()) {
712 Value *V = List.back();
715 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
716 CurModule.PlaceHolderInfo.find(V);
717 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error!");
719 ValID &DID = PHI->second.first;
721 Value *TheRealValue = getValNonImprovising(LRI->first, DID);
725 V->replaceAllUsesWith(TheRealValue);
727 CurModule.PlaceHolderInfo.erase(PHI);
728 } else if (FutureLateResolvers) {
729 // Functions have their unresolved items forwarded to the module late
731 InsertValue(V, *FutureLateResolvers);
733 if (DID.Type == ValID::LocalName || DID.Type == ValID::GlobalName) {
734 GenerateError("Reference to an invalid definition: '" +DID.getName()+
735 "' of type '" + V->getType()->getDescription() + "'",
739 GenerateError("Reference to an invalid definition: #" +
740 itostr(DID.Num) + " of type '" +
741 V->getType()->getDescription() + "'",
749 LateResolvers.clear();
752 // ResolveTypeTo - A brand new type was just declared. This means that (if
753 // name is not null) things referencing Name can be resolved. Otherwise, things
754 // refering to the number can be resolved. Do this now.
756 static void ResolveTypeTo(char *Name, const Type *ToTy) {
758 if (Name) D = ValID::createLocalName(Name);
759 else D = ValID::createLocalID(CurModule.Types.size());
761 std::map<ValID, PATypeHolder>::iterator I =
762 CurModule.LateResolveTypes.find(D);
763 if (I != CurModule.LateResolveTypes.end()) {
764 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
765 CurModule.LateResolveTypes.erase(I);
769 // setValueName - Set the specified value to the name given. The name may be
770 // null potentially, in which case this is a noop. The string passed in is
771 // assumed to be a malloc'd string buffer, and is free'd by this function.
773 static void setValueName(Value *V, char *NameStr) {
774 if (!NameStr) return;
775 std::string Name(NameStr); // Copy string
776 free(NameStr); // Free old string
778 if (V->getType() == Type::VoidTy) {
779 GenerateError("Can't assign name '" + Name+"' to value with void type");
783 assert(inFunctionScope() && "Must be in function scope!");
784 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
785 if (ST.lookup(Name)) {
786 GenerateError("Redefinition of value '" + Name + "' of type '" +
787 V->getType()->getDescription() + "'");
795 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
796 /// this is a declaration, otherwise it is a definition.
797 static GlobalVariable *
798 ParseGlobalVariable(char *NameStr,
799 GlobalValue::LinkageTypes Linkage,
800 GlobalValue::VisibilityTypes Visibility,
801 bool isConstantGlobal, const Type *Ty,
802 Constant *Initializer) {
803 if (isa<FunctionType>(Ty)) {
804 GenerateError("Cannot declare global vars of function type");
808 const PointerType *PTy = PointerType::get(Ty);
812 Name = NameStr; // Copy string
813 free(NameStr); // Free old string
816 // See if this global value was forward referenced. If so, recycle the
820 ID = ValID::createGlobalName((char*)Name.c_str());
822 ID = ValID::createGlobalID(CurModule.Values[PTy].size());
825 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
826 // Move the global to the end of the list, from whereever it was
827 // previously inserted.
828 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
829 CurModule.CurrentModule->getGlobalList().remove(GV);
830 CurModule.CurrentModule->getGlobalList().push_back(GV);
831 GV->setInitializer(Initializer);
832 GV->setLinkage(Linkage);
833 GV->setVisibility(Visibility);
834 GV->setConstant(isConstantGlobal);
835 InsertValue(GV, CurModule.Values);
839 // If this global has a name
841 // if the global we're parsing has an initializer (is a definition) and
842 // has external linkage.
843 if (Initializer && Linkage != GlobalValue::InternalLinkage)
844 // If there is already a global with external linkage with this name
845 if (CurModule.CurrentModule->getGlobalVariable(Name, false)) {
846 // If we allow this GVar to get created, it will be renamed in the
847 // symbol table because it conflicts with an existing GVar. We can't
848 // allow redefinition of GVars whose linking indicates that their name
849 // must stay the same. Issue the error.
850 GenerateError("Redefinition of global variable named '" + Name +
851 "' of type '" + Ty->getDescription() + "'");
856 // Otherwise there is no existing GV to use, create one now.
858 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
859 CurModule.CurrentModule);
860 GV->setVisibility(Visibility);
861 InsertValue(GV, CurModule.Values);
865 // setTypeName - Set the specified type to the name given. The name may be
866 // null potentially, in which case this is a noop. The string passed in is
867 // assumed to be a malloc'd string buffer, and is freed by this function.
869 // This function returns true if the type has already been defined, but is
870 // allowed to be redefined in the specified context. If the name is a new name
871 // for the type plane, it is inserted and false is returned.
872 static bool setTypeName(const Type *T, char *NameStr) {
873 assert(!inFunctionScope() && "Can't give types function-local names!");
874 if (NameStr == 0) return false;
876 std::string Name(NameStr); // Copy string
877 free(NameStr); // Free old string
879 // We don't allow assigning names to void type
880 if (T == Type::VoidTy) {
881 GenerateError("Can't assign name '" + Name + "' to the void type");
885 // Set the type name, checking for conflicts as we do so.
886 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
888 if (AlreadyExists) { // Inserting a name that is already defined???
889 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
890 assert(Existing && "Conflict but no matching type?!");
892 // There is only one case where this is allowed: when we are refining an
893 // opaque type. In this case, Existing will be an opaque type.
894 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
895 // We ARE replacing an opaque type!
896 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
900 // Otherwise, this is an attempt to redefine a type. That's okay if
901 // the redefinition is identical to the original. This will be so if
902 // Existing and T point to the same Type object. In this one case we
903 // allow the equivalent redefinition.
904 if (Existing == T) return true; // Yes, it's equal.
906 // Any other kind of (non-equivalent) redefinition is an error.
907 GenerateError("Redefinition of type named '" + Name + "' of type '" +
908 T->getDescription() + "'");
914 //===----------------------------------------------------------------------===//
915 // Code for handling upreferences in type names...
918 // TypeContains - Returns true if Ty directly contains E in it.
920 static bool TypeContains(const Type *Ty, const Type *E) {
921 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
922 E) != Ty->subtype_end();
927 // NestingLevel - The number of nesting levels that need to be popped before
928 // this type is resolved.
929 unsigned NestingLevel;
931 // LastContainedTy - This is the type at the current binding level for the
932 // type. Every time we reduce the nesting level, this gets updated.
933 const Type *LastContainedTy;
935 // UpRefTy - This is the actual opaque type that the upreference is
939 UpRefRecord(unsigned NL, OpaqueType *URTy)
940 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
944 // UpRefs - A list of the outstanding upreferences that need to be resolved.
945 static std::vector<UpRefRecord> UpRefs;
947 /// HandleUpRefs - Every time we finish a new layer of types, this function is
948 /// called. It loops through the UpRefs vector, which is a list of the
949 /// currently active types. For each type, if the up reference is contained in
950 /// the newly completed type, we decrement the level count. When the level
951 /// count reaches zero, the upreferenced type is the type that is passed in:
952 /// thus we can complete the cycle.
954 static PATypeHolder HandleUpRefs(const Type *ty) {
955 // If Ty isn't abstract, or if there are no up-references in it, then there is
956 // nothing to resolve here.
957 if (!ty->isAbstract() || UpRefs.empty()) return ty;
960 UR_OUT("Type '" << Ty->getDescription() <<
961 "' newly formed. Resolving upreferences.\n" <<
962 UpRefs.size() << " upreferences active!\n");
964 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
965 // to zero), we resolve them all together before we resolve them to Ty. At
966 // the end of the loop, if there is anything to resolve to Ty, it will be in
968 OpaqueType *TypeToResolve = 0;
970 for (unsigned i = 0; i != UpRefs.size(); ++i) {
971 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
972 << UpRefs[i].second->getDescription() << ") = "
973 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
974 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
975 // Decrement level of upreference
976 unsigned Level = --UpRefs[i].NestingLevel;
977 UpRefs[i].LastContainedTy = Ty;
978 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
979 if (Level == 0) { // Upreference should be resolved!
980 if (!TypeToResolve) {
981 TypeToResolve = UpRefs[i].UpRefTy;
983 UR_OUT(" * Resolving upreference for "
984 << UpRefs[i].second->getDescription() << "\n";
985 std::string OldName = UpRefs[i].UpRefTy->getDescription());
986 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
987 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
988 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
990 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
991 --i; // Do not skip the next element...
997 UR_OUT(" * Resolving upreference for "
998 << UpRefs[i].second->getDescription() << "\n";
999 std::string OldName = TypeToResolve->getDescription());
1000 TypeToResolve->refineAbstractTypeTo(Ty);
1006 //===----------------------------------------------------------------------===//
1007 // RunVMAsmParser - Define an interface to this parser
1008 //===----------------------------------------------------------------------===//
1010 static Module* RunParser(Module * M);
1012 Module *llvm::RunVMAsmParser(const std::string &Filename, FILE *F) {
1015 CurFilename = Filename;
1016 return RunParser(new Module(CurFilename));
1019 Module *llvm::RunVMAsmParser(const char * AsmString, Module * M) {
1020 set_scan_string(AsmString);
1022 CurFilename = "from_memory";
1024 return RunParser(new Module (CurFilename));
1026 return RunParser(M);
1031 #line 901 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
1033 llvm::Module *ModuleVal;
1034 llvm::Function *FunctionVal;
1035 llvm::BasicBlock *BasicBlockVal;
1036 llvm::TerminatorInst *TermInstVal;
1037 llvm::Instruction *InstVal;
1038 llvm::Constant *ConstVal;
1040 const llvm::Type *PrimType;
1041 std::list<llvm::PATypeHolder> *TypeList;
1042 llvm::PATypeHolder *TypeVal;
1043 llvm::Value *ValueVal;
1044 std::vector<llvm::Value*> *ValueList;
1045 llvm::ArgListType *ArgList;
1046 llvm::TypeWithAttrs TypeWithAttrs;
1047 llvm::TypeWithAttrsList *TypeWithAttrsList;
1048 llvm::ValueRefList *ValueRefList;
1050 // Represent the RHS of PHI node
1051 std::list<std::pair<llvm::Value*,
1052 llvm::BasicBlock*> > *PHIList;
1053 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
1054 std::vector<llvm::Constant*> *ConstVector;
1056 llvm::GlobalValue::LinkageTypes Linkage;
1057 llvm::GlobalValue::VisibilityTypes Visibility;
1058 llvm::FunctionType::ParameterAttributes ParamAttrs;
1066 char *StrVal; // This memory is strdup'd!
1067 llvm::ValID ValIDVal; // strdup'd memory maybe!
1069 llvm::Instruction::BinaryOps BinaryOpVal;
1070 llvm::Instruction::TermOps TermOpVal;
1071 llvm::Instruction::MemoryOps MemOpVal;
1072 llvm::Instruction::CastOps CastOpVal;
1073 llvm::Instruction::OtherOps OtherOpVal;
1074 llvm::ICmpInst::Predicate IPredicate;
1075 llvm::FCmpInst::Predicate FPredicate;
1088 #define YYFLAG -32768
1089 #define YYNTBASE 146
1091 #define YYTRANSLATE(x) ((unsigned)(x) <= 385 ? yytranslate[x] : 223)
1093 static const short yytranslate[] = { 0,
1094 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1095 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1096 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1097 2, 2, 2, 2, 2, 2, 2, 2, 2, 136,
1098 137, 134, 2, 133, 2, 2, 2, 2, 2, 2,
1099 2, 2, 2, 2, 2, 2, 2, 2, 2, 141,
1100 132, 142, 2, 2, 2, 2, 2, 2, 2, 2,
1101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1103 138, 135, 140, 2, 2, 2, 2, 2, 145, 2,
1104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1105 2, 2, 2, 2, 2, 2, 2, 2, 2, 139,
1106 2, 2, 143, 2, 144, 2, 2, 2, 2, 2,
1107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1116 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1117 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1118 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1119 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
1120 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1121 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1122 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1123 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1124 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
1125 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1126 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1127 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1128 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1129 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1130 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1131 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1132 127, 128, 129, 130, 131
1136 static const short yyprhs[] = { 0,
1137 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
1138 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
1139 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
1140 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
1141 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
1142 100, 102, 104, 106, 108, 110, 112, 114, 116, 118,
1143 119, 122, 123, 125, 127, 130, 131, 133, 135, 137,
1144 139, 141, 143, 145, 147, 148, 150, 151, 153, 155,
1145 156, 158, 160, 162, 164, 165, 167, 169, 171, 173,
1146 175, 178, 180, 182, 184, 186, 187, 190, 192, 194,
1147 195, 198, 199, 202, 203, 207, 210, 211, 213, 214,
1148 218, 220, 223, 225, 227, 229, 231, 233, 235, 238,
1149 240, 243, 249, 255, 261, 267, 271, 274, 280, 285,
1150 288, 290, 292, 294, 298, 300, 304, 306, 307, 309,
1151 313, 318, 322, 326, 331, 336, 340, 347, 353, 356,
1152 359, 362, 365, 368, 371, 374, 377, 380, 383, 390,
1153 396, 405, 412, 419, 427, 435, 442, 451, 460, 464,
1154 466, 468, 470, 472, 473, 475, 478, 479, 483, 484,
1155 488, 492, 494, 498, 502, 503, 510, 511, 519, 520,
1156 528, 531, 535, 537, 541, 545, 549, 553, 555, 556,
1157 562, 566, 568, 572, 574, 575, 585, 587, 589, 594,
1158 596, 598, 601, 605, 606, 608, 610, 612, 614, 616,
1159 618, 620, 622, 624, 628, 630, 636, 638, 640, 642,
1160 644, 646, 648, 651, 654, 657, 661, 664, 665, 667,
1161 670, 673, 677, 687, 697, 706, 721, 723, 725, 732,
1162 738, 741, 748, 756, 760, 766, 767, 768, 772, 775,
1163 777, 783, 789, 796, 803, 808, 815, 820, 825, 832,
1164 839, 842, 851, 853, 855, 856, 860, 867, 871, 878,
1168 static const short yyrhs[] = { 66,
1169 0, 67, 0, 68, 0, 69, 0, 70, 0, 71,
1170 0, 72, 0, 73, 0, 74, 0, 78, 0, 79,
1171 0, 80, 0, 75, 0, 76, 0, 77, 0, 109,
1172 0, 110, 0, 111, 0, 112, 0, 113, 0, 114,
1173 0, 115, 0, 116, 0, 117, 0, 118, 0, 119,
1174 0, 120, 0, 83, 0, 84, 0, 85, 0, 86,
1175 0, 87, 0, 88, 0, 89, 0, 90, 0, 91,
1176 0, 92, 0, 93, 0, 94, 0, 95, 0, 96,
1177 0, 97, 0, 98, 0, 99, 0, 100, 0, 101,
1178 0, 102, 0, 89, 0, 90, 0, 91, 0, 92,
1179 0, 21, 0, 22, 0, 9, 0, 10, 0, 11,
1180 0, 14, 0, 17, 0, 153, 0, 0, 153, 132,
1181 0, 0, 15, 0, 18, 0, 156, 132, 0, 0,
1182 35, 0, 37, 0, 36, 0, 38, 0, 40, 0,
1183 39, 0, 41, 0, 43, 0, 0, 131, 0, 0,
1184 39, 0, 41, 0, 0, 35, 0, 36, 0, 37,
1185 0, 40, 0, 0, 54, 0, 55, 0, 56, 0,
1186 57, 0, 58, 0, 53, 4, 0, 110, 0, 111,
1187 0, 128, 0, 129, 0, 0, 165, 164, 0, 127,
1188 0, 164, 0, 0, 167, 166, 0, 0, 46, 4,
1189 0, 0, 133, 46, 4, 0, 29, 17, 0, 0,
1190 170, 0, 0, 133, 173, 172, 0, 170, 0, 46,
1191 4, 0, 9, 0, 10, 0, 11, 0, 12, 0,
1192 42, 0, 174, 0, 175, 134, 0, 207, 0, 135,
1193 4, 0, 175, 136, 179, 137, 167, 0, 8, 136,
1194 179, 137, 167, 0, 138, 4, 139, 175, 140, 0,
1195 141, 4, 139, 175, 142, 0, 143, 180, 144, 0,
1196 143, 144, 0, 141, 143, 180, 144, 142, 0, 141,
1197 143, 144, 142, 0, 175, 165, 0, 175, 0, 8,
1198 0, 176, 0, 178, 133, 176, 0, 178, 0, 178,
1199 133, 32, 0, 32, 0, 0, 175, 0, 180, 133,
1200 175, 0, 175, 138, 183, 140, 0, 175, 138, 140,
1201 0, 175, 145, 17, 0, 175, 141, 183, 142, 0,
1202 175, 143, 183, 144, 0, 175, 143, 144, 0, 175,
1203 141, 143, 183, 144, 142, 0, 175, 141, 143, 144,
1204 142, 0, 175, 33, 0, 175, 34, 0, 175, 207,
1205 0, 175, 182, 0, 175, 20, 0, 151, 3, 0,
1206 151, 4, 0, 9, 21, 0, 9, 22, 0, 152,
1207 7, 0, 148, 136, 181, 31, 175, 137, 0, 108,
1208 136, 181, 218, 137, 0, 122, 136, 181, 133, 181,
1209 133, 181, 137, 0, 146, 136, 181, 133, 181, 137,
1210 0, 147, 136, 181, 133, 181, 137, 0, 81, 149,
1211 136, 181, 133, 181, 137, 0, 82, 150, 136, 181,
1212 133, 181, 137, 0, 124, 136, 181, 133, 181, 137,
1213 0, 125, 136, 181, 133, 181, 133, 181, 137, 0,
1214 126, 136, 181, 133, 181, 133, 181, 137, 0, 183,
1215 133, 181, 0, 181, 0, 27, 0, 28, 0, 186,
1216 0, 0, 187, 0, 186, 187, 0, 0, 26, 188,
1217 203, 0, 0, 25, 189, 204, 0, 51, 50, 193,
1218 0, 19, 0, 155, 13, 175, 0, 155, 13, 8,
1219 0, 0, 157, 160, 184, 181, 190, 172, 0, 0,
1220 157, 158, 160, 184, 181, 191, 172, 0, 0, 157,
1221 159, 160, 184, 175, 192, 172, 0, 44, 194, 0,
1222 47, 132, 195, 0, 17, 0, 45, 132, 17, 0,
1223 59, 132, 17, 0, 138, 196, 140, 0, 196, 133,
1224 17, 0, 17, 0, 0, 197, 133, 175, 165, 154,
1225 0, 175, 165, 154, 0, 197, 0, 197, 133, 32,
1226 0, 32, 0, 0, 163, 177, 156, 136, 198, 137,
1227 167, 171, 168, 0, 23, 0, 143, 0, 162, 160,
1228 199, 200, 0, 24, 0, 144, 0, 210, 202, 0,
1229 161, 160, 199, 0, 0, 52, 0, 3, 0, 4,
1230 0, 7, 0, 21, 0, 22, 0, 33, 0, 34,
1231 0, 20, 0, 141, 183, 142, 0, 182, 0, 50,
1232 205, 17, 133, 17, 0, 5, 0, 6, 0, 153,
1233 0, 156, 0, 207, 0, 206, 0, 175, 208, 0,
1234 210, 211, 0, 201, 211, 0, 212, 155, 213, 0,
1235 212, 215, 0, 0, 16, 0, 60, 209, 0, 60,
1236 8, 0, 61, 12, 208, 0, 61, 9, 208, 133,
1237 12, 208, 133, 12, 208, 0, 62, 151, 208, 133,
1238 12, 208, 138, 214, 140, 0, 62, 151, 208, 133,
1239 12, 208, 138, 140, 0, 63, 163, 177, 208, 136,
1240 217, 137, 167, 31, 12, 208, 64, 12, 208, 0,
1241 64, 0, 65, 0, 214, 151, 206, 133, 12, 208,
1242 0, 151, 206, 133, 12, 208, 0, 155, 220, 0,
1243 175, 138, 208, 133, 208, 140, 0, 216, 133, 138,
1244 208, 133, 208, 140, 0, 175, 208, 165, 0, 217,
1245 133, 175, 208, 165, 0, 0, 0, 218, 133, 209,
1246 0, 49, 48, 0, 48, 0, 146, 175, 208, 133,
1247 208, 0, 147, 175, 208, 133, 208, 0, 81, 149,
1248 175, 208, 133, 208, 0, 82, 150, 175, 208, 133,
1249 208, 0, 148, 209, 31, 175, 0, 122, 209, 133,
1250 209, 133, 209, 0, 123, 209, 133, 175, 0, 124,
1251 209, 133, 209, 0, 125, 209, 133, 209, 133, 209,
1252 0, 126, 209, 133, 209, 133, 209, 0, 121, 216,
1253 0, 219, 163, 177, 208, 136, 217, 137, 167, 0,
1254 222, 0, 30, 0, 0, 103, 175, 169, 0, 103,
1255 175, 133, 9, 208, 169, 0, 104, 175, 169, 0,
1256 104, 175, 133, 9, 208, 169, 0, 105, 209, 0,
1257 221, 106, 175, 208, 0, 221, 107, 209, 133, 175,
1258 208, 0, 108, 175, 208, 218, 0
1264 static const short yyrline[] = { 0,
1265 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1049,
1266 1049, 1049, 1049, 1049, 1049, 1050, 1050, 1050, 1050, 1050,
1267 1050, 1050, 1051, 1051, 1051, 1051, 1051, 1054, 1054, 1055,
1268 1055, 1056, 1056, 1057, 1057, 1058, 1058, 1062, 1062, 1063,
1269 1063, 1064, 1064, 1065, 1065, 1066, 1066, 1067, 1067, 1068,
1270 1068, 1069, 1070, 1075, 1076, 1076, 1078, 1078, 1079, 1079,
1271 1083, 1087, 1092, 1092, 1094, 1098, 1104, 1105, 1106, 1107,
1272 1108, 1112, 1113, 1114, 1118, 1119, 1123, 1124, 1125, 1129,
1273 1130, 1131, 1132, 1133, 1136, 1136, 1137, 1138, 1139, 1140,
1274 1141, 1149, 1150, 1151, 1152, 1155, 1156, 1161, 1162, 1165,
1275 1166, 1173, 1173, 1180, 1180, 1189, 1197, 1197, 1203, 1203,
1276 1205, 1210, 1223, 1223, 1223, 1223, 1226, 1230, 1234, 1241,
1277 1246, 1254, 1272, 1290, 1295, 1307, 1317, 1321, 1331, 1338,
1278 1345, 1352, 1357, 1362, 1369, 1370, 1377, 1384, 1392, 1397,
1279 1408, 1436, 1452, 1481, 1509, 1534, 1553, 1579, 1599, 1611,
1280 1618, 1684, 1694, 1704, 1710, 1716, 1721, 1726, 1734, 1746,
1281 1768, 1776, 1782, 1793, 1798, 1803, 1809, 1815, 1824, 1828,
1282 1836, 1836, 1847, 1852, 1860, 1861, 1865, 1865, 1869, 1869,
1283 1872, 1875, 1887, 1911, 1922, 1929, 1932, 1937, 1940, 1946,
1284 1950, 1953, 1959, 1972, 1976, 1981, 1983, 1988, 1993, 2002,
1285 2012, 2023, 2027, 2036, 2045, 2050, 2162, 2162, 2164, 2173,
1286 2173, 2175, 2180, 2192, 2196, 2201, 2205, 2209, 2213, 2217,
1287 2221, 2225, 2229, 2233, 2258, 2262, 2276, 2280, 2284, 2288,
1288 2294, 2294, 2300, 2309, 2313, 2322, 2332, 2341, 2353, 2366,
1289 2370, 2374, 2379, 2389, 2408, 2417, 2484, 2488, 2495, 2506,
1290 2519, 2529, 2540, 2550, 2558, 2566, 2569, 2570, 2577, 2581,
1291 2586, 2607, 2624, 2637, 2650, 2662, 2670, 2677, 2683, 2689,
1292 2695, 2710, 2774, 2779, 2783, 2790, 2797, 2805, 2812, 2820,
1298 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
1300 static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL",
1301 "EUINT64VAL","LOCALVAL_ID","GLOBALVAL_ID","FPVAL","VOID","INTTYPE","FLOAT","DOUBLE",
1302 "LABEL","TYPE","LOCALVAR","GLOBALVAR","LABELSTR","STRINGCONSTANT","ATSTRINGCONSTANT",
1303 "IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK","BEGINTOK","ENDTOK",
1304 "DECLARE","DEFINE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO","DOTDOTDOT",
1305 "NULL_TOK","UNDEF","INTERNAL","LINKONCE","WEAK","APPENDING","DLLIMPORT","DLLEXPORT",
1306 "EXTERN_WEAK","OPAQUE","EXTERNAL","TARGET","TRIPLE","ALIGN","DEPLIBS","CALL",
1307 "TAIL","ASM_TOK","MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","FASTCC_TOK","COLDCC_TOK",
1308 "X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR","SWITCH","INVOKE",
1309 "UNWIND","UNREACHABLE","ADD","SUB","MUL","UDIV","SDIV","FDIV","UREM","SREM",
1310 "FREM","AND","OR","XOR","SHL","LSHR","ASHR","ICMP","FCMP","EQ","NE","SLT","SGT",
1311 "SLE","SGE","ULT","UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD",
1312 "UNO","UEQ","UNE","MALLOC","ALLOCA","FREE","LOAD","STORE","GETELEMENTPTR","TRUNC",
1313 "ZEXT","SEXT","FPTRUNC","FPEXT","BITCAST","UITOFP","SITOFP","FPTOUI","FPTOSI",
1314 "INTTOPTR","PTRTOINT","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT",
1315 "SHUFFLEVECTOR","NORETURN","INREG","SRET","DEFAULT","HIDDEN","'='","','","'*'",
1316 "'\\\\'","'('","')'","'['","'x'","']'","'<'","'>'","'{'","'}'","'c'","ArithmeticOps",
1317 "LogicalOps","CastOps","IPredicates","FPredicates","IntType","FPType","LocalName",
1318 "OptLocalName","OptLocalAssign","GlobalName","OptGlobalAssign","GVInternalLinkage",
1319 "GVExternalLinkage","GVVisibilityStyle","FunctionDeclareLinkage","FunctionDefineLinkage",
1320 "OptCallingConv","ParamAttr","OptParamAttrs","FuncAttr","OptFuncAttrs","OptAlign",
1321 "OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
1322 "PrimType","Types","ArgType","ResultTypes","ArgTypeList","ArgTypeListI","TypeListI",
1323 "ConstVal","ConstExpr","ConstVector","GlobalType","Module","DefinitionList",
1324 "Definition","@1","@2","@3","@4","@5","AsmBlock","TargetDefinition","LibrariesDefinition",
1325 "LibList","ArgListH","ArgList","FunctionHeaderH","BEGIN","FunctionHeader","END",
1326 "Function","FunctionProto","OptSideEffect","ConstValueRef","SymbolicValueRef",
1327 "ValueRef","ResolvedVal","BasicBlockList","BasicBlock","InstructionList","BBTerminatorInst",
1328 "JumpTable","Inst","PHIList","ValueRefList","IndexList","OptTailCall","InstVal",
1329 "OptVolatile","MemoryInst", NULL
1333 static const short yyr1[] = { 0,
1334 146, 146, 146, 146, 146, 146, 146, 146, 146, 147,
1335 147, 147, 147, 147, 147, 148, 148, 148, 148, 148,
1336 148, 148, 148, 148, 148, 148, 148, 149, 149, 149,
1337 149, 149, 149, 149, 149, 149, 149, 150, 150, 150,
1338 150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
1339 150, 150, 150, 151, 152, 152, 153, 153, 154, 154,
1340 155, 155, 156, 156, 157, 157, 158, 158, 158, 158,
1341 158, 159, 159, 159, 160, 160, 161, 161, 161, 162,
1342 162, 162, 162, 162, 163, 163, 163, 163, 163, 163,
1343 163, 164, 164, 164, 164, 165, 165, 166, 166, 167,
1344 167, 168, 168, 169, 169, 170, 171, 171, 172, 172,
1345 173, 173, 174, 174, 174, 174, 175, 175, 175, 175,
1346 175, 175, 175, 175, 175, 175, 175, 175, 175, 176,
1347 177, 177, 178, 178, 179, 179, 179, 179, 180, 180,
1348 181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
1349 181, 181, 181, 181, 181, 181, 181, 181, 182, 182,
1350 182, 182, 182, 182, 182, 182, 182, 182, 183, 183,
1351 184, 184, 185, 185, 186, 186, 188, 187, 189, 187,
1352 187, 187, 187, 187, 190, 187, 191, 187, 192, 187,
1353 187, 187, 193, 194, 194, 195, 196, 196, 196, 197,
1354 197, 198, 198, 198, 198, 199, 200, 200, 201, 202,
1355 202, 203, 204, 205, 205, 206, 206, 206, 206, 206,
1356 206, 206, 206, 206, 206, 206, 207, 207, 207, 207,
1357 208, 208, 209, 210, 210, 211, 212, 212, 212, 213,
1358 213, 213, 213, 213, 213, 213, 213, 213, 214, 214,
1359 215, 216, 216, 217, 217, 217, 218, 218, 219, 219,
1360 220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
1361 220, 220, 220, 221, 221, 222, 222, 222, 222, 222,
1365 static const short yyr2[] = { 0,
1366 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1367 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1368 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1369 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1370 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1371 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1372 2, 0, 1, 1, 2, 0, 1, 1, 1, 1,
1373 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
1374 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
1375 2, 1, 1, 1, 1, 0, 2, 1, 1, 0,
1376 2, 0, 2, 0, 3, 2, 0, 1, 0, 3,
1377 1, 2, 1, 1, 1, 1, 1, 1, 2, 1,
1378 2, 5, 5, 5, 5, 3, 2, 5, 4, 2,
1379 1, 1, 1, 3, 1, 3, 1, 0, 1, 3,
1380 4, 3, 3, 4, 4, 3, 6, 5, 2, 2,
1381 2, 2, 2, 2, 2, 2, 2, 2, 6, 5,
1382 8, 6, 6, 7, 7, 6, 8, 8, 3, 1,
1383 1, 1, 1, 0, 1, 2, 0, 3, 0, 3,
1384 3, 1, 3, 3, 0, 6, 0, 7, 0, 7,
1385 2, 3, 1, 3, 3, 3, 3, 1, 0, 5,
1386 3, 1, 3, 1, 0, 9, 1, 1, 4, 1,
1387 1, 2, 3, 0, 1, 1, 1, 1, 1, 1,
1388 1, 1, 1, 3, 1, 5, 1, 1, 1, 1,
1389 1, 1, 2, 2, 2, 3, 2, 0, 1, 2,
1390 2, 3, 9, 9, 8, 14, 1, 1, 6, 5,
1391 2, 6, 7, 3, 5, 0, 0, 3, 2, 1,
1392 5, 5, 6, 6, 4, 6, 4, 4, 6, 6,
1393 2, 8, 1, 1, 0, 3, 6, 3, 6, 2,
1397 static const short yydefact[] = { 66,
1398 57, 63, 58, 64, 182, 179, 177, 0, 0, 0,
1399 0, 0, 0, 75, 66, 175, 77, 80, 0, 0,
1400 191, 0, 0, 61, 0, 65, 67, 69, 68, 70,
1401 72, 71, 73, 74, 76, 75, 75, 0, 176, 78,
1402 79, 75, 180, 81, 82, 83, 84, 75, 238, 178,
1403 238, 0, 0, 199, 192, 193, 181, 227, 228, 184,
1404 113, 114, 115, 116, 117, 0, 0, 0, 0, 229,
1405 230, 118, 183, 120, 0, 0, 171, 172, 0, 85,
1406 85, 239, 235, 62, 210, 211, 212, 234, 194, 195,
1407 198, 0, 138, 121, 0, 0, 0, 0, 127, 139,
1408 0, 119, 138, 0, 0, 113, 114, 115, 0, 0,
1409 0, 185, 0, 86, 87, 88, 89, 90, 0, 213,
1410 0, 275, 237, 0, 196, 137, 96, 133, 135, 0,
1411 0, 0, 0, 0, 0, 126, 0, 187, 189, 156,
1412 157, 154, 155, 158, 153, 149, 150, 1, 2, 3,
1413 4, 5, 6, 7, 8, 9, 13, 14, 15, 10,
1414 11, 12, 0, 0, 0, 16, 17, 18, 19, 20,
1415 21, 22, 23, 24, 25, 26, 27, 0, 0, 0,
1416 0, 0, 0, 0, 0, 0, 0, 0, 152, 151,
1417 109, 91, 132, 131, 0, 207, 208, 209, 274, 260,
1418 0, 0, 0, 0, 85, 247, 248, 0, 0, 0,
1419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1420 0, 0, 236, 85, 251, 0, 273, 197, 130, 0,
1421 100, 0, 0, 129, 0, 140, 100, 109, 109, 28,
1422 29, 30, 31, 32, 33, 34, 35, 36, 37, 0,
1423 52, 53, 48, 49, 50, 51, 38, 39, 40, 41,
1424 42, 43, 44, 45, 46, 47, 0, 0, 0, 0,
1425 0, 0, 142, 170, 0, 0, 0, 146, 0, 143,
1426 0, 0, 0, 0, 186, 0, 259, 241, 0, 240,
1427 0, 0, 54, 0, 0, 0, 0, 104, 104, 280,
1428 0, 0, 271, 0, 0, 0, 0, 0, 0, 0,
1429 0, 0, 0, 0, 92, 93, 94, 95, 97, 136,
1430 134, 123, 124, 125, 128, 122, 188, 190, 0, 0,
1431 257, 0, 0, 0, 0, 0, 141, 127, 139, 0,
1432 144, 145, 0, 0, 0, 0, 0, 111, 109, 205,
1433 216, 217, 218, 223, 219, 220, 221, 222, 214, 0,
1434 225, 232, 231, 233, 0, 242, 0, 0, 0, 0,
1435 0, 276, 0, 278, 257, 0, 0, 0, 0, 0,
1436 0, 0, 0, 0, 0, 0, 0, 0, 98, 99,
1437 101, 0, 0, 0, 0, 0, 0, 0, 169, 148,
1438 0, 0, 0, 0, 106, 112, 110, 204, 96, 202,
1439 0, 215, 0, 0, 0, 0, 0, 0, 0, 0,
1440 0, 0, 283, 0, 0, 0, 267, 268, 0, 0,
1441 0, 0, 265, 0, 281, 0, 0, 0, 0, 160,
1442 0, 0, 0, 0, 147, 0, 0, 0, 60, 0,
1443 100, 0, 224, 0, 0, 256, 0, 0, 104, 105,
1444 104, 0, 0, 0, 0, 0, 261, 262, 256, 0,
1445 0, 0, 258, 0, 166, 0, 0, 162, 163, 159,
1446 59, 201, 203, 96, 107, 0, 0, 0, 0, 0,
1447 263, 264, 0, 277, 279, 0, 0, 266, 269, 270,
1448 0, 282, 164, 165, 0, 0, 0, 60, 108, 102,
1449 226, 0, 0, 96, 0, 100, 252, 0, 100, 161,
1450 167, 168, 200, 0, 206, 0, 245, 0, 0, 254,
1451 0, 0, 253, 272, 103, 243, 0, 244, 0, 96,
1452 0, 0, 0, 255, 0, 0, 0, 0, 250, 0,
1453 0, 249, 0, 246, 0, 0, 0
1456 static const short yydefgoto[] = { 186,
1457 187, 188, 250, 267, 109, 110, 70, 482, 12, 71,
1458 14, 36, 37, 38, 42, 48, 119, 319, 229, 391,
1459 322, 525, 372, 348, 510, 285, 349, 72, 111, 128,
1460 195, 129, 130, 101, 274, 361, 275, 79, 555, 15,
1461 16, 18, 17, 191, 238, 239, 57, 21, 55, 92,
1462 410, 411, 120, 198, 49, 87, 50, 43, 413, 362,
1463 74, 364, 290, 51, 83, 84, 223, 529, 123, 303,
1464 490, 394, 224, 225, 226, 227
1467 static const short yypact[] = { 438,
1468 -32768,-32768,-32768,-32768,-32768,-32768,-32768, 27, -119, -29,
1469 -84, 43, -57, -6, 525,-32768, 195, 140, -38, -27,
1470 -32768, -39, 112,-32768, 828,-32768,-32768,-32768,-32768,-32768,
1471 -32768,-32768,-32768,-32768,-32768, 32, 32, 227,-32768,-32768,
1472 -32768, 32,-32768,-32768,-32768,-32768,-32768, 32, 119,-32768,
1473 -2, 188, 210, 213,-32768,-32768,-32768,-32768,-32768, 49,
1474 -32768,-32768,-32768,-32768,-32768, 214, 245, 5, 104,-32768,
1475 -32768,-32768, 110,-32768, 227, 227,-32768,-32768, 1043, 154,
1476 154,-32768,-32768, 109,-32768,-32768,-32768,-32768,-32768,-32768,
1477 -32768, -89, 1085,-32768, 125, 139, 122, 49,-32768, 110,
1478 -55,-32768, 1085, 1043, 1188, 46, 249, 272, 266, 273,
1479 589,-32768, 279,-32768,-32768,-32768,-32768,-32768, 1204,-32768,
1480 2, 1327,-32768, 268,-32768,-32768, 110,-32768, 153, 150,
1481 1188, 1188, 149, -53, 1188,-32768, 155,-32768, 110,-32768,
1482 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1483 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1484 -32768,-32768, 494, 943, 157,-32768,-32768,-32768,-32768,-32768,
1485 -32768,-32768,-32768,-32768,-32768,-32768,-32768, 158, 159, 163,
1486 164, 790, 1226, 495, 284, 166, 167, 169,-32768,-32768,
1487 173,-32768, 49, 110, 28,-32768,-32768,-32768,-32768,-32768,
1488 262, 1243, 142, 302, 154,-32768,-32768, 494, 943, 1188,
1489 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188,
1490 1188, 1188,-32768, 154,-32768, 168,-32768,-32768, -58, 1124,
1491 -32768, 25, 16,-32768, 170, 110,-32768, 173, 173,-32768,
1492 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 177,
1493 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1494 -32768,-32768,-32768,-32768,-32768,-32768, 181, 1043, 1043, 1043,
1495 1043, 1043,-32768,-32768, 20, 668, -40,-32768, -48,-32768,
1496 1043, 1043, 1043, 18,-32768, 182,-32768, 49, 747,-32768,
1497 872, 872,-32768, 872, 1204, 1188, 1188, 99, 117,-32768,
1498 747, 33, 186, 187, 191, 192, 198, 200, 747, 747,
1499 290, 1204, 1188, 1188,-32768,-32768,-32768,-32768,-32768,-32768,
1500 -32768, -87,-32768,-32768,-32768, -87,-32768,-32768, 1043, 1043,
1501 -32768, 203, 204, 205, 209, 1043,-32768, 202, 589, -43,
1502 -32768,-32768, 216, 218, 312, 328, 342,-32768, 173, 1140,
1503 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 295, 1043,
1504 -32768,-32768,-32768,-32768, 219,-32768, 229, 872, 747, 747,
1505 8,-32768, 17,-32768,-32768, 872, 225, 1188, 1188, 1188,
1506 1188, 1188, 231, 232, 1188, 872, 747, 233,-32768,-32768,
1507 -32768, 234, 235, -33, 1043, 1043, 1043, 1043,-32768,-32768,
1508 230, 1043, 1043, 1188,-32768,-32768,-32768,-32768, 110, 238,
1509 236,-32768, 357, -36, 363, 364, 241, 246, 248, 872,
1510 374, 872, 251, 254, 872, 255, 110,-32768, 256, 258,
1511 872, 872, 110, 260,-32768, 1188, 1043, 1043, 1188,-32768,
1512 261, 263, 264, 270,-32768, 267, 276, 47, 130, 1159,
1513 -32768, 274,-32768, 872, 872, 1188, 872, 872, 281,-32768,
1514 281, 872, 283, 1188, 1188, 1188,-32768,-32768, 1188, 747,
1515 282, 285,-32768, 1043,-32768, 1043, 1043,-32768,-32768,-32768,
1516 -32768,-32768,-32768, 110, 45, 382, 287, 280, 747, -13,
1517 -32768,-32768, 355,-32768,-32768, 265, 872,-32768,-32768,-32768,
1518 29,-32768,-32768,-32768, 286, 291, 292, 130,-32768, 375,
1519 -32768, 412, 1,-32768, 1188,-32768,-32768, 293,-32768,-32768,
1520 -32768,-32768,-32768, 423,-32768, 872,-32768, 996, 9, -58,
1521 747, 212,-32768, -87,-32768,-32768, 297,-32768, 996,-32768,
1522 419, 422, 303, -58, 872, 872, 425, 371,-32768, 872,
1523 427,-32768, 872,-32768, 443, 444,-32768
1526 static const short yypgoto[] = { 324,
1527 325, 326, 242, 252, -197,-32768, 0, -50, 376, 4,
1528 -32768,-32768,-32768, 40,-32768,-32768, -167, -306, -397,-32768,
1529 -235,-32768, -291, -23,-32768, -211,-32768,-32768, -24, 237,
1530 -229,-32768, 362, 369, -68, -108, -178, 201,-32768,-32768,
1531 453,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
1532 -32768,-32768, 391,-32768,-32768,-32768,-32768,-32768,-32768, -436,
1533 -72, 101, -157,-32768, 424,-32768,-32768,-32768,-32768,-32768,
1534 7, 105,-32768,-32768,-32768,-32768
1541 static const short yytable[] = { 11,
1542 73, 326, 189, 13, 277, 279, 294, 374, 96, 293,
1543 112, 449, 22, 82, 11, 390, 420, 293, 13, 390,
1544 23, 85, 315, 316, 196, 422, 327, 328, 27, 28,
1545 29, 30, 31, 32, 33, 138, 34, 295, 190, 389,
1546 317, 318, 2, 124, 100, 4, 346, 24, -54, -54,
1547 125, 315, 316, 421, 300, 25, 312, 304, 305, 306,
1548 307, 308, 421, 347, 311, 368, 140, 141, 127, 317,
1549 318, 19, 100, 346, 26, 75, 76, 135, 127, 135,
1550 139, 80, 386, 11, 336, 20, 508, 81, 136, 336,
1551 235, 537, 336, 52, 194, 342, 336, 340, 54, 439,
1552 401, 341, 543, 440, 53, 453, 232, 233, 58, 59,
1553 236, 98, 61, 62, 63, 64, 530, 1, 2, 515,
1554 3, 4, 1, 516, 35, 3, 58, 59, 56, 98,
1555 61, 62, 63, 64, 82, 1, 2, 407, 3, 4,
1556 527, 86, 544, 1, 197, 65, 3, 97, 538, 102,
1557 291, 103, 336, 292, 315, 316, 388, 324, 102, 337,
1558 103, 515, 35, 65, 323, 519, 102, 494, 103, 495,
1559 376, 389, 317, 318, 44, 45, 46, 289, 390, 47,
1560 102, 414, 103, 480, 93, 298, 299, 289, 301, 302,
1561 289, 289, 289, 289, 289, 309, 310, 289, 286, 331,
1562 332, 333, 334, 335, 89, 127, 113, 114, 115, 116,
1563 117, 118, 343, 344, 345, 485, 363, 94, 363, 363,
1564 426, 363, 428, 429, 430, 390, 90, 390, 363, 91,
1565 189, 371, 102, 40, 103, 41, 363, 363, 66, 315,
1566 316, 67, 541, 102, 68, 103, 69, 99, 95, 373,
1567 102, 339, 103, 77, 78, -55, 66, 317, 318, 67,
1568 392, 393, 68, 131, 69, 133, 190, 399, 142, 143,
1569 194, 369, 370, 313, 314, 104, 105, 132, -56, 144,
1570 532, 473, 192, 534, 228, 230, 231, 194, 387, 289,
1571 234, 237, 268, 269, 270, 363, 363, 363, 271, 272,
1572 280, 281, 282, 363, 283, 284, 498, 499, 500, 287,
1573 293, 325, 329, 363, 363, 528, 330, 350, 377, 378,
1574 385, 315, 316, 379, 380, 409, 441, 442, 443, 444,
1575 381, 539, 382, 446, 447, 395, 396, 397, 389, 317,
1576 318, 398, 404, 400, 405, 406, 412, 363, 402, 363,
1577 403, 415, 363, 289, 427, 289, 289, 289, 363, 363,
1578 433, 416, 425, 431, 432, 436, 437, 438, 471, 472,
1579 450, 445, 451, 452, 454, 455, 456, 460, 457, 448,
1580 458, 363, 363, 439, 363, 363, 462, 464, 465, 363,
1581 466, 365, 366, 474, 367, 469, 476, 363, 511, 475,
1582 421, 375, 477, 478, 517, 505, 486, 506, 507, 383,
1583 384, 470, 479, 493, 289, 497, 363, 513, 503, 512,
1584 524, 504, 520, 526, 363, 484, 535, 521, 522, 542,
1585 545, 489, 533, 546, 551, 547, 550, -174, 553, 289,
1586 289, 289, 556, 557, 489, 220, 221, 222, 481, 296,
1587 -62, 1, 2, 363, 3, 4, 5, 523, 363, 122,
1588 297, 509, 6, 7, 137, 134, 321, 39, 417, 418,
1589 419, 121, 363, 363, 88, 501, 424, 363, 0, 423,
1590 363, 8, 0, 0, 9, 0, 434, 435, 10, 0,
1591 531, 0, 0, 0, 0, 0, 0, 0, 0, 58,
1592 59, 0, 98, 106, 107, 108, 64, 481, 1, 2,
1593 0, 3, 4, 0, 0, 0, 0, 0, 0, 0,
1594 459, 0, 461, 0, -173, 463, 0, 0, 0, 0,
1595 0, 467, 468, 0, 0, 0, 65, -62, 1, 2,
1596 0, 3, 4, 5, 0, 0, 0, 0, 0, 6,
1597 7, 0, 0, 0, 487, 488, 0, 491, 492, 0,
1598 0, 0, 496, 0, 0, 0, 0, 0, 8, 0,
1599 502, 9, 0, 0, 0, 10, 240, 241, 242, 243,
1600 244, 245, 246, 247, 248, 249, 0, 0, 0, 514,
1601 0, 0, 0, 58, 59, 0, 0, 518, 0, 0,
1602 0, 0, 1, 2, 0, 3, 4, 0, 145, 0,
1603 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1604 0, 146, 147, 0, 0, 0, 536, 0, 0, 66,
1605 0, 540, 67, 0, 0, 68, 0, 69, 278, 0,
1606 0, 0, 0, 0, 0, 548, 549, 0, 0, 0,
1607 552, 0, 0, 554, 148, 149, 150, 151, 152, 153,
1608 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
1609 164, 0, 58, 59, 0, 98, 106, 107, 108, 64,
1610 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
1611 0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
1612 169, 170, 171, 172, 173, 174, 175, 176, 177, 65,
1613 178, 0, 179, 180, 181, 0, 0, 0, 0, 0,
1614 0, 0, 102, 0, 103, 0, 182, 0, 0, 183,
1615 0, 184, 0, 185, 0, 0, 0, 0, 0, 0,
1616 0, 0, 0, 0, 0, 0, 0, 0, 0, 351,
1617 352, 58, 59, 353, 0, 0, 0, 0, 0, 0,
1618 1, 2, 0, 3, 4, 0, 354, 355, 356, 0,
1619 0, 0, 0, 0, 0, 0, 0, 0, 0, 357,
1620 358, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1621 0, 0, 0, 0, 58, 59, 359, 98, 106, 107,
1622 108, 64, 66, 1, 2, 67, 3, 4, 68, 0,
1623 69, 338, 148, 149, 150, 151, 152, 153, 154, 155,
1624 156, 157, 158, 159, 160, 161, 162, 163, 164, 0,
1625 0, 65, 58, 59, 0, 60, 61, 62, 63, 64,
1626 0, 1, 2, 0, 3, 4, 0, 0, 0, 0,
1627 0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
1628 171, 172, 173, 174, 175, 176, 177, 0, 178, 65,
1629 179, 180, 181, 0, 351, 352, 58, 59, 353, 0,
1630 102, 0, 103, 0, 0, 1, 2, 360, 3, 4,
1631 0, 354, 355, 356, 0, 0, 0, 0, 0, 0,
1632 0, 0, 0, 0, 357, 358, 0, 0, 0, 0,
1633 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1634 0, 359, 0, 0, 66, 0, 0, 67, 0, 273,
1635 68, 0, 69, 0, 0, 0, 0, 148, 149, 150,
1636 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
1637 161, 162, 163, 164, 0, 0, 0, 0, 0, 0,
1638 0, 0, 66, 251, 252, 67, 0, 0, 68, 0,
1639 69, 0, 0, 0, 0, 0, 0, 0, 0, 165,
1640 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
1641 176, 177, 0, 178, 0, 179, 180, 181, 351, 352,
1642 0, 0, 353, 0, 0, 0, 0, 0, 0, 0,
1643 0, 0, 360, 0, 0, 354, 355, 356, 0, 0,
1644 0, 0, 0, 0, 0, 0, 0, 0, 357, 358,
1645 0, 253, 254, 255, 256, 257, 258, 259, 260, 261,
1646 262, 263, 264, 265, 266, 359, 0, 58, 59, 0,
1647 98, 106, 107, 108, 64, 0, 1, 2, 0, 3,
1648 4, 148, 149, 150, 151, 152, 153, 154, 155, 156,
1649 157, 158, 159, 160, 161, 162, 163, 164, 0, 0,
1650 0, 0, 0, 0, 65, 0, 0, 0, 0, 58,
1651 59, 0, 98, 61, 62, 63, 64, 0, 1, 2,
1652 0, 3, 4, 165, 166, 167, 168, 169, 170, 171,
1653 172, 173, 174, 175, 176, 177, 126, 178, 0, 179,
1654 180, 181, 0, 0, 0, 0, 65, 0, 58, 59,
1655 0, 98, 61, 62, 63, 64, 360, 1, 2, 0,
1656 3, 4, 0, 0, 58, 59, 0, 98, 61, 62,
1657 63, 64, 0, 1, 2, 320, 3, 4, 0, 0,
1658 0, 0, 0, 58, 59, 65, 98, 61, 62, 63,
1659 64, 408, 1, 2, 0, 3, 4, 66, 0, 0,
1660 67, 65, 0, 68, 0, 69, 0, 0, 0, 0,
1661 483, 0, 58, 59, 0, 98, 61, 62, 63, 64,
1662 65, 1, 2, 0, 3, 4, 0, 0, 58, 59,
1663 0, 193, 61, 62, 63, 64, 0, 1, 2, 66,
1664 3, 4, 67, 0, 0, 68, 0, 69, 0, 65,
1665 58, 59, 0, 98, 106, 107, 108, 64, 0, 1,
1666 2, 0, 3, 4, 0, 65, 0, 58, 59, 0,
1667 288, 61, 62, 63, 64, 0, 1, 2, 66, 3,
1668 4, 67, 0, 0, 68, 0, 69, 65, 0, 0,
1669 0, 0, 0, 0, 66, 0, 0, 67, 0, 0,
1670 68, 0, 69, 0, 65, 0, 0, 0, 0, 0,
1671 0, 0, 0, 66, 0, 0, 67, 0, 0, 68,
1672 0, 69, 0, 0, 0, 0, 0, 0, 0, 0,
1673 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1674 0, 0, 66, 0, 0, 67, 0, 0, 68, 0,
1675 69, 0, 0, 0, 0, 0, 0, 0, 66, 0,
1676 0, 67, 0, 0, 68, 0, 69, 0, 0, 0,
1677 0, 0, 0, 0, 0, 0, 199, 0, 0, 0,
1678 66, 0, 0, 67, 0, 0, 68, 0, 276, 0,
1679 0, 0, 0, 0, 200, 201, 0, 66, 0, 0,
1680 67, 0, 0, 68, 0, 69, 202, 203, 204, 205,
1681 206, 207, 148, 149, 150, 151, 152, 153, 154, 155,
1682 156, 157, 158, 159, 160, 161, 162, 208, 209, 0,
1683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1684 0, 0, 0, 0, 0, 0, 0, 0, 0, 210,
1685 211, 212, 0, 0, 213, 166, 167, 168, 169, 170,
1686 171, 172, 173, 174, 175, 176, 177, 214, 215, 216,
1690 static const short yycheck[] = { 0,
1691 25, 237, 111, 0, 183, 184, 204, 299, 4, 9,
1692 79, 409, 132, 16, 15, 322, 9, 9, 15, 326,
1693 50, 24, 110, 111, 23, 9, 238, 239, 35, 36,
1694 37, 38, 39, 40, 41, 104, 43, 205, 111, 127,
1695 128, 129, 15, 133, 69, 18, 29, 132, 3, 4,
1696 140, 110, 111, 46, 212, 13, 224, 215, 216, 217,
1697 218, 219, 46, 46, 222, 295, 21, 22, 93, 128,
1698 129, 45, 97, 29, 132, 36, 37, 133, 103, 133,
1699 105, 42, 312, 84, 133, 59, 484, 48, 144, 133,
1700 144, 528, 133, 132, 119, 144, 133, 276, 138, 133,
1701 144, 142, 539, 137, 132, 142, 131, 132, 5, 6,
1702 135, 8, 9, 10, 11, 12, 514, 14, 15, 133,
1703 17, 18, 14, 137, 131, 17, 5, 6, 17, 8,
1704 9, 10, 11, 12, 16, 14, 15, 349, 17, 18,
1705 140, 144, 540, 14, 143, 42, 17, 143, 140, 134,
1706 9, 136, 133, 12, 110, 111, 314, 142, 134, 140,
1707 136, 133, 131, 42, 140, 137, 134, 459, 136, 461,
1708 138, 127, 128, 129, 35, 36, 37, 202, 485, 40,
1709 134, 360, 136, 137, 136, 210, 211, 212, 213, 214,
1710 215, 216, 217, 218, 219, 220, 221, 222, 195, 268,
1711 269, 270, 271, 272, 17, 230, 53, 54, 55, 56,
1712 57, 58, 281, 282, 283, 451, 289, 4, 291, 292,
1713 378, 294, 380, 381, 382, 532, 17, 534, 301, 17,
1714 339, 133, 134, 39, 136, 41, 309, 310, 135, 110,
1715 111, 138, 31, 134, 141, 136, 143, 144, 4, 133,
1716 134, 276, 136, 27, 28, 7, 135, 128, 129, 138,
1717 329, 330, 141, 139, 143, 144, 339, 336, 3, 4,
1718 295, 296, 297, 106, 107, 75, 76, 139, 7, 7,
1719 516, 439, 4, 519, 17, 133, 137, 312, 313, 314,
1720 142, 137, 136, 136, 136, 368, 369, 370, 136, 136,
1721 17, 136, 136, 376, 136, 133, 464, 465, 466, 48,
1722 9, 142, 136, 386, 387, 513, 136, 136, 133, 133,
1723 31, 110, 111, 133, 133, 350, 395, 396, 397, 398,
1724 133, 529, 133, 402, 403, 133, 133, 133, 127, 128,
1725 129, 133, 31, 142, 17, 4, 52, 420, 133, 422,
1726 133, 133, 425, 378, 379, 380, 381, 382, 431, 432,
1727 385, 133, 138, 133, 133, 133, 133, 133, 437, 438,
1728 133, 142, 137, 17, 12, 12, 136, 4, 133, 404,
1729 133, 454, 455, 133, 457, 458, 133, 133, 133, 462,
1730 133, 291, 292, 133, 294, 136, 133, 470, 17, 137,
1731 46, 301, 133, 137, 140, 474, 133, 476, 477, 309,
1732 310, 436, 137, 133, 439, 133, 489, 138, 137, 133,
1733 46, 137, 137, 12, 497, 450, 4, 137, 137, 133,
1734 12, 456, 140, 12, 64, 133, 12, 0, 12, 464,
1735 465, 466, 0, 0, 469, 122, 122, 122, 449, 208,
1736 13, 14, 15, 526, 17, 18, 19, 508, 531, 84,
1737 209, 485, 25, 26, 103, 97, 230, 15, 368, 369,
1738 370, 81, 545, 546, 51, 469, 376, 550, -1, 375,
1739 553, 44, -1, -1, 47, -1, 386, 387, 51, -1,
1740 515, -1, -1, -1, -1, -1, -1, -1, -1, 5,
1741 6, -1, 8, 9, 10, 11, 12, 508, 14, 15,
1742 -1, 17, 18, -1, -1, -1, -1, -1, -1, -1,
1743 420, -1, 422, -1, 0, 425, -1, -1, -1, -1,
1744 -1, 431, 432, -1, -1, -1, 42, 13, 14, 15,
1745 -1, 17, 18, 19, -1, -1, -1, -1, -1, 25,
1746 26, -1, -1, -1, 454, 455, -1, 457, 458, -1,
1747 -1, -1, 462, -1, -1, -1, -1, -1, 44, -1,
1748 470, 47, -1, -1, -1, 51, 83, 84, 85, 86,
1749 87, 88, 89, 90, 91, 92, -1, -1, -1, 489,
1750 -1, -1, -1, 5, 6, -1, -1, 497, -1, -1,
1751 -1, -1, 14, 15, -1, 17, 18, -1, 20, -1,
1752 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1753 -1, 33, 34, -1, -1, -1, 526, -1, -1, 135,
1754 -1, 531, 138, -1, -1, 141, -1, 143, 144, -1,
1755 -1, -1, -1, -1, -1, 545, 546, -1, -1, -1,
1756 550, -1, -1, 553, 66, 67, 68, 69, 70, 71,
1757 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
1758 82, -1, 5, 6, -1, 8, 9, 10, 11, 12,
1759 -1, 14, 15, -1, 17, 18, -1, -1, -1, -1,
1760 -1, -1, -1, -1, -1, -1, 108, 109, 110, 111,
1761 112, 113, 114, 115, 116, 117, 118, 119, 120, 42,
1762 122, -1, 124, 125, 126, -1, -1, -1, -1, -1,
1763 -1, -1, 134, -1, 136, -1, 138, -1, -1, 141,
1764 -1, 143, -1, 145, -1, -1, -1, -1, -1, -1,
1765 -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
1766 4, 5, 6, 7, -1, -1, -1, -1, -1, -1,
1767 14, 15, -1, 17, 18, -1, 20, 21, 22, -1,
1768 -1, -1, -1, -1, -1, -1, -1, -1, -1, 33,
1769 34, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1770 -1, -1, -1, -1, 5, 6, 50, 8, 9, 10,
1771 11, 12, 135, 14, 15, 138, 17, 18, 141, -1,
1772 143, 144, 66, 67, 68, 69, 70, 71, 72, 73,
1773 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
1774 -1, 42, 5, 6, -1, 8, 9, 10, 11, 12,
1775 -1, 14, 15, -1, 17, 18, -1, -1, -1, -1,
1776 -1, -1, -1, -1, 108, 109, 110, 111, 112, 113,
1777 114, 115, 116, 117, 118, 119, 120, -1, 122, 42,
1778 124, 125, 126, -1, 3, 4, 5, 6, 7, -1,
1779 134, -1, 136, -1, -1, 14, 15, 141, 17, 18,
1780 -1, 20, 21, 22, -1, -1, -1, -1, -1, -1,
1781 -1, -1, -1, -1, 33, 34, -1, -1, -1, -1,
1782 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1783 -1, 50, -1, -1, 135, -1, -1, 138, -1, 140,
1784 141, -1, 143, -1, -1, -1, -1, 66, 67, 68,
1785 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
1786 79, 80, 81, 82, -1, -1, -1, -1, -1, -1,
1787 -1, -1, 135, 21, 22, 138, -1, -1, 141, -1,
1788 143, -1, -1, -1, -1, -1, -1, -1, -1, 108,
1789 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
1790 119, 120, -1, 122, -1, 124, 125, 126, 3, 4,
1791 -1, -1, 7, -1, -1, -1, -1, -1, -1, -1,
1792 -1, -1, 141, -1, -1, 20, 21, 22, -1, -1,
1793 -1, -1, -1, -1, -1, -1, -1, -1, 33, 34,
1794 -1, 89, 90, 91, 92, 93, 94, 95, 96, 97,
1795 98, 99, 100, 101, 102, 50, -1, 5, 6, -1,
1796 8, 9, 10, 11, 12, -1, 14, 15, -1, 17,
1797 18, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1798 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
1799 -1, -1, -1, -1, 42, -1, -1, -1, -1, 5,
1800 6, -1, 8, 9, 10, 11, 12, -1, 14, 15,
1801 -1, 17, 18, 108, 109, 110, 111, 112, 113, 114,
1802 115, 116, 117, 118, 119, 120, 32, 122, -1, 124,
1803 125, 126, -1, -1, -1, -1, 42, -1, 5, 6,
1804 -1, 8, 9, 10, 11, 12, 141, 14, 15, -1,
1805 17, 18, -1, -1, 5, 6, -1, 8, 9, 10,
1806 11, 12, -1, 14, 15, 32, 17, 18, -1, -1,
1807 -1, -1, -1, 5, 6, 42, 8, 9, 10, 11,
1808 12, 32, 14, 15, -1, 17, 18, 135, -1, -1,
1809 138, 42, -1, 141, -1, 143, -1, -1, -1, -1,
1810 32, -1, 5, 6, -1, 8, 9, 10, 11, 12,
1811 42, 14, 15, -1, 17, 18, -1, -1, 5, 6,
1812 -1, 8, 9, 10, 11, 12, -1, 14, 15, 135,
1813 17, 18, 138, -1, -1, 141, -1, 143, -1, 42,
1814 5, 6, -1, 8, 9, 10, 11, 12, -1, 14,
1815 15, -1, 17, 18, -1, 42, -1, 5, 6, -1,
1816 8, 9, 10, 11, 12, -1, 14, 15, 135, 17,
1817 18, 138, -1, -1, 141, -1, 143, 42, -1, -1,
1818 -1, -1, -1, -1, 135, -1, -1, 138, -1, -1,
1819 141, -1, 143, -1, 42, -1, -1, -1, -1, -1,
1820 -1, -1, -1, 135, -1, -1, 138, -1, -1, 141,
1821 -1, 143, -1, -1, -1, -1, -1, -1, -1, -1,
1822 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1823 -1, -1, 135, -1, -1, 138, -1, -1, 141, -1,
1824 143, -1, -1, -1, -1, -1, -1, -1, 135, -1,
1825 -1, 138, -1, -1, 141, -1, 143, -1, -1, -1,
1826 -1, -1, -1, -1, -1, -1, 30, -1, -1, -1,
1827 135, -1, -1, 138, -1, -1, 141, -1, 143, -1,
1828 -1, -1, -1, -1, 48, 49, -1, 135, -1, -1,
1829 138, -1, -1, 141, -1, 143, 60, 61, 62, 63,
1830 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
1831 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
1832 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1833 -1, -1, -1, -1, -1, -1, -1, -1, -1, 103,
1834 104, 105, -1, -1, 108, 109, 110, 111, 112, 113,
1835 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
1838 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
1839 #line 3 "/usr/share/bison.simple"
1840 /* This file comes from bison-1.28. */
1842 /* Skeleton output parser for bison,
1843 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
1845 This program is free software; you can redistribute it and/or modify
1846 it under the terms of the GNU General Public License as published by
1847 the Free Software Foundation; either version 2, or (at your option)
1850 This program is distributed in the hope that it will be useful,
1851 but WITHOUT ANY WARRANTY; without even the implied warranty of
1852 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1853 GNU General Public License for more details.
1855 You should have received a copy of the GNU General Public License
1856 along with this program; if not, write to the Free Software
1857 Foundation, Inc., 59 Temple Place - Suite 330,
1858 Boston, MA 02111-1307, USA. */
1860 /* As a special exception, when this file is copied by Bison into a
1861 Bison output file, you may use that output file without restriction.
1862 This special exception was added by the Free Software Foundation
1863 in version 1.24 of Bison. */
1865 /* This is the parser code that is written into each bison parser
1866 when the %semantic_parser declaration is not specified in the grammar.
1867 It was written by Richard Stallman by simplifying the hairy parser
1868 used when %semantic_parser is specified. */
1870 #ifndef YYSTACK_USE_ALLOCA
1872 #define YYSTACK_USE_ALLOCA
1873 #else /* alloca not defined */
1875 #define YYSTACK_USE_ALLOCA
1876 #define alloca __builtin_alloca
1877 #else /* not GNU C. */
1878 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
1879 #define YYSTACK_USE_ALLOCA
1881 #else /* not sparc */
1882 /* We think this test detects Watcom and Microsoft C. */
1883 /* This used to test MSDOS, but that is a bad idea
1884 since that symbol is in the user namespace. */
1885 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
1886 #if 0 /* No need for malloc.h, which pollutes the namespace;
1887 instead, just don't use alloca. */
1890 #else /* not MSDOS, or __TURBOC__ */
1892 /* I don't know what this was needed for, but it pollutes the namespace.
1893 So I turned it off. rms, 2 May 1997. */
1894 /* #include <malloc.h> */
1896 #define YYSTACK_USE_ALLOCA
1897 #else /* not MSDOS, or __TURBOC__, or _AIX */
1899 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
1900 and on HPUX 10. Eventually we can turn this on. */
1901 #define YYSTACK_USE_ALLOCA
1902 #define alloca __builtin_alloca
1905 #endif /* not _AIX */
1906 #endif /* not MSDOS, or __TURBOC__ */
1907 #endif /* not sparc */
1908 #endif /* not GNU C */
1909 #endif /* alloca not defined */
1910 #endif /* YYSTACK_USE_ALLOCA not defined */
1912 #ifdef YYSTACK_USE_ALLOCA
1913 #define YYSTACK_ALLOC alloca
1915 #define YYSTACK_ALLOC malloc
1918 /* Note: there must be only one dollar sign in this file.
1919 It is replaced by the list of actions, each action
1920 as one case of the switch. */
1922 #define yyerrok (yyerrstatus = 0)
1923 #define yyclearin (yychar = YYEMPTY)
1926 #define YYACCEPT goto yyacceptlab
1927 #define YYABORT goto yyabortlab
1928 #define YYERROR goto yyerrlab1
1929 /* Like YYERROR except do call yyerror.
1930 This remains here temporarily to ease the
1931 transition to the new meaning of YYERROR, for GCC.
1932 Once GCC version 2 has supplanted version 1, this can go. */
1933 #define YYFAIL goto yyerrlab
1934 #define YYRECOVERING() (!!yyerrstatus)
1935 #define YYBACKUP(token, value) \
1937 if (yychar == YYEMPTY && yylen == 1) \
1938 { yychar = (token), yylval = (value); \
1939 yychar1 = YYTRANSLATE (yychar); \
1944 { yyerror ("syntax error: cannot back up"); YYERROR; } \
1948 #define YYERRCODE 256
1951 #define YYLEX yylex()
1957 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
1959 #define YYLEX yylex(&yylval, &yylloc)
1961 #else /* not YYLSP_NEEDED */
1963 #define YYLEX yylex(&yylval, YYLEX_PARAM)
1965 #define YYLEX yylex(&yylval)
1967 #endif /* not YYLSP_NEEDED */
1970 /* If nonreentrant, generate the variables here */
1974 int yychar; /* the lookahead symbol */
1975 YYSTYPE yylval; /* the semantic value of the */
1976 /* lookahead symbol */
1979 YYLTYPE yylloc; /* location data for the lookahead */
1983 int yynerrs; /* number of parse errors so far */
1984 #endif /* not YYPURE */
1987 int yydebug; /* nonzero means print parse trace */
1988 /* Since this is uninitialized, it does not stop multiple parsers
1992 /* YYINITDEPTH indicates the initial size of the parser's stacks */
1995 #define YYINITDEPTH 200
1998 /* YYMAXDEPTH is the maximum size the stacks can grow to
1999 (effective only if the built-in stack extension method is used). */
2006 #define YYMAXDEPTH 10000
2009 /* Define __yy_memcpy. Note that the size argument
2010 should be passed with type unsigned int, because that is what the non-GCC
2011 definitions require. With GCC, __builtin_memcpy takes an arg
2012 of type size_t, but it can handle unsigned int. */
2014 #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
2015 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
2016 #else /* not GNU C or C++ */
2019 /* This is the most reliable way to avoid incompatibilities
2020 in available built-in functions on various systems. */
2022 __yy_memcpy (to, from, count)
2027 register char *f = from;
2028 register char *t = to;
2029 register int i = count;
2035 #else /* __cplusplus */
2037 /* This is the most reliable way to avoid incompatibilities
2038 in available built-in functions on various systems. */
2040 __yy_memcpy (char *to, char *from, unsigned int count)
2042 register char *t = to;
2043 register char *f = from;
2044 register int i = count;
2053 #line 217 "/usr/share/bison.simple"
2055 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
2056 into yyparse. The argument should have type void *.
2057 It should actually point to an object.
2058 Grammar actions can access the variable by casting it
2059 to the proper pointer type. */
2061 #ifdef YYPARSE_PARAM
2063 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
2064 #define YYPARSE_PARAM_DECL
2065 #else /* not __cplusplus */
2066 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
2067 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
2068 #endif /* not __cplusplus */
2069 #else /* not YYPARSE_PARAM */
2070 #define YYPARSE_PARAM_ARG
2071 #define YYPARSE_PARAM_DECL
2072 #endif /* not YYPARSE_PARAM */
2074 /* Prevent warning if -Wstrict-prototypes. */
2076 #ifdef YYPARSE_PARAM
2077 int yyparse (void *);
2084 yyparse(YYPARSE_PARAM_ARG)
2087 register int yystate;
2089 register short *yyssp;
2090 register YYSTYPE *yyvsp;
2091 int yyerrstatus; /* number of tokens to shift before error messages enabled */
2092 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
2094 short yyssa[YYINITDEPTH]; /* the state stack */
2095 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
2097 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
2098 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
2101 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
2102 YYLTYPE *yyls = yylsa;
2105 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
2107 #define YYPOPSTACK (yyvsp--, yyssp--)
2110 int yystacksize = YYINITDEPTH;
2111 int yyfree_stacks = 0;
2122 YYSTYPE yyval; /* the variable used to return */
2123 /* semantic values from the action */
2130 fprintf(stderr, "Starting parse\n");
2136 yychar = YYEMPTY; /* Cause a token to be read. */
2138 /* Initialize stack pointers.
2139 Waste one element of value and location stack
2140 so that they stay on the same level as the state stack.
2141 The wasted elements are never initialized. */
2149 /* Push a new state, which is found in yystate . */
2150 /* In all cases, when you get here, the value and location stacks
2151 have just been pushed. so pushing a state here evens the stacks. */
2156 if (yyssp >= yyss + yystacksize - 1)
2158 /* Give user a chance to reallocate the stack */
2159 /* Use copies of these so that the &'s don't force the real ones into memory. */
2160 YYSTYPE *yyvs1 = yyvs;
2161 short *yyss1 = yyss;
2163 YYLTYPE *yyls1 = yyls;
2166 /* Get the current used size of the three stacks, in elements. */
2167 int size = yyssp - yyss + 1;
2170 /* Each stack pointer address is followed by the size of
2171 the data in use in that stack, in bytes. */
2173 /* This used to be a conditional around just the two extra args,
2174 but that might be undefined if yyoverflow is a macro. */
2175 yyoverflow("parser stack overflow",
2176 &yyss1, size * sizeof (*yyssp),
2177 &yyvs1, size * sizeof (*yyvsp),
2178 &yyls1, size * sizeof (*yylsp),
2181 yyoverflow("parser stack overflow",
2182 &yyss1, size * sizeof (*yyssp),
2183 &yyvs1, size * sizeof (*yyvsp),
2187 yyss = yyss1; yyvs = yyvs1;
2191 #else /* no yyoverflow */
2192 /* Extend the stack our own way. */
2193 if (yystacksize >= YYMAXDEPTH)
2195 yyerror("parser stack overflow");
2207 if (yystacksize > YYMAXDEPTH)
2208 yystacksize = YYMAXDEPTH;
2209 #ifndef YYSTACK_USE_ALLOCA
2212 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
2213 __yy_memcpy ((char *)yyss, (char *)yyss1,
2214 size * (unsigned int) sizeof (*yyssp));
2215 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
2216 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
2217 size * (unsigned int) sizeof (*yyvsp));
2219 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
2220 __yy_memcpy ((char *)yyls, (char *)yyls1,
2221 size * (unsigned int) sizeof (*yylsp));
2223 #endif /* no yyoverflow */
2225 yyssp = yyss + size - 1;
2226 yyvsp = yyvs + size - 1;
2228 yylsp = yyls + size - 1;
2233 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
2236 if (yyssp >= yyss + yystacksize - 1)
2242 fprintf(stderr, "Entering state %d\n", yystate);
2248 /* Do appropriate processing given the current state. */
2249 /* Read a lookahead token if we need one and don't already have one. */
2252 /* First try to decide what to do without reference to lookahead token. */
2254 yyn = yypact[yystate];
2258 /* Not known => get a lookahead token if don't already have one. */
2260 /* yychar is either YYEMPTY or YYEOF
2261 or a valid token in external form. */
2263 if (yychar == YYEMPTY)
2267 fprintf(stderr, "Reading a token: ");
2272 /* Convert token to internal form (in yychar1) for indexing tables with */
2274 if (yychar <= 0) /* This means end of input. */
2277 yychar = YYEOF; /* Don't call YYLEX any more */
2281 fprintf(stderr, "Now at end of input.\n");
2286 yychar1 = YYTRANSLATE(yychar);
2291 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
2292 /* Give the individual parser a way to print the precise meaning
2293 of a token, for further debugging info. */
2295 YYPRINT (stderr, yychar, yylval);
2297 fprintf (stderr, ")\n");
2303 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
2308 /* yyn is what to do for this token type in this state.
2309 Negative => reduce, -yyn is rule number.
2310 Positive => shift, yyn is new state.
2311 New state is final state => don't bother to shift,
2312 just return success.
2313 0, or most negative number => error. */
2328 /* Shift the lookahead token. */
2332 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
2335 /* Discard the token being shifted unless it is eof. */
2336 if (yychar != YYEOF)
2344 /* count tokens shifted since error; after three, turn off error status. */
2345 if (yyerrstatus) yyerrstatus--;
2350 /* Do the default action for the current state. */
2353 yyn = yydefact[yystate];
2357 /* Do a reduction. yyn is the number of a rule to reduce with. */
2361 yyval = yyvsp[1-yylen]; /* implement default value of the action */
2368 fprintf (stderr, "Reducing via rule %d (line %d), ",
2371 /* Print the symbols being reduced, and their result. */
2372 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
2373 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
2374 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
2382 #line 1054 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2383 { yyval.IPredicate = ICmpInst::ICMP_EQ; ;
2386 #line 1054 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2387 { yyval.IPredicate = ICmpInst::ICMP_NE; ;
2390 #line 1055 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2391 { yyval.IPredicate = ICmpInst::ICMP_SLT; ;
2394 #line 1055 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2395 { yyval.IPredicate = ICmpInst::ICMP_SGT; ;
2398 #line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2399 { yyval.IPredicate = ICmpInst::ICMP_SLE; ;
2402 #line 1056 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2403 { yyval.IPredicate = ICmpInst::ICMP_SGE; ;
2406 #line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2407 { yyval.IPredicate = ICmpInst::ICMP_ULT; ;
2410 #line 1057 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2411 { yyval.IPredicate = ICmpInst::ICMP_UGT; ;
2414 #line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2415 { yyval.IPredicate = ICmpInst::ICMP_ULE; ;
2418 #line 1058 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2419 { yyval.IPredicate = ICmpInst::ICMP_UGE; ;
2422 #line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2423 { yyval.FPredicate = FCmpInst::FCMP_OEQ; ;
2426 #line 1062 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2427 { yyval.FPredicate = FCmpInst::FCMP_ONE; ;
2430 #line 1063 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2431 { yyval.FPredicate = FCmpInst::FCMP_OLT; ;
2434 #line 1063 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2435 { yyval.FPredicate = FCmpInst::FCMP_OGT; ;
2438 #line 1064 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2439 { yyval.FPredicate = FCmpInst::FCMP_OLE; ;
2442 #line 1064 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2443 { yyval.FPredicate = FCmpInst::FCMP_OGE; ;
2446 #line 1065 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2447 { yyval.FPredicate = FCmpInst::FCMP_ORD; ;
2450 #line 1065 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2451 { yyval.FPredicate = FCmpInst::FCMP_UNO; ;
2454 #line 1066 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2455 { yyval.FPredicate = FCmpInst::FCMP_UEQ; ;
2458 #line 1066 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2459 { yyval.FPredicate = FCmpInst::FCMP_UNE; ;
2462 #line 1067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2463 { yyval.FPredicate = FCmpInst::FCMP_ULT; ;
2466 #line 1067 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2467 { yyval.FPredicate = FCmpInst::FCMP_UGT; ;
2470 #line 1068 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2471 { yyval.FPredicate = FCmpInst::FCMP_ULE; ;
2474 #line 1068 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2475 { yyval.FPredicate = FCmpInst::FCMP_UGE; ;
2478 #line 1069 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2479 { yyval.FPredicate = FCmpInst::FCMP_TRUE; ;
2482 #line 1070 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2483 { yyval.FPredicate = FCmpInst::FCMP_FALSE; ;
2486 #line 1079 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2487 { yyval.StrVal = 0; ;
2490 #line 1083 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2492 yyval.StrVal = yyvsp[-1].StrVal;
2497 #line 1087 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2504 #line 1094 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2506 yyval.StrVal = yyvsp[-1].StrVal;
2511 #line 1098 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2518 #line 1104 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2519 { yyval.Linkage = GlobalValue::InternalLinkage; ;
2522 #line 1105 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2523 { yyval.Linkage = GlobalValue::WeakLinkage; ;
2526 #line 1106 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2527 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2530 #line 1107 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2531 { yyval.Linkage = GlobalValue::AppendingLinkage; ;
2534 #line 1108 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2535 { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2538 #line 1112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2539 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2542 #line 1113 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2543 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2546 #line 1114 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2547 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2550 #line 1118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2551 { yyval.Visibility = GlobalValue::DefaultVisibility; ;
2554 #line 1119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2555 { yyval.Visibility = GlobalValue::HiddenVisibility; ;
2558 #line 1123 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2559 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2562 #line 1124 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2563 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
2566 #line 1125 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2567 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
2570 #line 1129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2571 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
2574 #line 1130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2575 { yyval.Linkage = GlobalValue::InternalLinkage; ;
2578 #line 1131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2579 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
2582 #line 1132 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2583 { yyval.Linkage = GlobalValue::WeakLinkage; ;
2586 #line 1133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2587 { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
2590 #line 1136 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2591 { yyval.UIntVal = CallingConv::C; ;
2594 #line 1137 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2595 { yyval.UIntVal = CallingConv::C; ;
2598 #line 1138 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2599 { yyval.UIntVal = CallingConv::Fast; ;
2602 #line 1139 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2603 { yyval.UIntVal = CallingConv::Cold; ;
2606 #line 1140 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2607 { yyval.UIntVal = CallingConv::X86_StdCall; ;
2610 #line 1141 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2611 { yyval.UIntVal = CallingConv::X86_FastCall; ;
2614 #line 1142 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2616 if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
2617 GEN_ERROR("Calling conv too large");
2618 yyval.UIntVal = yyvsp[0].UInt64Val;
2623 #line 1149 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2624 { yyval.ParamAttrs = FunctionType::ZExtAttribute; ;
2627 #line 1150 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2628 { yyval.ParamAttrs = FunctionType::SExtAttribute; ;
2631 #line 1151 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2632 { yyval.ParamAttrs = FunctionType::InRegAttribute; ;
2635 #line 1152 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2636 { yyval.ParamAttrs = FunctionType::StructRetAttribute; ;
2639 #line 1155 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2640 { yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
2643 #line 1156 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2645 yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
2649 #line 1161 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2650 { yyval.ParamAttrs = FunctionType::NoReturnAttribute; ;
2653 #line 1165 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2654 { yyval.ParamAttrs = FunctionType::NoAttributeSet; ;
2657 #line 1166 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2659 yyval.ParamAttrs = FunctionType::ParameterAttributes(yyvsp[-1].ParamAttrs | yyvsp[0].ParamAttrs);
2663 #line 1173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2664 { yyval.UIntVal = 0; ;
2667 #line 1174 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2669 yyval.UIntVal = yyvsp[0].UInt64Val;
2670 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
2671 GEN_ERROR("Alignment must be a power of two");
2676 #line 1180 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2677 { yyval.UIntVal = 0; ;
2680 #line 1181 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2682 yyval.UIntVal = yyvsp[0].UInt64Val;
2683 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
2684 GEN_ERROR("Alignment must be a power of two");
2689 #line 1189 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2691 for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
2692 if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
2693 GEN_ERROR("Invalid character in section name");
2694 yyval.StrVal = yyvsp[0].StrVal;
2699 #line 1197 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2700 { yyval.StrVal = 0; ;
2703 #line 1198 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2704 { yyval.StrVal = yyvsp[0].StrVal; ;
2707 #line 1203 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2711 #line 1204 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2715 #line 1205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2717 CurGV->setSection(yyvsp[0].StrVal);
2718 free(yyvsp[0].StrVal);
2723 #line 1210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2725 if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
2726 GEN_ERROR("Alignment must be a power of two");
2727 CurGV->setAlignment(yyvsp[0].UInt64Val);
2732 #line 1226 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2734 yyval.TypeVal = new PATypeHolder(OpaqueType::get());
2739 #line 1230 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2741 yyval.TypeVal = new PATypeHolder(yyvsp[0].PrimType);
2746 #line 1234 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2748 if (*yyvsp[-1].TypeVal == Type::LabelTy)
2749 GEN_ERROR("Cannot form a pointer to a basic block");
2750 yyval.TypeVal = new PATypeHolder(HandleUpRefs(PointerType::get(*yyvsp[-1].TypeVal)));
2751 delete yyvsp[-1].TypeVal;
2756 #line 1241 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2757 { // Named types are also simple types...
2758 const Type* tmp = getTypeVal(yyvsp[0].ValIDVal);
2760 yyval.TypeVal = new PATypeHolder(tmp);
2764 #line 1246 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2765 { // Type UpReference
2766 if (yyvsp[0].UInt64Val > (uint64_t)~0U) GEN_ERROR("Value out of range");
2767 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
2768 UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector...
2769 yyval.TypeVal = new PATypeHolder(OT);
2770 UR_OUT("New Upreference!\n");
2775 #line 1254 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2777 std::vector<const Type*> Params;
2778 std::vector<FunctionType::ParameterAttributes> Attrs;
2779 Attrs.push_back(yyvsp[0].ParamAttrs);
2780 for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
2781 Params.push_back(I->Ty->get());
2782 if (I->Ty->get() != Type::VoidTy)
2783 Attrs.push_back(I->Attrs);
2785 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2786 if (isVarArg) Params.pop_back();
2788 FunctionType *FT = FunctionType::get(*yyvsp[-4].TypeVal, Params, isVarArg, Attrs);
2789 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2790 delete yyvsp[-4].TypeVal; // Delete the return type handle
2791 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
2796 #line 1272 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2798 std::vector<const Type*> Params;
2799 std::vector<FunctionType::ParameterAttributes> Attrs;
2800 Attrs.push_back(yyvsp[0].ParamAttrs);
2801 for (TypeWithAttrsList::iterator I=yyvsp[-2].TypeWithAttrsList->begin(), E=yyvsp[-2].TypeWithAttrsList->end(); I != E; ++I) {
2802 Params.push_back(I->Ty->get());
2803 if (I->Ty->get() != Type::VoidTy)
2804 Attrs.push_back(I->Attrs);
2806 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
2807 if (isVarArg) Params.pop_back();
2809 FunctionType *FT = FunctionType::get(yyvsp[-4].PrimType, Params, isVarArg, Attrs);
2810 delete yyvsp[-2].TypeWithAttrsList; // Delete the argument list
2811 yyval.TypeVal = new PATypeHolder(HandleUpRefs(FT));
2816 #line 1290 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2817 { // Sized array type?
2818 yyval.TypeVal = new PATypeHolder(HandleUpRefs(ArrayType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2819 delete yyvsp[-1].TypeVal;
2824 #line 1295 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2826 const llvm::Type* ElemTy = yyvsp[-1].TypeVal->get();
2827 if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
2828 GEN_ERROR("Unsigned result not equal to signed result");
2829 if (!ElemTy->isFloatingPoint() && !ElemTy->isInteger())
2830 GEN_ERROR("Element type of a VectorType must be primitive");
2831 if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
2832 GEN_ERROR("Vector length should be a power of 2");
2833 yyval.TypeVal = new PATypeHolder(HandleUpRefs(VectorType::get(*yyvsp[-1].TypeVal, (unsigned)yyvsp[-3].UInt64Val)));
2834 delete yyvsp[-1].TypeVal;
2839 #line 1307 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2840 { // Structure type?
2841 std::vector<const Type*> Elements;
2842 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-1].TypeList->begin(),
2843 E = yyvsp[-1].TypeList->end(); I != E; ++I)
2844 Elements.push_back(*I);
2846 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
2847 delete yyvsp[-1].TypeList;
2852 #line 1317 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2853 { // Empty structure type?
2854 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>()));
2859 #line 1321 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2861 std::vector<const Type*> Elements;
2862 for (std::list<llvm::PATypeHolder>::iterator I = yyvsp[-2].TypeList->begin(),
2863 E = yyvsp[-2].TypeList->end(); I != E; ++I)
2864 Elements.push_back(*I);
2866 yyval.TypeVal = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
2867 delete yyvsp[-2].TypeList;
2872 #line 1331 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2873 { // Empty structure type?
2874 yyval.TypeVal = new PATypeHolder(StructType::get(std::vector<const Type*>(), true));
2879 #line 1338 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2881 yyval.TypeWithAttrs.Ty = yyvsp[-1].TypeVal;
2882 yyval.TypeWithAttrs.Attrs = yyvsp[0].ParamAttrs;
2886 #line 1345 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2888 if (!UpRefs.empty())
2889 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
2890 if (!(*yyvsp[0].TypeVal)->isFirstClassType())
2891 GEN_ERROR("LLVM functions cannot return aggregate types");
2892 yyval.TypeVal = yyvsp[0].TypeVal;
2896 #line 1352 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2898 yyval.TypeVal = new PATypeHolder(Type::VoidTy);
2902 #line 1357 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2904 yyval.TypeWithAttrsList = new TypeWithAttrsList();
2905 yyval.TypeWithAttrsList->push_back(yyvsp[0].TypeWithAttrs);
2910 #line 1362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2912 (yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList)->push_back(yyvsp[0].TypeWithAttrs);
2917 #line 1370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2919 yyval.TypeWithAttrsList=yyvsp[-2].TypeWithAttrsList;
2920 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
2921 TWA.Ty = new PATypeHolder(Type::VoidTy);
2922 yyval.TypeWithAttrsList->push_back(TWA);
2927 #line 1377 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2929 yyval.TypeWithAttrsList = new TypeWithAttrsList;
2930 TypeWithAttrs TWA; TWA.Attrs = FunctionType::NoAttributeSet;
2931 TWA.Ty = new PATypeHolder(Type::VoidTy);
2932 yyval.TypeWithAttrsList->push_back(TWA);
2937 #line 1384 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2939 yyval.TypeWithAttrsList = new TypeWithAttrsList();
2944 #line 1392 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2946 yyval.TypeList = new std::list<PATypeHolder>();
2947 yyval.TypeList->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
2952 #line 1397 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2954 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(*yyvsp[0].TypeVal); delete yyvsp[0].TypeVal;
2959 #line 1408 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2960 { // Nonempty unsized arr
2961 if (!UpRefs.empty())
2962 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
2963 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal->get());
2965 GEN_ERROR("Cannot make array constant with type: '" +
2966 (*yyvsp[-3].TypeVal)->getDescription() + "'");
2967 const Type *ETy = ATy->getElementType();
2968 int NumElements = ATy->getNumElements();
2970 // Verify that we have the correct size...
2971 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
2972 GEN_ERROR("Type mismatch: constant sized array initialized with " +
2973 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
2974 itostr(NumElements) + "");
2976 // Verify all elements are correct type!
2977 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
2978 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
2979 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
2980 ETy->getDescription() +"' as required!\nIt is of type '"+
2981 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
2984 yyval.ConstVal = ConstantArray::get(ATy, *yyvsp[-1].ConstVector);
2985 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
2990 #line 1436 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
2992 if (!UpRefs.empty())
2993 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
2994 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
2996 GEN_ERROR("Cannot make array constant with type: '" +
2997 (*yyvsp[-2].TypeVal)->getDescription() + "'");
2999 int NumElements = ATy->getNumElements();
3000 if (NumElements != -1 && NumElements != 0)
3001 GEN_ERROR("Type mismatch: constant sized array initialized with 0"
3002 " arguments, but has size of " + itostr(NumElements) +"");
3003 yyval.ConstVal = ConstantArray::get(ATy, std::vector<Constant*>());
3004 delete yyvsp[-2].TypeVal;
3009 #line 1452 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3011 if (!UpRefs.empty())
3012 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3013 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal->get());
3015 GEN_ERROR("Cannot make array constant with type: '" +
3016 (*yyvsp[-2].TypeVal)->getDescription() + "'");
3018 int NumElements = ATy->getNumElements();
3019 const Type *ETy = ATy->getElementType();
3020 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3021 if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
3022 GEN_ERROR("Can't build string constant of size " +
3023 itostr((int)(EndStr-yyvsp[0].StrVal)) +
3024 " when array has size " + itostr(NumElements) + "");
3025 std::vector<Constant*> Vals;
3026 if (ETy == Type::Int8Ty) {
3027 for (unsigned char *C = (unsigned char *)yyvsp[0].StrVal;
3028 C != (unsigned char*)EndStr; ++C)
3029 Vals.push_back(ConstantInt::get(ETy, *C));
3031 free(yyvsp[0].StrVal);
3032 GEN_ERROR("Cannot build string arrays of non byte sized elements");
3034 free(yyvsp[0].StrVal);
3035 yyval.ConstVal = ConstantArray::get(ATy, Vals);
3036 delete yyvsp[-2].TypeVal;
3041 #line 1481 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3042 { // Nonempty unsized arr
3043 if (!UpRefs.empty())
3044 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
3045 const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal->get());
3047 GEN_ERROR("Cannot make packed constant with type: '" +
3048 (*yyvsp[-3].TypeVal)->getDescription() + "'");
3049 const Type *ETy = PTy->getElementType();
3050 int NumElements = PTy->getNumElements();
3052 // Verify that we have the correct size...
3053 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
3054 GEN_ERROR("Type mismatch: constant sized packed initialized with " +
3055 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
3056 itostr(NumElements) + "");
3058 // Verify all elements are correct type!
3059 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3060 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
3061 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3062 ETy->getDescription() +"' as required!\nIt is of type '"+
3063 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
3066 yyval.ConstVal = ConstantVector::get(PTy, *yyvsp[-1].ConstVector);
3067 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
3072 #line 1509 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3074 const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal->get());
3076 GEN_ERROR("Cannot make struct constant with type: '" +
3077 (*yyvsp[-3].TypeVal)->getDescription() + "'");
3079 if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
3080 GEN_ERROR("Illegal number of initializers for structure type");
3082 // Check to ensure that constants are compatible with the type initializer!
3083 for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i)
3084 if ((*yyvsp[-1].ConstVector)[i]->getType() != STy->getElementType(i))
3085 GEN_ERROR("Expected type '" +
3086 STy->getElementType(i)->getDescription() +
3087 "' for element #" + utostr(i) +
3088 " of structure initializer");
3090 // Check to ensure that Type is not packed
3091 if (STy->isPacked())
3092 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3094 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-1].ConstVector);
3095 delete yyvsp[-3].TypeVal; delete yyvsp[-1].ConstVector;
3100 #line 1534 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3102 if (!UpRefs.empty())
3103 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3104 const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal->get());
3106 GEN_ERROR("Cannot make struct constant with type: '" +
3107 (*yyvsp[-2].TypeVal)->getDescription() + "'");
3109 if (STy->getNumContainedTypes() != 0)
3110 GEN_ERROR("Illegal number of initializers for structure type");
3112 // Check to ensure that Type is not packed
3113 if (STy->isPacked())
3114 GEN_ERROR("Unpacked Initializer to vector type '" + STy->getDescription() + "'");
3116 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3117 delete yyvsp[-2].TypeVal;
3122 #line 1553 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3124 const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal->get());
3126 GEN_ERROR("Cannot make struct constant with type: '" +
3127 (*yyvsp[-5].TypeVal)->getDescription() + "'");
3129 if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
3130 GEN_ERROR("Illegal number of initializers for structure type");
3132 // Check to ensure that constants are compatible with the type initializer!
3133 for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i)
3134 if ((*yyvsp[-2].ConstVector)[i]->getType() != STy->getElementType(i))
3135 GEN_ERROR("Expected type '" +
3136 STy->getElementType(i)->getDescription() +
3137 "' for element #" + utostr(i) +
3138 " of structure initializer");
3140 // Check to ensure that Type is packed
3141 if (!STy->isPacked())
3142 GEN_ERROR("Vector initializer to non-vector type '" +
3143 STy->getDescription() + "'");
3145 yyval.ConstVal = ConstantStruct::get(STy, *yyvsp[-2].ConstVector);
3146 delete yyvsp[-5].TypeVal; delete yyvsp[-2].ConstVector;
3151 #line 1579 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3153 if (!UpRefs.empty())
3154 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
3155 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal->get());
3157 GEN_ERROR("Cannot make struct constant with type: '" +
3158 (*yyvsp[-4].TypeVal)->getDescription() + "'");
3160 if (STy->getNumContainedTypes() != 0)
3161 GEN_ERROR("Illegal number of initializers for structure type");
3163 // Check to ensure that Type is packed
3164 if (!STy->isPacked())
3165 GEN_ERROR("Vector initializer to non-vector type '" +
3166 STy->getDescription() + "'");
3168 yyval.ConstVal = ConstantStruct::get(STy, std::vector<Constant*>());
3169 delete yyvsp[-4].TypeVal;
3174 #line 1599 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3176 if (!UpRefs.empty())
3177 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3178 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
3180 GEN_ERROR("Cannot make null pointer constant with type: '" +
3181 (*yyvsp[-1].TypeVal)->getDescription() + "'");
3183 yyval.ConstVal = ConstantPointerNull::get(PTy);
3184 delete yyvsp[-1].TypeVal;
3189 #line 1611 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3191 if (!UpRefs.empty())
3192 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3193 yyval.ConstVal = UndefValue::get(yyvsp[-1].TypeVal->get());
3194 delete yyvsp[-1].TypeVal;
3199 #line 1618 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3201 if (!UpRefs.empty())
3202 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3203 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
3205 GEN_ERROR("Global const reference must be a pointer type");
3207 // ConstExprs can exist in the body of a function, thus creating
3208 // GlobalValues whenever they refer to a variable. Because we are in
3209 // the context of a function, getValNonImprovising will search the functions
3210 // symbol table instead of the module symbol table for the global symbol,
3211 // which throws things all off. To get around this, we just tell
3212 // getValNonImprovising that we are at global scope here.
3214 Function *SavedCurFn = CurFun.CurrentFunction;
3215 CurFun.CurrentFunction = 0;
3217 Value *V = getValNonImprovising(Ty, yyvsp[0].ValIDVal);
3220 CurFun.CurrentFunction = SavedCurFn;
3222 // If this is an initializer for a constant pointer, which is referencing a
3223 // (currently) undefined variable, create a stub now that shall be replaced
3224 // in the future with the right type of variable.
3227 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers!");
3228 const PointerType *PT = cast<PointerType>(Ty);
3230 // First check to see if the forward references value is already created!
3231 PerModuleInfo::GlobalRefsType::iterator I =
3232 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
3234 if (I != CurModule.GlobalRefs.end()) {
3235 V = I->second; // Placeholder already exists, use it...
3236 yyvsp[0].ValIDVal.destroy();
3239 if (yyvsp[0].ValIDVal.Type == ValID::GlobalName)
3240 Name = yyvsp[0].ValIDVal.Name;
3241 else if (yyvsp[0].ValIDVal.Type != ValID::GlobalID)
3242 GEN_ERROR("Invalid reference to global");
3244 // Create the forward referenced global.
3246 if (const FunctionType *FTy =
3247 dyn_cast<FunctionType>(PT->getElementType())) {
3248 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3249 CurModule.CurrentModule);
3251 GV = new GlobalVariable(PT->getElementType(), false,
3252 GlobalValue::ExternalLinkage, 0,
3253 Name, CurModule.CurrentModule);
3256 // Keep track of the fact that we have a forward ref to recycle it
3257 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
3262 yyval.ConstVal = cast<GlobalValue>(V);
3263 delete yyvsp[-1].TypeVal; // Free the type handle
3268 #line 1684 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3270 if (!UpRefs.empty())
3271 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3272 if (yyvsp[-1].TypeVal->get() != yyvsp[0].ConstVal->getType())
3273 GEN_ERROR("Mismatched types for constant expression: " +
3274 (*yyvsp[-1].TypeVal)->getDescription() + " and " + yyvsp[0].ConstVal->getType()->getDescription());
3275 yyval.ConstVal = yyvsp[0].ConstVal;
3276 delete yyvsp[-1].TypeVal;
3281 #line 1694 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3283 if (!UpRefs.empty())
3284 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3285 const Type *Ty = yyvsp[-1].TypeVal->get();
3286 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3287 GEN_ERROR("Cannot create a null initialized value of this type");
3288 yyval.ConstVal = Constant::getNullValue(Ty);
3289 delete yyvsp[-1].TypeVal;
3294 #line 1704 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3295 { // integral constants
3296 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].SInt64Val))
3297 GEN_ERROR("Constant value doesn't fit in type");
3298 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].SInt64Val);
3303 #line 1710 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3304 { // integral constants
3305 if (!ConstantInt::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].UInt64Val))
3306 GEN_ERROR("Constant value doesn't fit in type");
3307 yyval.ConstVal = ConstantInt::get(yyvsp[-1].PrimType, yyvsp[0].UInt64Val);
3312 #line 1716 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3313 { // Boolean constants
3314 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3315 yyval.ConstVal = ConstantInt::getTrue();
3320 #line 1721 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3321 { // Boolean constants
3322 assert(cast<IntegerType>(yyvsp[-1].PrimType)->getBitWidth() == 1 && "Not Bool?");
3323 yyval.ConstVal = ConstantInt::getFalse();
3328 #line 1726 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3329 { // Float & Double constants
3330 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType, yyvsp[0].FPVal))
3331 GEN_ERROR("Floating point constant invalid for type");
3332 yyval.ConstVal = ConstantFP::get(yyvsp[-1].PrimType, yyvsp[0].FPVal);
3337 #line 1734 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3339 if (!UpRefs.empty())
3340 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
3341 Constant *Val = yyvsp[-3].ConstVal;
3342 const Type *DestTy = yyvsp[-1].TypeVal->get();
3343 if (!CastInst::castIsValid(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy))
3344 GEN_ERROR("invalid cast opcode for cast from '" +
3345 Val->getType()->getDescription() + "' to '" +
3346 DestTy->getDescription() + "'");
3347 yyval.ConstVal = ConstantExpr::getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal, DestTy);
3348 delete yyvsp[-1].TypeVal;
3352 #line 1746 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3354 if (!isa<PointerType>(yyvsp[-2].ConstVal->getType()))
3355 GEN_ERROR("GetElementPtr requires a pointer operand");
3358 GetElementPtrInst::getIndexedType(yyvsp[-2].ConstVal->getType(), &(*yyvsp[-1].ValueList)[0], yyvsp[-1].ValueList->size(),
3361 GEN_ERROR("Index list invalid for constant getelementptr");
3363 SmallVector<Constant*, 8> IdxVec;
3364 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i != e; ++i)
3365 if (Constant *C = dyn_cast<Constant>((*yyvsp[-1].ValueList)[i]))
3366 IdxVec.push_back(C);
3368 GEN_ERROR("Indices to constant getelementptr must be constants");
3370 delete yyvsp[-1].ValueList;
3372 yyval.ConstVal = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal, &IdxVec[0], IdxVec.size());
3377 #line 1768 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3379 if (yyvsp[-5].ConstVal->getType() != Type::Int1Ty)
3380 GEN_ERROR("Select condition must be of boolean type");
3381 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3382 GEN_ERROR("Select operand types must match");
3383 yyval.ConstVal = ConstantExpr::getSelect(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3388 #line 1776 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3390 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3391 GEN_ERROR("Binary operator types must match");
3393 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3397 #line 1782 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3399 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3400 GEN_ERROR("Logical operator types must match");
3401 if (!yyvsp[-3].ConstVal->getType()->isInteger()) {
3402 if (Instruction::isShift(yyvsp[-5].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].ConstVal->getType()) ||
3403 !cast<VectorType>(yyvsp[-3].ConstVal->getType())->getElementType()->isInteger())
3404 GEN_ERROR("Logical operator requires integral operands");
3406 yyval.ConstVal = ConstantExpr::get(yyvsp[-5].BinaryOpVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3411 #line 1793 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3413 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3414 GEN_ERROR("icmp operand types must match");
3415 yyval.ConstVal = ConstantExpr::getICmp(yyvsp[-5].IPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3419 #line 1798 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3421 if (yyvsp[-3].ConstVal->getType() != yyvsp[-1].ConstVal->getType())
3422 GEN_ERROR("fcmp operand types must match");
3423 yyval.ConstVal = ConstantExpr::getFCmp(yyvsp[-5].FPredicate, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3427 #line 1803 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3429 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3430 GEN_ERROR("Invalid extractelement operands");
3431 yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3436 #line 1809 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3438 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3439 GEN_ERROR("Invalid insertelement operands");
3440 yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3445 #line 1815 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3447 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
3448 GEN_ERROR("Invalid shufflevector operands");
3449 yyval.ConstVal = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
3454 #line 1824 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3456 (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
3461 #line 1828 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3463 yyval.ConstVector = new std::vector<Constant*>();
3464 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
3469 #line 1836 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3470 { yyval.BoolVal = false; ;
3473 #line 1836 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3474 { yyval.BoolVal = true; ;
3477 #line 1847 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3479 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
3480 CurModule.ModuleDone();
3485 #line 1852 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3487 yyval.ModuleVal = ParserResult = CurModule.CurrentModule;
3488 CurModule.ModuleDone();
3493 #line 1865 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3494 { CurFun.isDeclare = false; ;
3497 #line 1865 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3499 CurFun.FunctionDone();
3504 #line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3505 { CurFun.isDeclare = true; ;
3508 #line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3514 #line 1872 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3520 #line 1875 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3522 // Emit an error if there are any unresolved types left.
3523 if (!CurModule.LateResolveTypes.empty()) {
3524 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
3525 if (DID.Type == ValID::LocalName) {
3526 GEN_ERROR("Reference to an undefined type: '"+DID.getName() + "'");
3528 GEN_ERROR("Reference to an undefined type: #" + itostr(DID.Num));
3535 #line 1887 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3537 if (!UpRefs.empty())
3538 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3539 // Eagerly resolve types. This is not an optimization, this is a
3540 // requirement that is due to the fact that we could have this:
3542 // %list = type { %list * }
3543 // %list = type { %list * } ; repeated type decl
3545 // If types are not resolved eagerly, then the two types will not be
3546 // determined to be the same type!
3548 ResolveTypeTo(yyvsp[-2].StrVal, *yyvsp[0].TypeVal);
3550 if (!setTypeName(*yyvsp[0].TypeVal, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
3552 // If this is a named type that is not a redefinition, add it to the slot
3554 CurModule.Types.push_back(*yyvsp[0].TypeVal);
3557 delete yyvsp[0].TypeVal;
3562 #line 1911 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3564 ResolveTypeTo(yyvsp[-2].StrVal, yyvsp[0].PrimType);
3566 if (!setTypeName(yyvsp[0].PrimType, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
3568 // If this is a named type that is not a redefinition, add it to the slot
3570 CurModule.Types.push_back(yyvsp[0].PrimType);
3576 #line 1922 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3578 /* "Externally Visible" Linkage */
3579 if (yyvsp[0].ConstVal == 0)
3580 GEN_ERROR("Global value initializer is not a constant");
3581 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
3582 yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
3587 #line 1929 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3593 #line 1932 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3595 if (yyvsp[0].ConstVal == 0)
3596 GEN_ERROR("Global value initializer is not a constant");
3597 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
3602 #line 1937 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3608 #line 1940 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3610 if (!UpRefs.empty())
3611 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
3612 CurGV = ParseGlobalVariable(yyvsp[-4].StrVal, yyvsp[-3].Linkage, yyvsp[-2].Visibility, yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
3614 delete yyvsp[0].TypeVal;
3618 #line 1946 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3625 #line 1950 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3631 #line 1953 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3637 #line 1959 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3639 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
3640 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3641 std::string NewAsm(yyvsp[0].StrVal, EndStr);
3642 free(yyvsp[0].StrVal);
3644 if (AsmSoFar.empty())
3645 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
3647 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
3652 #line 1972 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3654 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
3655 free(yyvsp[0].StrVal);
3659 #line 1976 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3661 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
3662 free(yyvsp[0].StrVal);
3666 #line 1983 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3668 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3669 free(yyvsp[0].StrVal);
3674 #line 1988 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3676 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
3677 free(yyvsp[0].StrVal);
3682 #line 1993 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3688 #line 2002 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3690 if (!UpRefs.empty())
3691 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3692 if (*yyvsp[-2].TypeVal == Type::VoidTy)
3693 GEN_ERROR("void typed arguments are invalid");
3694 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3695 yyval.ArgList = yyvsp[-4].ArgList;
3696 yyvsp[-4].ArgList->push_back(E);
3701 #line 2012 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3703 if (!UpRefs.empty())
3704 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
3705 if (*yyvsp[-2].TypeVal == Type::VoidTy)
3706 GEN_ERROR("void typed arguments are invalid");
3707 ArgListEntry E; E.Attrs = yyvsp[-1].ParamAttrs; E.Ty = yyvsp[-2].TypeVal; E.Name = yyvsp[0].StrVal;
3708 yyval.ArgList = new ArgListType;
3709 yyval.ArgList->push_back(E);
3714 #line 2023 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3716 yyval.ArgList = yyvsp[0].ArgList;
3721 #line 2027 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3723 yyval.ArgList = yyvsp[-2].ArgList;
3724 struct ArgListEntry E;
3725 E.Ty = new PATypeHolder(Type::VoidTy);
3727 E.Attrs = FunctionType::NoAttributeSet;
3728 yyval.ArgList->push_back(E);
3733 #line 2036 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3735 yyval.ArgList = new ArgListType;
3736 struct ArgListEntry E;
3737 E.Ty = new PATypeHolder(Type::VoidTy);
3739 E.Attrs = FunctionType::NoAttributeSet;
3740 yyval.ArgList->push_back(E);
3745 #line 2045 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3752 #line 2051 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3754 UnEscapeLexed(yyvsp[-6].StrVal);
3755 std::string FunctionName(yyvsp[-6].StrVal);
3756 free(yyvsp[-6].StrVal); // Free strdup'd memory!
3758 // Check the function result for abstractness if this is a define. We should
3759 // have no abstract types at this point
3760 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(yyvsp[-7].TypeVal))
3761 GEN_ERROR("Reference to abstract result: "+ yyvsp[-7].TypeVal->get()->getDescription());
3763 std::vector<const Type*> ParamTypeList;
3764 std::vector<FunctionType::ParameterAttributes> ParamAttrs;
3765 ParamAttrs.push_back(yyvsp[-2].ParamAttrs);
3766 if (yyvsp[-4].ArgList) { // If there are arguments...
3767 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin(); I != yyvsp[-4].ArgList->end(); ++I) {
3768 const Type* Ty = I->Ty->get();
3769 if (!CurFun.isDeclare && CurModule.TypeIsUnresolved(I->Ty))
3770 GEN_ERROR("Reference to abstract argument: " + Ty->getDescription());
3771 ParamTypeList.push_back(Ty);
3772 if (Ty != Type::VoidTy)
3773 ParamAttrs.push_back(I->Attrs);
3777 bool isVarArg = ParamTypeList.size() && ParamTypeList.back() == Type::VoidTy;
3778 if (isVarArg) ParamTypeList.pop_back();
3780 FunctionType *FT = FunctionType::get(*yyvsp[-7].TypeVal, ParamTypeList, isVarArg,
3782 const PointerType *PFT = PointerType::get(FT);
3783 delete yyvsp[-7].TypeVal;
3786 if (!FunctionName.empty()) {
3787 ID = ValID::createGlobalName((char*)FunctionName.c_str());
3789 ID = ValID::createGlobalID(CurModule.Values[PFT].size());
3793 // See if this function was forward referenced. If so, recycle the object.
3794 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
3795 // Move the function to the end of the list, from whereever it was
3796 // previously inserted.
3797 Fn = cast<Function>(FWRef);
3798 CurModule.CurrentModule->getFunctionList().remove(Fn);
3799 CurModule.CurrentModule->getFunctionList().push_back(Fn);
3800 } else if (!FunctionName.empty() && // Merge with an earlier prototype?
3801 (Fn = CurModule.CurrentModule->getFunction(FunctionName))) {
3802 if (Fn->getFunctionType() != FT ) {
3803 // The existing function doesn't have the same type. This is an overload
3805 GEN_ERROR("Overload of function '" + FunctionName + "' not permitted.");
3806 } else if (!CurFun.isDeclare && !Fn->isDeclaration()) {
3807 // Neither the existing or the current function is a declaration and they
3808 // have the same name and same type. Clearly this is a redefinition.
3809 GEN_ERROR("Redefinition of function '" + FunctionName + "'");
3810 } if (Fn->isDeclaration()) {
3811 // Make sure to strip off any argument names so we can't get conflicts.
3812 for (Function::arg_iterator AI = Fn->arg_begin(), AE = Fn->arg_end();
3816 } else { // Not already defined?
3817 Fn = new Function(FT, GlobalValue::ExternalLinkage, FunctionName,
3818 CurModule.CurrentModule);
3820 InsertValue(Fn, CurModule.Values);
3823 CurFun.FunctionStart(Fn);
3825 if (CurFun.isDeclare) {
3826 // If we have declaration, always overwrite linkage. This will allow us to
3827 // correctly handle cases, when pointer to function is passed as argument to
3828 // another function.
3829 Fn->setLinkage(CurFun.Linkage);
3830 Fn->setVisibility(CurFun.Visibility);
3832 Fn->setCallingConv(yyvsp[-8].UIntVal);
3833 Fn->setAlignment(yyvsp[0].UIntVal);
3834 if (yyvsp[-1].StrVal) {
3835 Fn->setSection(yyvsp[-1].StrVal);
3836 free(yyvsp[-1].StrVal);
3839 // Add all of the arguments we parsed to the function...
3840 if (yyvsp[-4].ArgList) { // Is null if empty...
3841 if (isVarArg) { // Nuke the last entry
3842 assert(yyvsp[-4].ArgList->back().Ty->get() == Type::VoidTy && yyvsp[-4].ArgList->back().Name == 0 &&
3843 "Not a varargs marker!");
3844 delete yyvsp[-4].ArgList->back().Ty;
3845 yyvsp[-4].ArgList->pop_back(); // Delete the last entry
3847 Function::arg_iterator ArgIt = Fn->arg_begin();
3848 Function::arg_iterator ArgEnd = Fn->arg_end();
3850 for (ArgListType::iterator I = yyvsp[-4].ArgList->begin();
3851 I != yyvsp[-4].ArgList->end() && ArgIt != ArgEnd; ++I, ++ArgIt) {
3852 delete I->Ty; // Delete the typeholder...
3853 setValueName(ArgIt, I->Name); // Insert arg into symtab...
3859 delete yyvsp[-4].ArgList; // We're now done with the argument list
3865 #line 2164 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3867 yyval.FunctionVal = CurFun.CurrentFunction;
3869 // Make sure that we keep track of the linkage type even if there was a
3870 // previous "declare".
3871 yyval.FunctionVal->setLinkage(yyvsp[-3].Linkage);
3872 yyval.FunctionVal->setVisibility(yyvsp[-2].Visibility);
3876 #line 2175 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3878 yyval.FunctionVal = yyvsp[-1].FunctionVal;
3883 #line 2180 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3885 CurFun.CurrentFunction->setLinkage(yyvsp[-2].Linkage);
3886 CurFun.CurrentFunction->setVisibility(yyvsp[-1].Visibility);
3887 yyval.FunctionVal = CurFun.CurrentFunction;
3888 CurFun.FunctionDone();
3893 #line 2192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3895 yyval.BoolVal = false;
3900 #line 2196 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3902 yyval.BoolVal = true;
3907 #line 2201 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3908 { // A reference to a direct constant
3909 yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
3914 #line 2205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3916 yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
3921 #line 2209 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3922 { // Perhaps it's an FP constant?
3923 yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
3928 #line 2213 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3930 yyval.ValIDVal = ValID::create(ConstantInt::getTrue());
3935 #line 2217 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3937 yyval.ValIDVal = ValID::create(ConstantInt::getFalse());
3942 #line 2221 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3944 yyval.ValIDVal = ValID::createNull();
3949 #line 2225 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3951 yyval.ValIDVal = ValID::createUndef();
3956 #line 2229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3957 { // A vector zero constant.
3958 yyval.ValIDVal = ValID::createZeroInit();
3963 #line 2233 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3964 { // Nonempty unsized packed vector
3965 const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
3966 int NumElements = yyvsp[-1].ConstVector->size();
3968 VectorType* pt = VectorType::get(ETy, NumElements);
3969 PATypeHolder* PTy = new PATypeHolder(
3977 // Verify all elements are correct type!
3978 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3979 if (ETy != (*yyvsp[-1].ConstVector)[i]->getType())
3980 GEN_ERROR("Element #" + utostr(i) + " is not of type '" +
3981 ETy->getDescription() +"' as required!\nIt is of type '" +
3982 (*yyvsp[-1].ConstVector)[i]->getType()->getDescription() + "'.");
3985 yyval.ValIDVal = ValID::create(ConstantVector::get(pt, *yyvsp[-1].ConstVector));
3986 delete PTy; delete yyvsp[-1].ConstVector;
3991 #line 2258 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
3993 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
3998 #line 2262 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4000 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
4001 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4002 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4003 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4004 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4005 free(yyvsp[-2].StrVal);
4006 free(yyvsp[0].StrVal);
4011 #line 2276 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4012 { // Is it an integer reference...?
4013 yyval.ValIDVal = ValID::createLocalID(yyvsp[0].UIntVal);
4018 #line 2280 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4020 yyval.ValIDVal = ValID::createGlobalID(yyvsp[0].UIntVal);
4025 #line 2284 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4026 { // Is it a named reference...?
4027 yyval.ValIDVal = ValID::createLocalName(yyvsp[0].StrVal);
4032 #line 2288 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4033 { // Is it a named reference...?
4034 yyval.ValIDVal = ValID::createGlobalName(yyvsp[0].StrVal);
4039 #line 2300 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4041 if (!UpRefs.empty())
4042 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4043 yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4044 delete yyvsp[-1].TypeVal;
4049 #line 2309 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4051 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4056 #line 2313 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4057 { // Do not allow functions with 0 basic blocks
4058 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4063 #line 2322 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4065 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
4067 InsertValue(yyvsp[0].TermInstVal);
4068 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4069 InsertValue(yyvsp[-2].BasicBlockVal);
4070 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
4075 #line 2332 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4077 if (CastInst *CI1 = dyn_cast<CastInst>(yyvsp[0].InstVal))
4078 if (CastInst *CI2 = dyn_cast<CastInst>(CI1->getOperand(0)))
4079 if (CI2->getParent() == 0)
4080 yyvsp[-1].BasicBlockVal->getInstList().push_back(CI2);
4081 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
4082 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
4087 #line 2341 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4089 yyval.BasicBlockVal = getBBVal(ValID::createLocalID(CurFun.NextBBNum++), true);
4092 // Make sure to move the basic block to the correct location in the
4093 // function, instead of leaving it inserted wherever it was first
4095 Function::BasicBlockListType &BBL =
4096 CurFun.CurrentFunction->getBasicBlockList();
4097 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
4102 #line 2353 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4104 yyval.BasicBlockVal = getBBVal(ValID::createLocalName(yyvsp[0].StrVal), true);
4107 // Make sure to move the basic block to the correct location in the
4108 // function, instead of leaving it inserted wherever it was first
4110 Function::BasicBlockListType &BBL =
4111 CurFun.CurrentFunction->getBasicBlockList();
4112 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
4117 #line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4118 { // Return with a result...
4119 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
4124 #line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4125 { // Return with no result...
4126 yyval.TermInstVal = new ReturnInst();
4131 #line 2374 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4132 { // Unconditional Branch...
4133 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4135 yyval.TermInstVal = new BranchInst(tmpBB);
4139 #line 2379 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4141 assert(cast<IntegerType>(yyvsp[-7].PrimType)->getBitWidth() == 1 && "Not Bool?");
4142 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
4144 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
4146 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
4148 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4152 #line 2389 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4154 Value* tmpVal = getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal);
4156 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
4158 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
4159 yyval.TermInstVal = S;
4161 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
4162 E = yyvsp[-1].JumpTable->end();
4163 for (; I != E; ++I) {
4164 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4165 S->addCase(CI, I->second);
4167 GEN_ERROR("Switch case is constant, but not a simple integer");
4169 delete yyvsp[-1].JumpTable;
4174 #line 2408 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4176 Value* tmpVal = getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal);
4178 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
4180 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
4181 yyval.TermInstVal = S;
4186 #line 2418 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4189 // Handle the short syntax
4190 const PointerType *PFTy = 0;
4191 const FunctionType *Ty = 0;
4192 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-11].TypeVal->get())) ||
4193 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4194 // Pull out the types of all of the arguments...
4195 std::vector<const Type*> ParamTypes;
4196 FunctionType::ParamAttrsList ParamAttrs;
4197 ParamAttrs.push_back(yyvsp[-6].ParamAttrs);
4198 for (ValueRefList::iterator I = yyvsp[-8].ValueRefList->begin(), E = yyvsp[-8].ValueRefList->end(); I != E; ++I) {
4199 const Type *Ty = I->Val->getType();
4200 if (Ty == Type::VoidTy)
4201 GEN_ERROR("Short call syntax cannot be used with varargs");
4202 ParamTypes.push_back(Ty);
4203 ParamAttrs.push_back(I->Attrs);
4206 Ty = FunctionType::get(yyvsp[-11].TypeVal->get(), ParamTypes, false, ParamAttrs);
4207 PFTy = PointerType::get(Ty);
4210 Value *V = getVal(PFTy, yyvsp[-10].ValIDVal); // Get the function we're calling...
4212 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
4214 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
4217 // Check the arguments
4219 if (yyvsp[-8].ValueRefList->empty()) { // Has no arguments?
4220 // Make sure no arguments is a good thing!
4221 if (Ty->getNumParams() != 0)
4222 GEN_ERROR("No arguments passed to a function that "
4223 "expects arguments");
4224 } else { // Has arguments?
4225 // Loop through FunctionType's arguments and ensure they are specified
4227 FunctionType::param_iterator I = Ty->param_begin();
4228 FunctionType::param_iterator E = Ty->param_end();
4229 ValueRefList::iterator ArgI = yyvsp[-8].ValueRefList->begin(), ArgE = yyvsp[-8].ValueRefList->end();
4231 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4232 if (ArgI->Val->getType() != *I)
4233 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
4234 (*I)->getDescription() + "'");
4235 Args.push_back(ArgI->Val);
4238 if (Ty->isVarArg()) {
4240 for (; ArgI != ArgE; ++ArgI)
4241 Args.push_back(ArgI->Val); // push the remaining varargs
4242 } else if (I != E || ArgI != ArgE)
4243 GEN_ERROR("Invalid number of parameters detected");
4246 // Create the InvokeInst
4247 InvokeInst *II = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
4248 II->setCallingConv(yyvsp[-12].UIntVal);
4249 yyval.TermInstVal = II;
4250 delete yyvsp[-8].ValueRefList;
4255 #line 2484 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4257 yyval.TermInstVal = new UnwindInst();
4262 #line 2488 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4264 yyval.TermInstVal = new UnreachableInst();
4269 #line 2495 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4271 yyval.JumpTable = yyvsp[-5].JumpTable;
4272 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
4275 GEN_ERROR("May only switch on a constant pool value");
4277 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4279 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4283 #line 2506 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4285 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
4286 Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
4290 GEN_ERROR("May only switch on a constant pool value");
4292 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4294 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4298 #line 2519 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4300 // Is this definition named?? if so, assign the name...
4301 setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
4303 InsertValue(yyvsp[0].InstVal);
4304 yyval.InstVal = yyvsp[0].InstVal;
4309 #line 2529 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4310 { // Used for PHI nodes
4311 if (!UpRefs.empty())
4312 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-5].TypeVal)->getDescription());
4313 yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
4314 Value* tmpVal = getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal);
4316 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4318 yyval.PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4319 delete yyvsp[-5].TypeVal;
4323 #line 2540 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4325 yyval.PHIList = yyvsp[-6].PHIList;
4326 Value* tmpVal = getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal);
4328 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4330 yyvsp[-6].PHIList->push_back(std::make_pair(tmpVal, tmpBB));
4334 #line 2550 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4336 if (!UpRefs.empty())
4337 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4338 // Used for call and invoke instructions
4339 yyval.ValueRefList = new ValueRefList();
4340 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4341 yyval.ValueRefList->push_back(E);
4345 #line 2558 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4347 if (!UpRefs.empty())
4348 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4349 yyval.ValueRefList = yyvsp[-4].ValueRefList;
4350 ValueRefListEntry E; E.Attrs = yyvsp[0].ParamAttrs; E.Val = getVal(yyvsp[-2].TypeVal->get(), yyvsp[-1].ValIDVal);
4351 yyval.ValueRefList->push_back(E);
4356 #line 2566 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4357 { yyval.ValueRefList = new ValueRefList(); ;
4360 #line 2569 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4361 { yyval.ValueList = new std::vector<Value*>(); ;
4364 #line 2570 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4366 yyval.ValueList = yyvsp[-2].ValueList;
4367 yyval.ValueList->push_back(yyvsp[0].ValueVal);
4372 #line 2577 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4374 yyval.BoolVal = true;
4379 #line 2581 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4381 yyval.BoolVal = false;
4386 #line 2586 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4388 if (!UpRefs.empty())
4389 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4390 if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() &&
4391 !isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4393 "Arithmetic operator requires integer, FP, or packed operands");
4394 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()) &&
4395 (yyvsp[-4].BinaryOpVal == Instruction::URem ||
4396 yyvsp[-4].BinaryOpVal == Instruction::SRem ||
4397 yyvsp[-4].BinaryOpVal == Instruction::FRem))
4398 GEN_ERROR("Remainder not supported on vector types");
4399 Value* val1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4401 Value* val2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4403 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, val1, val2);
4404 if (yyval.InstVal == 0)
4405 GEN_ERROR("binary operator returned null");
4406 delete yyvsp[-3].TypeVal;
4410 #line 2607 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4412 if (!UpRefs.empty())
4413 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4414 if (!(*yyvsp[-3].TypeVal)->isInteger()) {
4415 if (Instruction::isShift(yyvsp[-4].BinaryOpVal) || !isa<VectorType>(yyvsp[-3].TypeVal->get()) ||
4416 !cast<VectorType>(yyvsp[-3].TypeVal->get())->getElementType()->isInteger())
4417 GEN_ERROR("Logical operator requires integral operands");
4419 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4421 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4423 yyval.InstVal = BinaryOperator::create(yyvsp[-4].BinaryOpVal, tmpVal1, tmpVal2);
4424 if (yyval.InstVal == 0)
4425 GEN_ERROR("binary operator returned null");
4426 delete yyvsp[-3].TypeVal;
4430 #line 2624 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4432 if (!UpRefs.empty())
4433 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4434 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4435 GEN_ERROR("Vector types not supported by icmp instruction");
4436 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4438 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4440 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].IPredicate, tmpVal1, tmpVal2);
4441 if (yyval.InstVal == 0)
4442 GEN_ERROR("icmp operator returned null");
4446 #line 2637 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4448 if (!UpRefs.empty())
4449 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-3].TypeVal)->getDescription());
4450 if (isa<VectorType>((*yyvsp[-3].TypeVal).get()))
4451 GEN_ERROR("Vector types not supported by fcmp instruction");
4452 Value* tmpVal1 = getVal(*yyvsp[-3].TypeVal, yyvsp[-2].ValIDVal);
4454 Value* tmpVal2 = getVal(*yyvsp[-3].TypeVal, yyvsp[0].ValIDVal);
4456 yyval.InstVal = CmpInst::create(yyvsp[-5].OtherOpVal, yyvsp[-4].FPredicate, tmpVal1, tmpVal2);
4457 if (yyval.InstVal == 0)
4458 GEN_ERROR("fcmp operator returned null");
4462 #line 2650 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4464 if (!UpRefs.empty())
4465 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4466 Value* Val = yyvsp[-2].ValueVal;
4467 const Type* DestTy = yyvsp[0].TypeVal->get();
4468 if (!CastInst::castIsValid(yyvsp[-3].CastOpVal, Val, DestTy))
4469 GEN_ERROR("invalid cast opcode for cast from '" +
4470 Val->getType()->getDescription() + "' to '" +
4471 DestTy->getDescription() + "'");
4472 yyval.InstVal = CastInst::create(yyvsp[-3].CastOpVal, Val, DestTy);
4473 delete yyvsp[0].TypeVal;
4477 #line 2662 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4479 if (yyvsp[-4].ValueVal->getType() != Type::Int1Ty)
4480 GEN_ERROR("select condition must be boolean");
4481 if (yyvsp[-2].ValueVal->getType() != yyvsp[0].ValueVal->getType())
4482 GEN_ERROR("select value types should match");
4483 yyval.InstVal = new SelectInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4488 #line 2670 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4490 if (!UpRefs.empty())
4491 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[0].TypeVal)->getDescription());
4492 yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
4493 delete yyvsp[0].TypeVal;
4498 #line 2677 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4500 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4501 GEN_ERROR("Invalid extractelement operands");
4502 yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4507 #line 2683 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4509 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4510 GEN_ERROR("Invalid insertelement operands");
4511 yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4516 #line 2689 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4518 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
4519 GEN_ERROR("Invalid shufflevector operands");
4520 yyval.InstVal = new ShuffleVectorInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
4525 #line 2695 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4527 const Type *Ty = yyvsp[0].PHIList->front().first->getType();
4528 if (!Ty->isFirstClassType())
4529 GEN_ERROR("PHI node operands must be of first class type");
4530 yyval.InstVal = new PHINode(Ty);
4531 ((PHINode*)yyval.InstVal)->reserveOperandSpace(yyvsp[0].PHIList->size());
4532 while (yyvsp[0].PHIList->begin() != yyvsp[0].PHIList->end()) {
4533 if (yyvsp[0].PHIList->front().first->getType() != Ty)
4534 GEN_ERROR("All elements of a PHI node must be of the same type");
4535 cast<PHINode>(yyval.InstVal)->addIncoming(yyvsp[0].PHIList->front().first, yyvsp[0].PHIList->front().second);
4536 yyvsp[0].PHIList->pop_front();
4538 delete yyvsp[0].PHIList; // Free the list...
4543 #line 2711 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4546 // Handle the short syntax
4547 const PointerType *PFTy = 0;
4548 const FunctionType *Ty = 0;
4549 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-5].TypeVal->get())) ||
4550 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4551 // Pull out the types of all of the arguments...
4552 std::vector<const Type*> ParamTypes;
4553 FunctionType::ParamAttrsList ParamAttrs;
4554 ParamAttrs.push_back(yyvsp[0].ParamAttrs);
4555 for (ValueRefList::iterator I = yyvsp[-2].ValueRefList->begin(), E = yyvsp[-2].ValueRefList->end(); I != E; ++I) {
4556 const Type *Ty = I->Val->getType();
4557 if (Ty == Type::VoidTy)
4558 GEN_ERROR("Short call syntax cannot be used with varargs");
4559 ParamTypes.push_back(Ty);
4560 ParamAttrs.push_back(I->Attrs);
4563 Ty = FunctionType::get(yyvsp[-5].TypeVal->get(), ParamTypes, false, ParamAttrs);
4564 PFTy = PointerType::get(Ty);
4567 Value *V = getVal(PFTy, yyvsp[-4].ValIDVal); // Get the function we're calling...
4570 // Check the arguments
4572 if (yyvsp[-2].ValueRefList->empty()) { // Has no arguments?
4573 // Make sure no arguments is a good thing!
4574 if (Ty->getNumParams() != 0)
4575 GEN_ERROR("No arguments passed to a function that "
4576 "expects arguments");
4577 } else { // Has arguments?
4578 // Loop through FunctionType's arguments and ensure they are specified
4581 FunctionType::param_iterator I = Ty->param_begin();
4582 FunctionType::param_iterator E = Ty->param_end();
4583 ValueRefList::iterator ArgI = yyvsp[-2].ValueRefList->begin(), ArgE = yyvsp[-2].ValueRefList->end();
4585 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4586 if (ArgI->Val->getType() != *I)
4587 GEN_ERROR("Parameter " + ArgI->Val->getName()+ " is not of type '" +
4588 (*I)->getDescription() + "'");
4589 Args.push_back(ArgI->Val);
4591 if (Ty->isVarArg()) {
4593 for (; ArgI != ArgE; ++ArgI)
4594 Args.push_back(ArgI->Val); // push the remaining varargs
4595 } else if (I != E || ArgI != ArgE)
4596 GEN_ERROR("Invalid number of parameters detected");
4598 // Create the call node
4599 CallInst *CI = new CallInst(V, &Args[0], Args.size());
4600 CI->setTailCall(yyvsp[-7].BoolVal);
4601 CI->setCallingConv(yyvsp[-6].UIntVal);
4603 delete yyvsp[-2].ValueRefList;
4604 delete yyvsp[-5].TypeVal;
4609 #line 2774 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4611 yyval.InstVal = yyvsp[0].InstVal;
4616 #line 2779 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4618 yyval.BoolVal = true;
4623 #line 2783 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4625 yyval.BoolVal = false;
4630 #line 2790 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4632 if (!UpRefs.empty())
4633 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4634 yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4635 delete yyvsp[-1].TypeVal;
4640 #line 2797 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4642 if (!UpRefs.empty())
4643 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4644 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
4646 yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4647 delete yyvsp[-4].TypeVal;
4651 #line 2805 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4653 if (!UpRefs.empty())
4654 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4655 yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
4656 delete yyvsp[-1].TypeVal;
4661 #line 2812 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4663 if (!UpRefs.empty())
4664 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-4].TypeVal)->getDescription());
4665 Value* tmpVal = getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal);
4667 yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, tmpVal, yyvsp[0].UIntVal);
4668 delete yyvsp[-4].TypeVal;
4672 #line 2820 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4674 if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
4675 GEN_ERROR("Trying to free nonpointer type " +
4676 yyvsp[0].ValueVal->getType()->getDescription() + "");
4677 yyval.InstVal = new FreeInst(yyvsp[0].ValueVal);
4682 #line 2828 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4684 if (!UpRefs.empty())
4685 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4686 if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
4687 GEN_ERROR("Can't load from nonpointer type: " +
4688 (*yyvsp[-1].TypeVal)->getDescription());
4689 if (!cast<PointerType>(yyvsp[-1].TypeVal->get())->getElementType()->isFirstClassType())
4690 GEN_ERROR("Can't load from pointer of non-first-class type: " +
4691 (*yyvsp[-1].TypeVal)->getDescription());
4692 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4694 yyval.InstVal = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
4695 delete yyvsp[-1].TypeVal;
4699 #line 2842 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4701 if (!UpRefs.empty())
4702 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-1].TypeVal)->getDescription());
4703 const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
4705 GEN_ERROR("Can't store to a nonpointer type: " +
4706 (*yyvsp[-1].TypeVal)->getDescription());
4707 const Type *ElTy = PT->getElementType();
4708 if (ElTy != yyvsp[-3].ValueVal->getType())
4709 GEN_ERROR("Can't store '" + yyvsp[-3].ValueVal->getType()->getDescription() +
4710 "' into space of type '" + ElTy->getDescription() + "'");
4712 Value* tmpVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal);
4714 yyval.InstVal = new StoreInst(yyvsp[-3].ValueVal, tmpVal, yyvsp[-5].BoolVal);
4715 delete yyvsp[-1].TypeVal;
4719 #line 2859 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4721 if (!UpRefs.empty())
4722 GEN_ERROR("Invalid upreference in type: " + (*yyvsp[-2].TypeVal)->getDescription());
4723 if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
4724 GEN_ERROR("getelementptr insn requires pointer operand");
4726 if (!GetElementPtrInst::getIndexedType(*yyvsp[-2].TypeVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size(), true))
4727 GEN_ERROR("Invalid getelementptr indices for type '" +
4728 (*yyvsp[-2].TypeVal)->getDescription()+ "'");
4729 Value* tmpVal = getVal(*yyvsp[-2].TypeVal, yyvsp[-1].ValIDVal);
4731 yyval.InstVal = new GetElementPtrInst(tmpVal, &(*yyvsp[0].ValueList)[0], yyvsp[0].ValueList->size());
4732 delete yyvsp[-2].TypeVal;
4733 delete yyvsp[0].ValueList;
4737 /* the action file gets copied in in place of this dollarsign */
4738 #line 543 "/usr/share/bison.simple"
4749 short *ssp1 = yyss - 1;
4750 fprintf (stderr, "state stack now");
4751 while (ssp1 != yyssp)
4752 fprintf (stderr, " %d", *++ssp1);
4753 fprintf (stderr, "\n");
4763 yylsp->first_line = yylloc.first_line;
4764 yylsp->first_column = yylloc.first_column;
4765 yylsp->last_line = (yylsp-1)->last_line;
4766 yylsp->last_column = (yylsp-1)->last_column;
4771 yylsp->last_line = (yylsp+yylen-1)->last_line;
4772 yylsp->last_column = (yylsp+yylen-1)->last_column;
4776 /* Now "shift" the result of the reduction.
4777 Determine what state that goes to,
4778 based on the state we popped back to
4779 and the rule number reduced by. */
4783 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
4784 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
4785 yystate = yytable[yystate];
4787 yystate = yydefgoto[yyn - YYNTBASE];
4791 yyerrlab: /* here on detecting error */
4794 /* If not already recovering from an error, report this error. */
4798 #ifdef YYERROR_VERBOSE
4799 yyn = yypact[yystate];
4801 if (yyn > YYFLAG && yyn < YYLAST)
4808 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
4809 for (x = (yyn < 0 ? -yyn : 0);
4810 x < (sizeof(yytname) / sizeof(char *)); x++)
4811 if (yycheck[x + yyn] == x)
4812 size += strlen(yytname[x]) + 15, count++;
4813 msg = (char *) malloc(size + 15);
4816 strcpy(msg, "parse error");
4821 for (x = (yyn < 0 ? -yyn : 0);
4822 x < (sizeof(yytname) / sizeof(char *)); x++)
4823 if (yycheck[x + yyn] == x)
4825 strcat(msg, count == 0 ? ", expecting `" : " or `");
4826 strcat(msg, yytname[x]);
4835 yyerror ("parse error; also virtual memory exceeded");
4838 #endif /* YYERROR_VERBOSE */
4839 yyerror("parse error");
4843 yyerrlab1: /* here on error raised explicitly by an action */
4845 if (yyerrstatus == 3)
4847 /* if just tried and failed to reuse lookahead token after an error, discard it. */
4849 /* return failure if at end of input */
4850 if (yychar == YYEOF)
4855 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
4861 /* Else will try to reuse lookahead token
4862 after shifting the error token. */
4864 yyerrstatus = 3; /* Each real token shifted decrements this */
4868 yyerrdefault: /* current state does not do anything special for the error token. */
4871 /* This is wrong; only states that explicitly want error tokens
4872 should shift them. */
4873 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
4874 if (yyn) goto yydefault;
4877 yyerrpop: /* pop the current state because it cannot handle the error token */
4879 if (yyssp == yyss) YYABORT;
4889 short *ssp1 = yyss - 1;
4890 fprintf (stderr, "Error: state stack now");
4891 while (ssp1 != yyssp)
4892 fprintf (stderr, " %d", *++ssp1);
4893 fprintf (stderr, "\n");
4899 yyn = yypact[yystate];
4904 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
4923 fprintf(stderr, "Shifting error token, ");
4935 /* YYACCEPT comes here. */
4947 /* YYABORT comes here. */
4958 #line 2876 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
4961 // common code from the two 'RunVMAsmParser' functions
4962 static Module* RunParser(Module * M) {
4964 llvmAsmlineno = 1; // Reset the current line number...
4965 CurModule.CurrentModule = M;
4970 // Check to make sure the parser succeeded
4973 delete ParserResult;
4977 // Check to make sure that parsing produced a result
4981 // Reset ParserResult variable while saving its value for the result.
4982 Module *Result = ParserResult;
4988 void llvm::GenerateError(const std::string &message, int LineNo) {
4989 if (LineNo == -1) LineNo = llvmAsmlineno;
4990 // TODO: column number in exception
4992 TheParseError->setError(CurFilename, message, LineNo);
4996 int yyerror(const char *ErrorMsg) {
4998 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
4999 + ":" + utostr((unsigned) llvmAsmlineno) + ": ";
5000 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5001 if (yychar != YYEMPTY && yychar != 0)
5002 errMsg += " while reading token: '" + std::string(llvmAsmtext, llvmAsmleng)+
5004 GenerateError(errMsg);