2 /* A Bison parser, made from /Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y
3 by GNU Bison version 1.28 */
5 #define YYBISON 1 /* Identify Bison output. */
7 #define yyparse Upgradeparse
8 #define yylex Upgradelex
9 #define yyerror Upgradeerror
10 #define yylval Upgradelval
11 #define yychar Upgradechar
12 #define yydebug Upgradedebug
13 #define yynerrs Upgradenerrs
14 #define ESINT64VAL 257
15 #define EUINT64VAL 258
35 #define STRINGCONSTANT 278
36 #define IMPLEMENTATION 279
37 #define ZEROINITIALIZER 280
58 #define EXTERN_WEAK 301
65 #define POINTERSIZE 308
74 #define SIDEEFFECT 317
77 #define CSRETCC_TOK 320
78 #define FASTCC_TOK 321
79 #define COLDCC_TOK 322
80 #define X86_STDCALLCC_TOK 323
81 #define X86_FASTCALLCC_TOK 324
82 #define DATALAYOUT 325
87 #define UNREACHABLE 330
121 #define GETELEMENTPTR 364
125 #define EXTRACTELEMENT 368
126 #define INSERTELEMENT 369
127 #define SHUFFLEVECTOR 370
128 #define VAARG_old 371
129 #define VANEXT_old 372
164 #line 14 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
166 #include "UpgradeInternals.h"
167 #include "llvm/CallingConv.h"
168 #include "llvm/InlineAsm.h"
169 #include "llvm/Instructions.h"
170 #include "llvm/Module.h"
171 #include "llvm/ValueSymbolTable.h"
172 #include "llvm/Support/GetElementPtrTypeIterator.h"
173 #include "llvm/ADT/STLExtras.h"
174 #include "llvm/Support/MathExtras.h"
181 // DEBUG_UPREFS - Define this symbol if you want to enable debugging output
182 // relating to upreferences in the input stream.
184 //#define DEBUG_UPREFS 1
186 #define UR_OUT(X) std::cerr << X
191 #define YYERROR_VERBOSE 1
192 #define YYINCLUDED_STDLIB_H
198 int yyerror(const char*);
199 static void warning(const std::string& WarningMsg);
203 std::istream* LexInput;
204 static std::string CurFilename;
206 // This bool controls whether attributes are ever added to function declarations
207 // definitions and calls.
208 static bool AddAttributes = false;
210 static Module *ParserResult;
211 static bool ObsoleteVarArgs;
212 static bool NewVarArgs;
213 static BasicBlock *CurBB;
214 static GlobalVariable *CurGV;
216 // This contains info used when building the body of a function. It is
217 // destroyed when the function is completed.
219 typedef std::vector<Value *> ValueList; // Numbered defs
221 typedef std::pair<std::string,const Type*> RenameMapKey;
222 typedef std::map<RenameMapKey,std::string> RenameMapType;
225 ResolveDefinitions(std::map<const Type *,ValueList> &LateResolvers,
226 std::map<const Type *,ValueList> *FutureLateResolvers = 0);
228 static struct PerModuleInfo {
229 Module *CurrentModule;
230 std::map<const Type *, ValueList> Values; // Module level numbered definitions
231 std::map<const Type *,ValueList> LateResolveValues;
232 std::vector<PATypeHolder> Types;
233 std::map<ValID, PATypeHolder> LateResolveTypes;
234 static Module::Endianness Endian;
235 static Module::PointerSize PointerSize;
236 RenameMapType RenameMap;
238 /// PlaceHolderInfo - When temporary placeholder objects are created, remember
239 /// how they were referenced and on which line of the input they came from so
240 /// that we can resolve them later and print error messages as appropriate.
241 std::map<Value*, std::pair<ValID, int> > PlaceHolderInfo;
243 // GlobalRefs - This maintains a mapping between <Type, ValID>'s and forward
244 // references to global values. Global values may be referenced before they
245 // are defined, and if so, the temporary object that they represent is held
246 // here. This is used for forward references of GlobalValues.
248 typedef std::map<std::pair<const PointerType *, ValID>, GlobalValue*>
250 GlobalRefsType GlobalRefs;
253 // If we could not resolve some functions at function compilation time
254 // (calls to functions before they are defined), resolve them now... Types
255 // are resolved when the constant pool has been completely parsed.
257 ResolveDefinitions(LateResolveValues);
259 // Check to make sure that all global value forward references have been
262 if (!GlobalRefs.empty()) {
263 std::string UndefinedReferences = "Unresolved global references exist:\n";
265 for (GlobalRefsType::iterator I = GlobalRefs.begin(), E =GlobalRefs.end();
267 UndefinedReferences += " " + I->first.first->getDescription() + " " +
268 I->first.second.getName() + "\n";
270 error(UndefinedReferences);
274 if (CurrentModule->getDataLayout().empty()) {
275 std::string dataLayout;
276 if (Endian != Module::AnyEndianness)
277 dataLayout.append(Endian == Module::BigEndian ? "E" : "e");
278 if (PointerSize != Module::AnyPointerSize) {
279 if (!dataLayout.empty())
281 dataLayout.append(PointerSize == Module::Pointer64 ?
282 "p:64:64" : "p:32:32");
284 CurrentModule->setDataLayout(dataLayout);
287 Values.clear(); // Clear out function local definitions
292 // GetForwardRefForGlobal - Check to see if there is a forward reference
293 // for this global. If so, remove it from the GlobalRefs map and return it.
294 // If not, just return null.
295 GlobalValue *GetForwardRefForGlobal(const PointerType *PTy, ValID ID) {
296 // Check to see if there is a forward reference to this global variable...
297 // if there is, eliminate it and patch the reference to use the new def'n.
298 GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PTy, ID));
299 GlobalValue *Ret = 0;
300 if (I != GlobalRefs.end()) {
306 void setEndianness(Module::Endianness E) { Endian = E; }
307 void setPointerSize(Module::PointerSize sz) { PointerSize = sz; }
310 Module::Endianness PerModuleInfo::Endian = Module::AnyEndianness;
311 Module::PointerSize PerModuleInfo::PointerSize = Module::AnyPointerSize;
313 static struct PerFunctionInfo {
314 Function *CurrentFunction; // Pointer to current function being created
316 std::map<const Type*, ValueList> Values; // Keep track of #'d definitions
317 std::map<const Type*, ValueList> LateResolveValues;
318 bool isDeclare; // Is this function a forward declararation?
319 GlobalValue::LinkageTypes Linkage;// Linkage for forward declaration.
321 /// BBForwardRefs - When we see forward references to basic blocks, keep
322 /// track of them here.
323 std::map<BasicBlock*, std::pair<ValID, int> > BBForwardRefs;
324 std::vector<BasicBlock*> NumberedBlocks;
325 RenameMapType RenameMap;
328 inline PerFunctionInfo() {
331 Linkage = GlobalValue::ExternalLinkage;
334 inline void FunctionStart(Function *M) {
339 void FunctionDone() {
340 NumberedBlocks.clear();
342 // Any forward referenced blocks left?
343 if (!BBForwardRefs.empty()) {
344 error("Undefined reference to label " +
345 BBForwardRefs.begin()->first->getName());
349 // Resolve all forward references now.
350 ResolveDefinitions(LateResolveValues, &CurModule.LateResolveValues);
352 Values.clear(); // Clear out function local definitions
356 Linkage = GlobalValue::ExternalLinkage;
358 } CurFun; // Info for the current function...
360 static bool inFunctionScope() { return CurFun.CurrentFunction != 0; }
363 //===----------------------------------------------------------------------===//
364 // Code to handle definitions of all the types
365 //===----------------------------------------------------------------------===//
367 static int InsertValue(Value *V,
368 std::map<const Type*,ValueList> &ValueTab = CurFun.Values) {
369 if (V->hasName()) return -1; // Is this a numbered definition?
371 // Yes, insert the value into the value table...
372 ValueList &List = ValueTab[V->getType()];
374 return List.size()-1;
377 static const Type *getType(const ValID &D, bool DoNotImprovise = false) {
379 case ValID::NumberVal: // Is it a numbered definition?
380 // Module constants occupy the lowest numbered slots...
381 if ((unsigned)D.Num < CurModule.Types.size()) {
382 return CurModule.Types[(unsigned)D.Num];
385 case ValID::NameVal: // Is it a named definition?
386 if (const Type *N = CurModule.CurrentModule->getTypeByName(D.Name)) {
387 D.destroy(); // Free old strdup'd memory...
392 error("Internal parser error: Invalid symbol type reference");
396 // If we reached here, we referenced either a symbol that we don't know about
397 // or an id number that hasn't been read yet. We may be referencing something
398 // forward, so just create an entry to be resolved later and get to it...
400 if (DoNotImprovise) return 0; // Do we just want a null to be returned?
403 if (inFunctionScope()) {
404 if (D.Type == ValID::NameVal) {
405 error("Reference to an undefined type: '" + D.getName() + "'");
408 error("Reference to an undefined type: #" + itostr(D.Num));
413 std::map<ValID, PATypeHolder>::iterator I =CurModule.LateResolveTypes.find(D);
414 if (I != CurModule.LateResolveTypes.end())
417 Type *Typ = OpaqueType::get();
418 CurModule.LateResolveTypes.insert(std::make_pair(D, Typ));
422 /// This function determines if two function types differ only in their use of
423 /// the sret parameter attribute in the first argument. If they are identical
424 /// in all other respects, it returns true. Otherwise, it returns false.
425 bool FuncTysDifferOnlyBySRet(const FunctionType *F1,
426 const FunctionType *F2) {
427 if (F1->getReturnType() != F2->getReturnType() ||
428 F1->getNumParams() != F2->getNumParams() ||
429 F1->getParamAttrs(0) != F2->getParamAttrs(0))
431 unsigned SRetMask = ~unsigned(FunctionType::StructRetAttribute);
432 for (unsigned i = 0; i < F1->getNumParams(); ++i) {
433 if (F1->getParamType(i) != F2->getParamType(i) ||
434 unsigned(F1->getParamAttrs(i+1)) & SRetMask !=
435 unsigned(F2->getParamAttrs(i+1)) & SRetMask)
441 // The upgrade of csretcc to sret param attribute may have caused a function
442 // to not be found because the param attribute changed the type of the called
443 // function. This helper function, used in getExistingValue, detects that
444 // situation and returns V if it occurs and 0 otherwise.
445 static Value* handleSRetFuncTypeMerge(Value *V, const Type* Ty) {
446 // Handle degenerate cases
449 if (V->getType() == Ty)
453 const PointerType *PF1 = dyn_cast<PointerType>(Ty);
454 const PointerType *PF2 = dyn_cast<PointerType>(V->getType());
456 const FunctionType *FT1 =
457 dyn_cast<FunctionType>(PF1->getElementType());
458 const FunctionType *FT2 =
459 dyn_cast<FunctionType>(PF2->getElementType());
460 if (FT1 && FT2 && FuncTysDifferOnlyBySRet(FT1, FT2))
461 if (FT2->paramHasAttr(1, FunctionType::StructRetAttribute))
463 else if (Constant *C = dyn_cast<Constant>(V))
464 Result = ConstantExpr::getBitCast(C, PF1);
466 Result = new BitCastInst(V, PF1, "upgrd.cast", CurBB);
471 // getExistingValue - Look up the value specified by the provided type and
472 // the provided ValID. If the value exists and has already been defined, return
473 // it. Otherwise return null.
475 static Value *getExistingValue(const Type *Ty, const ValID &D) {
476 if (isa<FunctionType>(Ty)) {
477 error("Functions are not values and must be referenced as pointers");
481 case ValID::NumberVal: { // Is it a numbered definition?
482 unsigned Num = (unsigned)D.Num;
484 // Module constants occupy the lowest numbered slots...
485 std::map<const Type*,ValueList>::iterator VI = CurModule.Values.find(Ty);
486 if (VI != CurModule.Values.end()) {
487 if (Num < VI->second.size())
488 return VI->second[Num];
489 Num -= VI->second.size();
492 // Make sure that our type is within bounds
493 VI = CurFun.Values.find(Ty);
494 if (VI == CurFun.Values.end()) return 0;
496 // Check that the number is within bounds...
497 if (VI->second.size() <= Num) return 0;
499 return VI->second[Num];
502 case ValID::NameVal: { // Is it a named definition?
503 // Get the name out of the ID
504 std::string Name(D.Name);
506 RenameMapKey Key = std::make_pair(Name, Ty);
507 if (inFunctionScope()) {
508 // See if the name was renamed
509 RenameMapType::const_iterator I = CurFun.RenameMap.find(Key);
510 std::string LookupName;
511 if (I != CurFun.RenameMap.end())
512 LookupName = I->second;
515 ValueSymbolTable &SymTab = CurFun.CurrentFunction->getValueSymbolTable();
516 V = SymTab.lookup(LookupName);
517 V = handleSRetFuncTypeMerge(V, Ty);
520 RenameMapType::const_iterator I = CurModule.RenameMap.find(Key);
521 std::string LookupName;
522 if (I != CurModule.RenameMap.end())
523 LookupName = I->second;
526 V = CurModule.CurrentModule->getValueSymbolTable().lookup(LookupName);
527 V = handleSRetFuncTypeMerge(V, Ty);
532 D.destroy(); // Free old strdup'd memory...
536 // Check to make sure that "Ty" is an integral type, and that our
537 // value will fit into the specified type...
538 case ValID::ConstSIntVal: // Is it a constant pool reference??
539 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64)) {
540 error("Signed integral constant '" + itostr(D.ConstPool64) +
541 "' is invalid for type '" + Ty->getDescription() + "'");
543 return ConstantInt::get(Ty, D.ConstPool64);
545 case ValID::ConstUIntVal: // Is it an unsigned const pool reference?
546 if (!ConstantInt::isValueValidForType(Ty, D.UConstPool64)) {
547 if (!ConstantInt::isValueValidForType(Ty, D.ConstPool64))
548 error("Integral constant '" + utostr(D.UConstPool64) +
549 "' is invalid or out of range");
550 else // This is really a signed reference. Transmogrify.
551 return ConstantInt::get(Ty, D.ConstPool64);
553 return ConstantInt::get(Ty, D.UConstPool64);
555 case ValID::ConstFPVal: // Is it a floating point const pool reference?
556 if (!ConstantFP::isValueValidForType(Ty, D.ConstPoolFP))
557 error("FP constant invalid for type");
558 return ConstantFP::get(Ty, D.ConstPoolFP);
560 case ValID::ConstNullVal: // Is it a null value?
561 if (!isa<PointerType>(Ty))
562 error("Cannot create a a non pointer null");
563 return ConstantPointerNull::get(cast<PointerType>(Ty));
565 case ValID::ConstUndefVal: // Is it an undef value?
566 return UndefValue::get(Ty);
568 case ValID::ConstZeroVal: // Is it a zero value?
569 return Constant::getNullValue(Ty);
571 case ValID::ConstantVal: // Fully resolved constant?
572 if (D.ConstantValue->getType() != Ty)
573 error("Constant expression type different from required type");
574 return D.ConstantValue;
576 case ValID::InlineAsmVal: { // Inline asm expression
577 const PointerType *PTy = dyn_cast<PointerType>(Ty);
578 const FunctionType *FTy =
579 PTy ? dyn_cast<FunctionType>(PTy->getElementType()) : 0;
580 if (!FTy || !InlineAsm::Verify(FTy, D.IAD->Constraints))
581 error("Invalid type for asm constraint string");
582 InlineAsm *IA = InlineAsm::get(FTy, D.IAD->AsmString, D.IAD->Constraints,
583 D.IAD->HasSideEffects);
584 D.destroy(); // Free InlineAsmDescriptor.
588 assert(0 && "Unhandled case");
592 assert(0 && "Unhandled case");
596 // getVal - This function is identical to getExistingValue, except that if a
597 // value is not already defined, it "improvises" by creating a placeholder var
598 // that looks and acts just like the requested variable. When the value is
599 // defined later, all uses of the placeholder variable are replaced with the
602 static Value *getVal(const Type *Ty, const ValID &ID) {
603 if (Ty == Type::LabelTy)
604 error("Cannot use a basic block here");
606 // See if the value has already been defined.
607 Value *V = getExistingValue(Ty, ID);
610 if (!Ty->isFirstClassType() && !isa<OpaqueType>(Ty))
611 error("Invalid use of a composite type");
613 // If we reached here, we referenced either a symbol that we don't know about
614 // or an id number that hasn't been read yet. We may be referencing something
615 // forward, so just create an entry to be resolved later and get to it...
616 V = new Argument(Ty);
618 // Remember where this forward reference came from. FIXME, shouldn't we try
619 // to recycle these things??
620 CurModule.PlaceHolderInfo.insert(
621 std::make_pair(V, std::make_pair(ID, Upgradelineno)));
623 if (inFunctionScope())
624 InsertValue(V, CurFun.LateResolveValues);
626 InsertValue(V, CurModule.LateResolveValues);
630 /// @brief This just makes any name given to it unique, up to MAX_UINT times.
631 static std::string makeNameUnique(const std::string& Name) {
632 static unsigned UniqueNameCounter = 1;
633 std::string Result(Name);
634 Result += ".upgrd." + llvm::utostr(UniqueNameCounter++);
638 /// getBBVal - This is used for two purposes:
639 /// * If isDefinition is true, a new basic block with the specified ID is being
641 /// * If isDefinition is true, this is a reference to a basic block, which may
642 /// or may not be a forward reference.
644 static BasicBlock *getBBVal(const ValID &ID, bool isDefinition = false) {
645 assert(inFunctionScope() && "Can't get basic block at global scope");
651 error("Illegal label reference " + ID.getName());
653 case ValID::NumberVal: // Is it a numbered definition?
654 if (unsigned(ID.Num) >= CurFun.NumberedBlocks.size())
655 CurFun.NumberedBlocks.resize(ID.Num+1);
656 BB = CurFun.NumberedBlocks[ID.Num];
658 case ValID::NameVal: // Is it a named definition?
660 if (Value *N = CurFun.CurrentFunction->
661 getValueSymbolTable().lookup(Name)) {
662 if (N->getType() != Type::LabelTy) {
663 // Register names didn't use to conflict with basic block names
664 // because of type planes. Now they all have to be unique. So, we just
665 // rename the register and treat this name as if no basic block
667 RenameMapKey Key = std::make_pair(N->getName(),N->getType());
668 N->setName(makeNameUnique(N->getName()));
669 CurModule.RenameMap[Key] = N->getName();
672 BB = cast<BasicBlock>(N);
678 // See if the block has already been defined.
680 // If this is the definition of the block, make sure the existing value was
681 // just a forward reference. If it was a forward reference, there will be
682 // an entry for it in the PlaceHolderInfo map.
683 if (isDefinition && !CurFun.BBForwardRefs.erase(BB))
684 // The existing value was a definition, not a forward reference.
685 error("Redefinition of label " + ID.getName());
687 ID.destroy(); // Free strdup'd memory.
691 // Otherwise this block has not been seen before.
692 BB = new BasicBlock("", CurFun.CurrentFunction);
693 if (ID.Type == ValID::NameVal) {
694 BB->setName(ID.Name);
696 CurFun.NumberedBlocks[ID.Num] = BB;
699 // If this is not a definition, keep track of it so we can use it as a forward
702 // Remember where this forward reference came from.
703 CurFun.BBForwardRefs[BB] = std::make_pair(ID, Upgradelineno);
705 // The forward declaration could have been inserted anywhere in the
706 // function: insert it into the correct place now.
707 CurFun.CurrentFunction->getBasicBlockList().remove(BB);
708 CurFun.CurrentFunction->getBasicBlockList().push_back(BB);
715 //===----------------------------------------------------------------------===//
716 // Code to handle forward references in instructions
717 //===----------------------------------------------------------------------===//
719 // This code handles the late binding needed with statements that reference
720 // values not defined yet... for example, a forward branch, or the PHI node for
723 // This keeps a table (CurFun.LateResolveValues) of all such forward references
724 // and back patchs after we are done.
727 // ResolveDefinitions - If we could not resolve some defs at parsing
728 // time (forward branches, phi functions for loops, etc...) resolve the
732 ResolveDefinitions(std::map<const Type*,ValueList> &LateResolvers,
733 std::map<const Type*,ValueList> *FutureLateResolvers) {
735 // Loop over LateResolveDefs fixing up stuff that couldn't be resolved
736 for (std::map<const Type*,ValueList>::iterator LRI = LateResolvers.begin(),
737 E = LateResolvers.end(); LRI != E; ++LRI) {
738 const Type* Ty = LRI->first;
739 ValueList &List = LRI->second;
740 while (!List.empty()) {
741 Value *V = List.back();
744 std::map<Value*, std::pair<ValID, int> >::iterator PHI =
745 CurModule.PlaceHolderInfo.find(V);
746 assert(PHI != CurModule.PlaceHolderInfo.end() && "Placeholder error");
748 ValID &DID = PHI->second.first;
750 Value *TheRealValue = getExistingValue(Ty, DID);
752 V->replaceAllUsesWith(TheRealValue);
754 CurModule.PlaceHolderInfo.erase(PHI);
755 } else if (FutureLateResolvers) {
756 // Functions have their unresolved items forwarded to the module late
758 InsertValue(V, *FutureLateResolvers);
760 if (DID.Type == ValID::NameVal) {
761 error("Reference to an invalid definition: '" + DID.getName() +
762 "' of type '" + V->getType()->getDescription() + "'",
766 error("Reference to an invalid definition: #" +
767 itostr(DID.Num) + " of type '" +
768 V->getType()->getDescription() + "'", PHI->second.second);
775 LateResolvers.clear();
778 // ResolveTypeTo - A brand new type was just declared. This means that (if
779 // name is not null) things referencing Name can be resolved. Otherwise, things
780 // refering to the number can be resolved. Do this now.
782 static void ResolveTypeTo(char *Name, const Type *ToTy) {
784 if (Name) D = ValID::create(Name);
785 else D = ValID::create((int)CurModule.Types.size());
787 std::map<ValID, PATypeHolder>::iterator I =
788 CurModule.LateResolveTypes.find(D);
789 if (I != CurModule.LateResolveTypes.end()) {
790 ((DerivedType*)I->second.get())->refineAbstractTypeTo(ToTy);
791 CurModule.LateResolveTypes.erase(I);
795 /// This is the implementation portion of TypeHasInteger. It traverses the
796 /// type given, avoiding recursive types, and returns true as soon as it finds
797 /// an integer type. If no integer type is found, it returns false.
798 static bool TypeHasIntegerI(const Type *Ty, std::vector<const Type*> Stack) {
799 // Handle some easy cases
800 if (Ty->isPrimitiveType() || (Ty->getTypeID() == Type::OpaqueTyID))
804 if (const SequentialType *STy = dyn_cast<SequentialType>(Ty))
805 return STy->getElementType()->isInteger();
807 // Avoid type structure recursion
808 for (std::vector<const Type*>::iterator I = Stack.begin(), E = Stack.end();
813 // Push us on the type stack
816 if (const FunctionType *FTy = dyn_cast<FunctionType>(Ty)) {
817 if (TypeHasIntegerI(FTy->getReturnType(), Stack))
819 FunctionType::param_iterator I = FTy->param_begin();
820 FunctionType::param_iterator E = FTy->param_end();
822 if (TypeHasIntegerI(*I, Stack))
825 } else if (const StructType *STy = dyn_cast<StructType>(Ty)) {
826 StructType::element_iterator I = STy->element_begin();
827 StructType::element_iterator E = STy->element_end();
828 for (; I != E; ++I) {
829 if (TypeHasIntegerI(*I, Stack))
834 // There shouldn't be anything else, but its definitely not integer
835 assert(0 && "What type is this?");
839 /// This is the interface to TypeHasIntegerI. It just provides the type stack,
840 /// to avoid recursion, and then calls TypeHasIntegerI.
841 static inline bool TypeHasInteger(const Type *Ty) {
842 std::vector<const Type*> TyStack;
843 return TypeHasIntegerI(Ty, TyStack);
846 // setValueName - Set the specified value to the name given. The name may be
847 // null potentially, in which case this is a noop. The string passed in is
848 // assumed to be a malloc'd string buffer, and is free'd by this function.
850 static void setValueName(Value *V, char *NameStr) {
852 std::string Name(NameStr); // Copy string
853 free(NameStr); // Free old string
855 if (V->getType() == Type::VoidTy) {
856 error("Can't assign name '" + Name + "' to value with void type");
860 assert(inFunctionScope() && "Must be in function scope");
862 // Search the function's symbol table for an existing value of this name
863 ValueSymbolTable &ST = CurFun.CurrentFunction->getValueSymbolTable();
864 Value* Existing = ST.lookup(Name);
866 // An existing value of the same name was found. This might have happened
867 // because of the integer type planes collapsing in LLVM 2.0.
868 if (Existing->getType() == V->getType() &&
869 !TypeHasInteger(Existing->getType())) {
870 // If the type does not contain any integers in them then this can't be
871 // a type plane collapsing issue. It truly is a redefinition and we
872 // should error out as the assembly is invalid.
873 error("Redefinition of value named '" + Name + "' of type '" +
874 V->getType()->getDescription() + "'");
877 // In LLVM 2.0 we don't allow names to be re-used for any values in a
878 // function, regardless of Type. Previously re-use of names was okay as
879 // long as they were distinct types. With type planes collapsing because
880 // of the signedness change and because of PR411, this can no longer be
881 // supported. We must search the entire symbol table for a conflicting
882 // name and make the name unique. No warning is needed as this can't
884 std::string NewName = makeNameUnique(Name);
885 // We're changing the name but it will probably be used by other
886 // instructions as operands later on. Consequently we have to retain
887 // a mapping of the renaming that we're doing.
888 RenameMapKey Key = std::make_pair(Name,V->getType());
889 CurFun.RenameMap[Key] = NewName;
898 /// ParseGlobalVariable - Handle parsing of a global. If Initializer is null,
899 /// this is a declaration, otherwise it is a definition.
900 static GlobalVariable *
901 ParseGlobalVariable(char *NameStr,GlobalValue::LinkageTypes Linkage,
902 bool isConstantGlobal, const Type *Ty,
903 Constant *Initializer) {
904 if (isa<FunctionType>(Ty))
905 error("Cannot declare global vars of function type");
907 const PointerType *PTy = PointerType::get(Ty);
911 Name = NameStr; // Copy string
912 free(NameStr); // Free old string
915 // See if this global value was forward referenced. If so, recycle the
919 ID = ValID::create((char*)Name.c_str());
921 ID = ValID::create((int)CurModule.Values[PTy].size());
924 if (GlobalValue *FWGV = CurModule.GetForwardRefForGlobal(PTy, ID)) {
925 // Move the global to the end of the list, from whereever it was
926 // previously inserted.
927 GlobalVariable *GV = cast<GlobalVariable>(FWGV);
928 CurModule.CurrentModule->getGlobalList().remove(GV);
929 CurModule.CurrentModule->getGlobalList().push_back(GV);
930 GV->setInitializer(Initializer);
931 GV->setLinkage(Linkage);
932 GV->setConstant(isConstantGlobal);
933 InsertValue(GV, CurModule.Values);
937 // If this global has a name, check to see if there is already a definition
938 // of this global in the module and emit warnings if there are conflicts.
940 // The global has a name. See if there's an existing one of the same name.
941 if (CurModule.CurrentModule->getNamedGlobal(Name)) {
942 // We found an existing global ov the same name. This isn't allowed
943 // in LLVM 2.0. Consequently, we must alter the name of the global so it
944 // can at least compile. This can happen because of type planes
945 // There is alread a global of the same name which means there is a
946 // conflict. Let's see what we can do about it.
947 std::string NewName(makeNameUnique(Name));
948 if (Linkage == GlobalValue::InternalLinkage) {
949 // The linkage type is internal so just warn about the rename without
950 // invoking "scarey language" about linkage failures. GVars with
951 // InternalLinkage can be renamed at will.
952 warning("Global variable '" + Name + "' was renamed to '"+
955 // The linkage of this gval is external so we can't reliably rename
956 // it because it could potentially create a linking problem.
957 // However, we can't leave the name conflict in the output either or
958 // it won't assemble with LLVM 2.0. So, all we can do is rename
959 // this one to something unique and emit a warning about the problem.
960 warning("Renaming global variable '" + Name + "' to '" + NewName +
961 "' may cause linkage errors");
964 // Put the renaming in the global rename map
965 RenameMapKey Key = std::make_pair(Name,PointerType::get(Ty));
966 CurModule.RenameMap[Key] = NewName;
973 // Otherwise there is no existing GV to use, create one now.
975 new GlobalVariable(Ty, isConstantGlobal, Linkage, Initializer, Name,
976 CurModule.CurrentModule);
977 InsertValue(GV, CurModule.Values);
981 // setTypeName - Set the specified type to the name given. The name may be
982 // null potentially, in which case this is a noop. The string passed in is
983 // assumed to be a malloc'd string buffer, and is freed by this function.
985 // This function returns true if the type has already been defined, but is
986 // allowed to be redefined in the specified context. If the name is a new name
987 // for the type plane, it is inserted and false is returned.
988 static bool setTypeName(const Type *T, char *NameStr) {
989 assert(!inFunctionScope() && "Can't give types function-local names");
990 if (NameStr == 0) return false;
992 std::string Name(NameStr); // Copy string
993 free(NameStr); // Free old string
995 // We don't allow assigning names to void type
996 if (T == Type::VoidTy) {
997 error("Can't assign name '" + Name + "' to the void type");
1001 // Set the type name, checking for conflicts as we do so.
1002 bool AlreadyExists = CurModule.CurrentModule->addTypeName(Name, T);
1004 if (AlreadyExists) { // Inserting a name that is already defined???
1005 const Type *Existing = CurModule.CurrentModule->getTypeByName(Name);
1006 assert(Existing && "Conflict but no matching type?");
1008 // There is only one case where this is allowed: when we are refining an
1009 // opaque type. In this case, Existing will be an opaque type.
1010 if (const OpaqueType *OpTy = dyn_cast<OpaqueType>(Existing)) {
1011 // We ARE replacing an opaque type!
1012 const_cast<OpaqueType*>(OpTy)->refineAbstractTypeTo(T);
1016 // Otherwise, this is an attempt to redefine a type. That's okay if
1017 // the redefinition is identical to the original. This will be so if
1018 // Existing and T point to the same Type object. In this one case we
1019 // allow the equivalent redefinition.
1020 if (Existing == T) return true; // Yes, it's equal.
1022 // Any other kind of (non-equivalent) redefinition is an error.
1023 error("Redefinition of type named '" + Name + "' in the '" +
1024 T->getDescription() + "' type plane");
1030 //===----------------------------------------------------------------------===//
1031 // Code for handling upreferences in type names...
1034 // TypeContains - Returns true if Ty directly contains E in it.
1036 static bool TypeContains(const Type *Ty, const Type *E) {
1037 return std::find(Ty->subtype_begin(), Ty->subtype_end(),
1038 E) != Ty->subtype_end();
1042 struct UpRefRecord {
1043 // NestingLevel - The number of nesting levels that need to be popped before
1044 // this type is resolved.
1045 unsigned NestingLevel;
1047 // LastContainedTy - This is the type at the current binding level for the
1048 // type. Every time we reduce the nesting level, this gets updated.
1049 const Type *LastContainedTy;
1051 // UpRefTy - This is the actual opaque type that the upreference is
1052 // represented with.
1053 OpaqueType *UpRefTy;
1055 UpRefRecord(unsigned NL, OpaqueType *URTy)
1056 : NestingLevel(NL), LastContainedTy(URTy), UpRefTy(URTy) {}
1060 // UpRefs - A list of the outstanding upreferences that need to be resolved.
1061 static std::vector<UpRefRecord> UpRefs;
1063 /// HandleUpRefs - Every time we finish a new layer of types, this function is
1064 /// called. It loops through the UpRefs vector, which is a list of the
1065 /// currently active types. For each type, if the up reference is contained in
1066 /// the newly completed type, we decrement the level count. When the level
1067 /// count reaches zero, the upreferenced type is the type that is passed in:
1068 /// thus we can complete the cycle.
1070 static PATypeHolder HandleUpRefs(const Type *ty) {
1071 // If Ty isn't abstract, or if there are no up-references in it, then there is
1072 // nothing to resolve here.
1073 if (!ty->isAbstract() || UpRefs.empty()) return ty;
1075 PATypeHolder Ty(ty);
1076 UR_OUT("Type '" << Ty->getDescription() <<
1077 "' newly formed. Resolving upreferences.\n" <<
1078 UpRefs.size() << " upreferences active!\n");
1080 // If we find any resolvable upreferences (i.e., those whose NestingLevel goes
1081 // to zero), we resolve them all together before we resolve them to Ty. At
1082 // the end of the loop, if there is anything to resolve to Ty, it will be in
1084 OpaqueType *TypeToResolve = 0;
1086 for (unsigned i = 0; i != UpRefs.size(); ++i) {
1087 UR_OUT(" UR#" << i << " - TypeContains(" << Ty->getDescription() << ", "
1088 << UpRefs[i].second->getDescription() << ") = "
1089 << (TypeContains(Ty, UpRefs[i].second) ? "true" : "false") << "\n");
1090 if (TypeContains(Ty, UpRefs[i].LastContainedTy)) {
1091 // Decrement level of upreference
1092 unsigned Level = --UpRefs[i].NestingLevel;
1093 UpRefs[i].LastContainedTy = Ty;
1094 UR_OUT(" Uplevel Ref Level = " << Level << "\n");
1095 if (Level == 0) { // Upreference should be resolved!
1096 if (!TypeToResolve) {
1097 TypeToResolve = UpRefs[i].UpRefTy;
1099 UR_OUT(" * Resolving upreference for "
1100 << UpRefs[i].second->getDescription() << "\n";
1101 std::string OldName = UpRefs[i].UpRefTy->getDescription());
1102 UpRefs[i].UpRefTy->refineAbstractTypeTo(TypeToResolve);
1103 UR_OUT(" * Type '" << OldName << "' refined upreference to: "
1104 << (const void*)Ty << ", " << Ty->getDescription() << "\n");
1106 UpRefs.erase(UpRefs.begin()+i); // Remove from upreference list...
1107 --i; // Do not skip the next element...
1112 if (TypeToResolve) {
1113 UR_OUT(" * Resolving upreference for "
1114 << UpRefs[i].second->getDescription() << "\n";
1115 std::string OldName = TypeToResolve->getDescription());
1116 TypeToResolve->refineAbstractTypeTo(Ty);
1122 static inline Instruction::TermOps
1123 getTermOp(TermOps op) {
1125 default : assert(0 && "Invalid OldTermOp");
1126 case RetOp : return Instruction::Ret;
1127 case BrOp : return Instruction::Br;
1128 case SwitchOp : return Instruction::Switch;
1129 case InvokeOp : return Instruction::Invoke;
1130 case UnwindOp : return Instruction::Unwind;
1131 case UnreachableOp: return Instruction::Unreachable;
1135 static inline Instruction::BinaryOps
1136 getBinaryOp(BinaryOps op, const Type *Ty, Signedness Sign) {
1138 default : assert(0 && "Invalid OldBinaryOps");
1144 case SetGT : assert(0 && "Should use getCompareOp");
1145 case AddOp : return Instruction::Add;
1146 case SubOp : return Instruction::Sub;
1147 case MulOp : return Instruction::Mul;
1149 // This is an obsolete instruction so we must upgrade it based on the
1150 // types of its operands.
1151 bool isFP = Ty->isFloatingPoint();
1152 if (const VectorType* PTy = dyn_cast<VectorType>(Ty))
1153 // If its a vector type we want to use the element type
1154 isFP = PTy->getElementType()->isFloatingPoint();
1156 return Instruction::FDiv;
1157 else if (Sign == Signed)
1158 return Instruction::SDiv;
1159 return Instruction::UDiv;
1161 case UDivOp : return Instruction::UDiv;
1162 case SDivOp : return Instruction::SDiv;
1163 case FDivOp : return Instruction::FDiv;
1165 // This is an obsolete instruction so we must upgrade it based on the
1166 // types of its operands.
1167 bool isFP = Ty->isFloatingPoint();
1168 if (const VectorType* PTy = dyn_cast<VectorType>(Ty))
1169 // If its a vector type we want to use the element type
1170 isFP = PTy->getElementType()->isFloatingPoint();
1171 // Select correct opcode
1173 return Instruction::FRem;
1174 else if (Sign == Signed)
1175 return Instruction::SRem;
1176 return Instruction::URem;
1178 case URemOp : return Instruction::URem;
1179 case SRemOp : return Instruction::SRem;
1180 case FRemOp : return Instruction::FRem;
1181 case LShrOp : return Instruction::LShr;
1182 case AShrOp : return Instruction::AShr;
1183 case ShlOp : return Instruction::Shl;
1186 return Instruction::AShr;
1187 return Instruction::LShr;
1188 case AndOp : return Instruction::And;
1189 case OrOp : return Instruction::Or;
1190 case XorOp : return Instruction::Xor;
1194 static inline Instruction::OtherOps
1195 getCompareOp(BinaryOps op, unsigned short &predicate, const Type* &Ty,
1197 bool isSigned = Sign == Signed;
1198 bool isFP = Ty->isFloatingPoint();
1200 default : assert(0 && "Invalid OldSetCC");
1203 predicate = FCmpInst::FCMP_OEQ;
1204 return Instruction::FCmp;
1206 predicate = ICmpInst::ICMP_EQ;
1207 return Instruction::ICmp;
1211 predicate = FCmpInst::FCMP_UNE;
1212 return Instruction::FCmp;
1214 predicate = ICmpInst::ICMP_NE;
1215 return Instruction::ICmp;
1219 predicate = FCmpInst::FCMP_OLE;
1220 return Instruction::FCmp;
1223 predicate = ICmpInst::ICMP_SLE;
1225 predicate = ICmpInst::ICMP_ULE;
1226 return Instruction::ICmp;
1230 predicate = FCmpInst::FCMP_OGE;
1231 return Instruction::FCmp;
1234 predicate = ICmpInst::ICMP_SGE;
1236 predicate = ICmpInst::ICMP_UGE;
1237 return Instruction::ICmp;
1241 predicate = FCmpInst::FCMP_OLT;
1242 return Instruction::FCmp;
1245 predicate = ICmpInst::ICMP_SLT;
1247 predicate = ICmpInst::ICMP_ULT;
1248 return Instruction::ICmp;
1252 predicate = FCmpInst::FCMP_OGT;
1253 return Instruction::FCmp;
1256 predicate = ICmpInst::ICMP_SGT;
1258 predicate = ICmpInst::ICMP_UGT;
1259 return Instruction::ICmp;
1264 static inline Instruction::MemoryOps getMemoryOp(MemoryOps op) {
1266 default : assert(0 && "Invalid OldMemoryOps");
1267 case MallocOp : return Instruction::Malloc;
1268 case FreeOp : return Instruction::Free;
1269 case AllocaOp : return Instruction::Alloca;
1270 case LoadOp : return Instruction::Load;
1271 case StoreOp : return Instruction::Store;
1272 case GetElementPtrOp : return Instruction::GetElementPtr;
1276 static inline Instruction::OtherOps
1277 getOtherOp(OtherOps op, Signedness Sign) {
1279 default : assert(0 && "Invalid OldOtherOps");
1280 case PHIOp : return Instruction::PHI;
1281 case CallOp : return Instruction::Call;
1282 case SelectOp : return Instruction::Select;
1283 case UserOp1 : return Instruction::UserOp1;
1284 case UserOp2 : return Instruction::UserOp2;
1285 case VAArg : return Instruction::VAArg;
1286 case ExtractElementOp : return Instruction::ExtractElement;
1287 case InsertElementOp : return Instruction::InsertElement;
1288 case ShuffleVectorOp : return Instruction::ShuffleVector;
1289 case ICmpOp : return Instruction::ICmp;
1290 case FCmpOp : return Instruction::FCmp;
1294 static inline Value*
1295 getCast(CastOps op, Value *Src, Signedness SrcSign, const Type *DstTy,
1296 Signedness DstSign, bool ForceInstruction = false) {
1297 Instruction::CastOps Opcode;
1298 const Type* SrcTy = Src->getType();
1300 if (SrcTy->isFloatingPoint() && isa<PointerType>(DstTy)) {
1301 // fp -> ptr cast is no longer supported but we must upgrade this
1302 // by doing a double cast: fp -> int -> ptr
1303 SrcTy = Type::Int64Ty;
1304 Opcode = Instruction::IntToPtr;
1305 if (isa<Constant>(Src)) {
1306 Src = ConstantExpr::getCast(Instruction::FPToUI,
1307 cast<Constant>(Src), SrcTy);
1309 std::string NewName(makeNameUnique(Src->getName()));
1310 Src = new FPToUIInst(Src, SrcTy, NewName, CurBB);
1312 } else if (isa<IntegerType>(DstTy) &&
1313 cast<IntegerType>(DstTy)->getBitWidth() == 1) {
1314 // cast type %x to bool was previously defined as setne type %x, null
1315 // The cast semantic is now to truncate, not compare so we must retain
1316 // the original intent by replacing the cast with a setne
1317 Constant* Null = Constant::getNullValue(SrcTy);
1318 Instruction::OtherOps Opcode = Instruction::ICmp;
1319 unsigned short predicate = ICmpInst::ICMP_NE;
1320 if (SrcTy->isFloatingPoint()) {
1321 Opcode = Instruction::FCmp;
1322 predicate = FCmpInst::FCMP_ONE;
1323 } else if (!SrcTy->isInteger() && !isa<PointerType>(SrcTy)) {
1324 error("Invalid cast to bool");
1326 if (isa<Constant>(Src) && !ForceInstruction)
1327 return ConstantExpr::getCompare(predicate, cast<Constant>(Src), Null);
1329 return CmpInst::create(Opcode, predicate, Src, Null);
1331 // Determine the opcode to use by calling CastInst::getCastOpcode
1333 CastInst::getCastOpcode(Src, SrcSign == Signed, DstTy, DstSign == Signed);
1335 } else switch (op) {
1336 default: assert(0 && "Invalid cast token");
1337 case TruncOp: Opcode = Instruction::Trunc; break;
1338 case ZExtOp: Opcode = Instruction::ZExt; break;
1339 case SExtOp: Opcode = Instruction::SExt; break;
1340 case FPTruncOp: Opcode = Instruction::FPTrunc; break;
1341 case FPExtOp: Opcode = Instruction::FPExt; break;
1342 case FPToUIOp: Opcode = Instruction::FPToUI; break;
1343 case FPToSIOp: Opcode = Instruction::FPToSI; break;
1344 case UIToFPOp: Opcode = Instruction::UIToFP; break;
1345 case SIToFPOp: Opcode = Instruction::SIToFP; break;
1346 case PtrToIntOp: Opcode = Instruction::PtrToInt; break;
1347 case IntToPtrOp: Opcode = Instruction::IntToPtr; break;
1348 case BitCastOp: Opcode = Instruction::BitCast; break;
1351 if (isa<Constant>(Src) && !ForceInstruction)
1352 return ConstantExpr::getCast(Opcode, cast<Constant>(Src), DstTy);
1353 return CastInst::create(Opcode, Src, DstTy);
1356 static Instruction *
1357 upgradeIntrinsicCall(const Type* RetTy, const ValID &ID,
1358 std::vector<Value*>& Args) {
1360 std::string Name = ID.Type == ValID::NameVal ? ID.Name : "";
1361 if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") {
1362 if (Args.size() != 2)
1363 error("Invalid prototype for " + Name + " prototype");
1364 return new FCmpInst(FCmpInst::FCMP_UNO, Args[0], Args[1]);
1366 const Type* PtrTy = PointerType::get(Type::Int8Ty);
1367 std::vector<const Type*> Params;
1368 if (Name == "llvm.va_start" || Name == "llvm.va_end") {
1369 if (Args.size() != 1)
1370 error("Invalid prototype for " + Name + " prototype");
1371 Params.push_back(PtrTy);
1372 const FunctionType *FTy = FunctionType::get(Type::VoidTy, Params, false);
1373 const PointerType *PFTy = PointerType::get(FTy);
1374 Value* Func = getVal(PFTy, ID);
1375 Args[0] = new BitCastInst(Args[0], PtrTy, makeNameUnique("va"), CurBB);
1376 return new CallInst(Func, &Args[0], Args.size());
1377 } else if (Name == "llvm.va_copy") {
1378 if (Args.size() != 2)
1379 error("Invalid prototype for " + Name + " prototype");
1380 Params.push_back(PtrTy);
1381 Params.push_back(PtrTy);
1382 const FunctionType *FTy = FunctionType::get(Type::VoidTy, Params, false);
1383 const PointerType *PFTy = PointerType::get(FTy);
1384 Value* Func = getVal(PFTy, ID);
1385 std::string InstName0(makeNameUnique("va0"));
1386 std::string InstName1(makeNameUnique("va1"));
1387 Args[0] = new BitCastInst(Args[0], PtrTy, InstName0, CurBB);
1388 Args[1] = new BitCastInst(Args[1], PtrTy, InstName1, CurBB);
1389 return new CallInst(Func, &Args[0], Args.size());
1395 const Type* upgradeGEPIndices(const Type* PTy,
1396 std::vector<ValueInfo> *Indices,
1397 std::vector<Value*> &VIndices,
1398 std::vector<Constant*> *CIndices = 0) {
1399 // Traverse the indices with a gep_type_iterator so we can build the list
1400 // of constant and value indices for use later. Also perform upgrades
1402 if (CIndices) CIndices->clear();
1403 for (unsigned i = 0, e = Indices->size(); i != e; ++i)
1404 VIndices.push_back((*Indices)[i].V);
1405 generic_gep_type_iterator<std::vector<Value*>::iterator>
1406 GTI = gep_type_begin(PTy, VIndices.begin(), VIndices.end()),
1407 GTE = gep_type_end(PTy, VIndices.begin(), VIndices.end());
1408 for (unsigned i = 0, e = Indices->size(); i != e && GTI != GTE; ++i, ++GTI) {
1409 Value *Index = VIndices[i];
1410 if (CIndices && !isa<Constant>(Index))
1411 error("Indices to constant getelementptr must be constants");
1412 // LLVM 1.2 and earlier used ubyte struct indices. Convert any ubyte
1413 // struct indices to i32 struct indices with ZExt for compatibility.
1414 else if (isa<StructType>(*GTI)) { // Only change struct indices
1415 if (ConstantInt *CUI = dyn_cast<ConstantInt>(Index))
1416 if (CUI->getType()->getBitWidth() == 8)
1418 ConstantExpr::getCast(Instruction::ZExt, CUI, Type::Int32Ty);
1420 // Make sure that unsigned SequentialType indices are zext'd to
1421 // 64-bits if they were smaller than that because LLVM 2.0 will sext
1422 // all indices for SequentialType elements. We must retain the same
1423 // semantic (zext) for unsigned types.
1424 if (const IntegerType *Ity = dyn_cast<IntegerType>(Index->getType()))
1425 if (Ity->getBitWidth() < 64 && (*Indices)[i].S == Unsigned) {
1427 Index = ConstantExpr::getCast(Instruction::ZExt,
1428 cast<Constant>(Index), Type::Int64Ty);
1430 Index = CastInst::create(Instruction::ZExt, Index, Type::Int64Ty,
1431 makeNameUnique("gep"), CurBB);
1432 VIndices[i] = Index;
1435 // Add to the CIndices list, if requested.
1437 CIndices->push_back(cast<Constant>(Index));
1441 GetElementPtrInst::getIndexedType(PTy, &VIndices[0], VIndices.size(), true);
1443 error("Index list invalid for constant getelementptr");
1447 unsigned upgradeCallingConv(unsigned CC) {
1449 case OldCallingConv::C : return CallingConv::C;
1450 case OldCallingConv::CSRet : return CallingConv::C;
1451 case OldCallingConv::Fast : return CallingConv::Fast;
1452 case OldCallingConv::Cold : return CallingConv::Cold;
1453 case OldCallingConv::X86_StdCall : return CallingConv::X86_StdCall;
1454 case OldCallingConv::X86_FastCall: return CallingConv::X86_FastCall;
1460 Module* UpgradeAssembly(const std::string &infile, std::istream& in,
1461 bool debug, bool addAttrs)
1464 CurFilename = infile;
1467 AddAttributes = addAttrs;
1468 ObsoleteVarArgs = false;
1471 CurModule.CurrentModule = new Module(CurFilename);
1473 // Check to make sure the parser succeeded
1476 delete ParserResult;
1477 std::cerr << "llvm-upgrade: parse failed.\n";
1481 // Check to make sure that parsing produced a result
1482 if (!ParserResult) {
1483 std::cerr << "llvm-upgrade: no parse result.\n";
1487 // Reset ParserResult variable while saving its value for the result.
1488 Module *Result = ParserResult;
1491 //Not all functions use vaarg, so make a second check for ObsoleteVarArgs
1494 if ((F = Result->getFunction("llvm.va_start"))
1495 && F->getFunctionType()->getNumParams() == 0)
1496 ObsoleteVarArgs = true;
1497 if((F = Result->getFunction("llvm.va_copy"))
1498 && F->getFunctionType()->getNumParams() == 1)
1499 ObsoleteVarArgs = true;
1502 if (ObsoleteVarArgs && NewVarArgs) {
1503 error("This file is corrupt: it uses both new and old style varargs");
1507 if(ObsoleteVarArgs) {
1508 if(Function* F = Result->getFunction("llvm.va_start")) {
1509 if (F->arg_size() != 0) {
1510 error("Obsolete va_start takes 0 argument");
1516 //bar = alloca typeof(foo)
1520 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1521 const Type* ArgTy = F->getFunctionType()->getReturnType();
1522 const Type* ArgTyPtr = PointerType::get(ArgTy);
1523 Function* NF = cast<Function>(Result->getOrInsertFunction(
1524 "llvm.va_start", RetTy, ArgTyPtr, (Type *)0));
1526 while (!F->use_empty()) {
1527 CallInst* CI = cast<CallInst>(F->use_back());
1528 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vastart.fix.1", CI);
1529 new CallInst(NF, bar, "", CI);
1530 Value* foo = new LoadInst(bar, "vastart.fix.2", CI);
1531 CI->replaceAllUsesWith(foo);
1532 CI->getParent()->getInstList().erase(CI);
1534 Result->getFunctionList().erase(F);
1537 if(Function* F = Result->getFunction("llvm.va_end")) {
1538 if(F->arg_size() != 1) {
1539 error("Obsolete va_end takes 1 argument");
1545 //bar = alloca 1 of typeof(foo)
1547 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1548 const Type* ArgTy = F->getFunctionType()->getParamType(0);
1549 const Type* ArgTyPtr = PointerType::get(ArgTy);
1550 Function* NF = cast<Function>(Result->getOrInsertFunction(
1551 "llvm.va_end", RetTy, ArgTyPtr, (Type *)0));
1553 while (!F->use_empty()) {
1554 CallInst* CI = cast<CallInst>(F->use_back());
1555 AllocaInst* bar = new AllocaInst(ArgTy, 0, "vaend.fix.1", CI);
1556 new StoreInst(CI->getOperand(1), bar, CI);
1557 new CallInst(NF, bar, "", CI);
1558 CI->getParent()->getInstList().erase(CI);
1560 Result->getFunctionList().erase(F);
1563 if(Function* F = Result->getFunction("llvm.va_copy")) {
1564 if(F->arg_size() != 1) {
1565 error("Obsolete va_copy takes 1 argument");
1570 //a = alloca 1 of typeof(foo)
1571 //b = alloca 1 of typeof(foo)
1576 const Type* RetTy = Type::getPrimitiveType(Type::VoidTyID);
1577 const Type* ArgTy = F->getFunctionType()->getReturnType();
1578 const Type* ArgTyPtr = PointerType::get(ArgTy);
1579 Function* NF = cast<Function>(Result->getOrInsertFunction(
1580 "llvm.va_copy", RetTy, ArgTyPtr, ArgTyPtr, (Type *)0));
1582 while (!F->use_empty()) {
1583 CallInst* CI = cast<CallInst>(F->use_back());
1584 AllocaInst* a = new AllocaInst(ArgTy, 0, "vacopy.fix.1", CI);
1585 AllocaInst* b = new AllocaInst(ArgTy, 0, "vacopy.fix.2", CI);
1586 new StoreInst(CI->getOperand(1), b, CI);
1587 new CallInst(NF, a, b, "", CI);
1588 Value* foo = new LoadInst(a, "vacopy.fix.3", CI);
1589 CI->replaceAllUsesWith(foo);
1590 CI->getParent()->getInstList().erase(CI);
1592 Result->getFunctionList().erase(F);
1599 } // end llvm namespace
1601 using namespace llvm;
1604 #line 1454 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
1606 llvm::Module *ModuleVal;
1607 llvm::Function *FunctionVal;
1608 std::pair<llvm::PATypeInfo, char*> *ArgVal;
1609 llvm::BasicBlock *BasicBlockVal;
1610 llvm::TerminatorInst *TermInstVal;
1611 llvm::InstrInfo InstVal;
1612 llvm::ConstInfo ConstVal;
1613 llvm::ValueInfo ValueVal;
1614 llvm::PATypeInfo TypeVal;
1615 llvm::TypeInfo PrimType;
1616 llvm::PHIListInfo PHIList;
1617 std::list<llvm::PATypeInfo> *TypeList;
1618 std::vector<llvm::ValueInfo> *ValueList;
1619 std::vector<llvm::ConstInfo> *ConstVector;
1622 std::vector<std::pair<llvm::PATypeInfo,char*> > *ArgList;
1623 // Represent the RHS of PHI node
1624 std::vector<std::pair<llvm::Constant*, llvm::BasicBlock*> > *JumpTable;
1626 llvm::GlobalValue::LinkageTypes Linkage;
1634 char *StrVal; // This memory is strdup'd!
1635 llvm::ValID ValIDVal; // strdup'd memory maybe!
1637 llvm::BinaryOps BinaryOpVal;
1638 llvm::TermOps TermOpVal;
1639 llvm::MemoryOps MemOpVal;
1640 llvm::OtherOps OtherOpVal;
1641 llvm::CastOps CastOpVal;
1642 llvm::ICmpInst::Predicate IPred;
1643 llvm::FCmpInst::Predicate FPred;
1644 llvm::Module::Endianness Endianness;
1657 #define YYFLAG -32768
1658 #define YYNTBASE 166
1660 #define YYTRANSLATE(x) ((unsigned)(x) <= 405 ? yytranslate[x] : 245)
1662 static const short yytranslate[] = { 0,
1663 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1664 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1665 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1666 2, 2, 2, 2, 2, 2, 2, 2, 2, 155,
1667 156, 164, 2, 153, 2, 2, 2, 2, 2, 2,
1668 2, 2, 2, 2, 2, 2, 2, 2, 2, 160,
1669 152, 161, 2, 2, 2, 2, 2, 2, 2, 2,
1670 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1671 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1672 157, 154, 159, 2, 2, 2, 2, 2, 165, 2,
1673 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1674 2, 2, 2, 2, 2, 2, 2, 2, 2, 158,
1675 2, 2, 162, 2, 163, 2, 2, 2, 2, 2,
1676 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1677 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1678 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1679 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1680 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1681 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1682 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1683 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1684 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1685 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1686 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1687 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1688 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
1689 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
1690 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
1691 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
1692 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
1693 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
1694 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
1695 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
1696 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
1697 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
1698 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
1699 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
1700 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
1701 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
1702 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
1703 147, 148, 149, 150, 151
1707 static const short yyprhs[] = { 0,
1708 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
1709 20, 22, 24, 26, 28, 30, 32, 34, 36, 38,
1710 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
1711 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
1712 80, 82, 84, 86, 88, 90, 92, 94, 96, 98,
1713 100, 102, 104, 106, 108, 110, 112, 114, 116, 118,
1714 120, 122, 124, 126, 128, 130, 132, 134, 136, 138,
1715 140, 142, 144, 146, 148, 150, 152, 154, 156, 158,
1716 161, 162, 164, 166, 168, 170, 172, 174, 176, 177,
1717 178, 180, 182, 184, 186, 188, 190, 193, 194, 197,
1718 198, 202, 205, 206, 208, 209, 213, 215, 218, 220,
1719 222, 224, 226, 228, 230, 232, 234, 236, 238, 240,
1720 242, 244, 246, 248, 250, 252, 254, 256, 258, 261,
1721 266, 272, 278, 282, 285, 291, 296, 299, 301, 305,
1722 307, 311, 313, 314, 319, 323, 327, 332, 337, 341,
1723 348, 354, 357, 360, 363, 366, 369, 372, 375, 378,
1724 381, 384, 391, 397, 406, 413, 420, 427, 435, 443,
1725 450, 457, 466, 475, 479, 481, 483, 485, 487, 490,
1726 493, 498, 501, 503, 508, 511, 516, 517, 525, 526,
1727 534, 535, 543, 544, 552, 556, 561, 562, 564, 566,
1728 568, 572, 576, 580, 584, 588, 592, 594, 595, 597,
1729 599, 601, 602, 605, 609, 611, 613, 617, 619, 620,
1730 629, 631, 633, 637, 639, 641, 644, 645, 647, 649,
1731 650, 651, 657, 658, 660, 662, 664, 666, 668, 670,
1732 672, 674, 676, 680, 682, 688, 690, 692, 694, 696,
1733 699, 702, 705, 709, 712, 713, 715, 717, 719, 722,
1734 725, 729, 739, 749, 758, 772, 774, 776, 783, 789,
1735 792, 799, 807, 809, 813, 815, 816, 819, 821, 827,
1736 833, 839, 846, 853, 856, 861, 866, 873, 878, 883,
1737 888, 893, 900, 907, 910, 918, 920, 923, 924, 926,
1738 927, 931, 938, 942, 949, 952, 957, 964
1741 static const short yyrhs[] = { 5,
1742 0, 6, 0, 3, 0, 4, 0, 79, 0, 80,
1743 0, 81, 0, 82, 0, 83, 0, 84, 0, 85,
1744 0, 86, 0, 87, 0, 88, 0, 89, 0, 90,
1745 0, 91, 0, 92, 0, 97, 0, 98, 0, 99,
1746 0, 100, 0, 101, 0, 102, 0, 119, 0, 120,
1747 0, 121, 0, 122, 0, 123, 0, 124, 0, 125,
1748 0, 126, 0, 127, 0, 128, 0, 129, 0, 130,
1749 0, 131, 0, 132, 0, 133, 0, 134, 0, 135,
1750 0, 136, 0, 137, 0, 138, 0, 125, 0, 126,
1751 0, 127, 0, 128, 0, 27, 0, 28, 0, 93,
1752 0, 94, 0, 95, 0, 96, 0, 140, 0, 141,
1753 0, 142, 0, 143, 0, 144, 0, 145, 0, 146,
1754 0, 147, 0, 148, 0, 149, 0, 150, 0, 151,
1755 0, 139, 0, 16, 0, 14, 0, 12, 0, 10,
1756 0, 17, 0, 15, 0, 13, 0, 11, 0, 175,
1757 0, 176, 0, 18, 0, 19, 0, 211, 152, 0,
1758 0, 41, 0, 42, 0, 43, 0, 44, 0, 45,
1759 0, 46, 0, 47, 0, 0, 0, 65, 0, 66,
1760 0, 67, 0, 68, 0, 69, 0, 70, 0, 64,
1761 4, 0, 0, 57, 4, 0, 0, 153, 57, 4,
1762 0, 34, 24, 0, 0, 184, 0, 0, 153, 187,
1763 186, 0, 184, 0, 57, 4, 0, 190, 0, 8,
1764 0, 192, 0, 8, 0, 192, 0, 9, 0, 10,
1765 0, 11, 0, 12, 0, 13, 0, 14, 0, 15,
1766 0, 16, 0, 17, 0, 18, 0, 19, 0, 21,
1767 0, 191, 0, 48, 0, 227, 0, 154, 4, 0,
1768 189, 155, 194, 156, 0, 157, 4, 158, 192, 159,
1769 0, 160, 4, 158, 192, 161, 0, 162, 193, 163,
1770 0, 162, 163, 0, 160, 162, 193, 163, 161, 0,
1771 160, 162, 163, 161, 0, 192, 164, 0, 192, 0,
1772 193, 153, 192, 0, 193, 0, 193, 153, 37, 0,
1773 37, 0, 0, 190, 157, 197, 159, 0, 190, 157,
1774 159, 0, 190, 165, 24, 0, 190, 160, 197, 161,
1775 0, 190, 162, 197, 163, 0, 190, 162, 163, 0,
1776 190, 160, 162, 197, 163, 161, 0, 190, 160, 162,
1777 163, 161, 0, 190, 38, 0, 190, 39, 0, 190,
1778 227, 0, 190, 196, 0, 190, 26, 0, 175, 167,
1779 0, 176, 4, 0, 9, 27, 0, 9, 28, 0,
1780 178, 7, 0, 174, 155, 195, 36, 190, 156, 0,
1781 110, 155, 195, 242, 156, 0, 112, 155, 195, 153,
1782 195, 153, 195, 156, 0, 168, 155, 195, 153, 195,
1783 156, 0, 169, 155, 195, 153, 195, 156, 0, 170,
1784 155, 195, 153, 195, 156, 0, 103, 171, 155, 195,
1785 153, 195, 156, 0, 104, 172, 155, 195, 153, 195,
1786 156, 0, 173, 155, 195, 153, 195, 156, 0, 114,
1787 155, 195, 153, 195, 156, 0, 115, 155, 195, 153,
1788 195, 153, 195, 156, 0, 116, 155, 195, 153, 195,
1789 153, 195, 156, 0, 197, 153, 195, 0, 195, 0,
1790 32, 0, 33, 0, 200, 0, 200, 220, 0, 200,
1791 222, 0, 200, 62, 61, 206, 0, 200, 25, 0,
1792 201, 0, 201, 179, 20, 188, 0, 201, 222, 0,
1793 201, 62, 61, 206, 0, 0, 201, 179, 180, 198,
1794 195, 202, 186, 0, 0, 201, 179, 50, 198, 190,
1795 203, 186, 0, 0, 201, 179, 45, 198, 190, 204,
1796 186, 0, 0, 201, 179, 47, 198, 190, 205, 186,
1797 0, 201, 51, 208, 0, 201, 58, 152, 209, 0,
1798 0, 24, 0, 56, 0, 55, 0, 53, 152, 207,
1799 0, 54, 152, 4, 0, 52, 152, 24, 0, 71,
1800 152, 24, 0, 157, 210, 159, 0, 210, 153, 24,
1801 0, 24, 0, 0, 22, 0, 24, 0, 211, 0,
1802 0, 190, 212, 0, 214, 153, 213, 0, 213, 0,
1803 214, 0, 214, 153, 37, 0, 37, 0, 0, 181,
1804 188, 211, 155, 215, 156, 185, 182, 0, 29, 0,
1805 162, 0, 180, 216, 217, 0, 30, 0, 163, 0,
1806 230, 219, 0, 0, 45, 0, 47, 0, 0, 0,
1807 31, 223, 221, 224, 216, 0, 0, 63, 0, 3,
1808 0, 4, 0, 7, 0, 27, 0, 28, 0, 38,
1809 0, 39, 0, 26, 0, 160, 197, 161, 0, 196,
1810 0, 61, 225, 24, 153, 24, 0, 166, 0, 211,
1811 0, 227, 0, 226, 0, 190, 228, 0, 230, 231,
1812 0, 218, 231, 0, 232, 179, 234, 0, 232, 236,
1813 0, 0, 23, 0, 77, 0, 78, 0, 72, 229,
1814 0, 72, 8, 0, 73, 21, 228, 0, 73, 9,
1815 228, 153, 21, 228, 153, 21, 228, 0, 74, 177,
1816 228, 153, 21, 228, 157, 235, 159, 0, 74, 177,
1817 228, 153, 21, 228, 157, 159, 0, 75, 181, 188,
1818 228, 155, 239, 156, 36, 21, 228, 233, 21, 228,
1819 0, 233, 0, 76, 0, 235, 177, 226, 153, 21,
1820 228, 0, 177, 226, 153, 21, 228, 0, 179, 241,
1821 0, 190, 157, 228, 153, 228, 159, 0, 237, 153,
1822 157, 228, 153, 228, 159, 0, 229, 0, 238, 153,
1823 229, 0, 238, 0, 0, 60, 59, 0, 59, 0,
1824 168, 190, 228, 153, 228, 0, 169, 190, 228, 153,
1825 228, 0, 170, 190, 228, 153, 228, 0, 103, 171,
1826 190, 228, 153, 228, 0, 104, 172, 190, 228, 153,
1827 228, 0, 49, 229, 0, 173, 229, 153, 229, 0,
1828 174, 229, 36, 190, 0, 112, 229, 153, 229, 153,
1829 229, 0, 113, 229, 153, 190, 0, 117, 229, 153,
1830 190, 0, 118, 229, 153, 190, 0, 114, 229, 153,
1831 229, 0, 115, 229, 153, 229, 153, 229, 0, 116,
1832 229, 153, 229, 153, 229, 0, 111, 237, 0, 240,
1833 181, 188, 228, 155, 239, 156, 0, 244, 0, 153,
1834 238, 0, 0, 35, 0, 0, 105, 190, 183, 0,
1835 105, 190, 153, 15, 228, 183, 0, 106, 190, 183,
1836 0, 106, 190, 153, 15, 228, 183, 0, 107, 229,
1837 0, 243, 108, 190, 228, 0, 243, 109, 229, 153,
1838 190, 228, 0, 110, 190, 228, 242, 0
1844 static const short yyrline[] = { 0,
1845 1594, 1595, 1603, 1604, 1614, 1614, 1614, 1614, 1614, 1614,
1846 1614, 1614, 1614, 1614, 1614, 1618, 1618, 1618, 1622, 1622,
1847 1622, 1622, 1622, 1622, 1626, 1626, 1627, 1627, 1628, 1628,
1848 1629, 1629, 1630, 1630, 1634, 1634, 1635, 1635, 1636, 1636,
1849 1637, 1637, 1638, 1638, 1639, 1639, 1640, 1640, 1641, 1642,
1850 1645, 1645, 1645, 1645, 1649, 1649, 1649, 1649, 1649, 1649,
1851 1649, 1650, 1650, 1650, 1650, 1650, 1650, 1656, 1656, 1656,
1852 1656, 1660, 1660, 1660, 1660, 1664, 1664, 1668, 1668, 1673,
1853 1676, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1692,
1854 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1709, 1710, 1718,
1855 1719, 1727, 1736, 1737, 1744, 1745, 1749, 1753, 1769, 1770,
1856 1777, 1778, 1785, 1793, 1793, 1793, 1793, 1793, 1793, 1793,
1857 1794, 1794, 1794, 1794, 1794, 1799, 1803, 1807, 1812, 1821,
1858 1838, 1844, 1857, 1866, 1870, 1881, 1885, 1898, 1902, 1909,
1859 1910, 1916, 1923, 1935, 1965, 1978, 2001, 2029, 2051, 2062,
1860 2084, 2095, 2104, 2109, 2167, 2174, 2182, 2189, 2196, 2200,
1861 2204, 2213, 2228, 2241, 2250, 2278, 2291, 2300, 2306, 2312,
1862 2323, 2329, 2335, 2346, 2347, 2356, 2357, 2369, 2378, 2379,
1863 2380, 2381, 2382, 2398, 2418, 2420, 2422, 2426, 2429, 2433,
1864 2436, 2440, 2443, 2448, 2451, 2453, 2455, 2460, 2474, 2475,
1865 2479, 2482, 2490, 2494, 2501, 2505, 2509, 2513, 2521, 2521,
1866 2525, 2526, 2530, 2538, 2543, 2551, 2552, 2559, 2566, 2570,
1867 2746, 2746, 2750, 2760, 2760, 2764, 2769, 2770, 2771, 2775,
1868 2776, 2776, 2788, 2789, 2794, 2795, 2796, 2797, 2798, 2799,
1869 2800, 2801, 2802, 2823, 2826, 2841, 2842, 2847, 2847, 2855,
1870 2864, 2867, 2876, 2886, 2891, 2900, 2911, 2911, 2914, 2917,
1871 2920, 2924, 2930, 2945, 2951, 3007, 3010, 3016, 3026, 3039,
1872 3068, 3076, 3084, 3088, 3095, 3096, 3100, 3103, 3109, 3126,
1873 3142, 3156, 3168, 3180, 3191, 3209, 3218, 3227, 3234, 3255,
1874 3279, 3285, 3291, 3297, 3313, 3391, 3399, 3400, 3404, 3405,
1875 3409, 3415, 3421, 3427, 3433, 3440, 3452, 3477
1880 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
1882 static const char * const yytname[] = { "$","error","$undefined.","ESINT64VAL",
1883 "EUINT64VAL","SINTVAL","UINTVAL","FPVAL","VOID","BOOL","SBYTE","UBYTE","SHORT",
1884 "USHORT","INT","UINT","LONG","ULONG","FLOAT","DOUBLE","TYPE","LABEL","VAR_ID",
1885 "LABELSTR","STRINGCONSTANT","IMPLEMENTATION","ZEROINITIALIZER","TRUETOK","FALSETOK",
1886 "BEGINTOK","ENDTOK","DECLARE","GLOBAL","CONSTANT","SECTION","VOLATILE","TO",
1887 "DOTDOTDOT","NULL_TOK","UNDEF","CONST","INTERNAL","LINKONCE","WEAK","APPENDING",
1888 "DLLIMPORT","DLLEXPORT","EXTERN_WEAK","OPAQUE","NOT","EXTERNAL","TARGET","TRIPLE",
1889 "ENDIAN","POINTERSIZE","LITTLE","BIG","ALIGN","DEPLIBS","CALL","TAIL","ASM_TOK",
1890 "MODULE","SIDEEFFECT","CC_TOK","CCC_TOK","CSRETCC_TOK","FASTCC_TOK","COLDCC_TOK",
1891 "X86_STDCALLCC_TOK","X86_FASTCALLCC_TOK","DATALAYOUT","RET","BR","SWITCH","INVOKE",
1892 "UNREACHABLE","UNWIND","EXCEPT","ADD","SUB","MUL","DIV","UDIV","SDIV","FDIV",
1893 "REM","UREM","SREM","FREM","AND","OR","XOR","SHL","SHR","ASHR","LSHR","SETLE",
1894 "SETGE","SETLT","SETGT","SETEQ","SETNE","ICMP","FCMP","MALLOC","ALLOCA","FREE",
1895 "LOAD","STORE","GETELEMENTPTR","PHI_TOK","SELECT","VAARG","EXTRACTELEMENT","INSERTELEMENT",
1896 "SHUFFLEVECTOR","VAARG_old","VANEXT_old","EQ","NE","SLT","SGT","SLE","SGE","ULT",
1897 "UGT","ULE","UGE","OEQ","ONE","OLT","OGT","OLE","OGE","ORD","UNO","UEQ","UNE",
1898 "CAST","TRUNC","ZEXT","SEXT","FPTRUNC","FPEXT","FPTOUI","FPTOSI","UITOFP","SITOFP",
1899 "PTRTOINT","INTTOPTR","BITCAST","'='","','","'\\\\'","'('","')'","'['","'x'",
1900 "']'","'<'","'>'","'{'","'}'","'*'","'c'","INTVAL","EINT64VAL","ArithmeticOps",
1901 "LogicalOps","SetCondOps","IPredicates","FPredicates","ShiftOps","CastOps","SIntType",
1902 "UIntType","IntType","FPType","OptAssign","OptLinkage","OptCallingConv","OptAlign",
1903 "OptCAlign","SectionString","OptSection","GlobalVarAttributes","GlobalVarAttribute",
1904 "TypesV","UpRTypesV","Types","PrimType","UpRTypes","TypeListI","ArgTypeListI",
1905 "ConstVal","ConstExpr","ConstVector","GlobalType","Module","FunctionList","ConstPool",
1906 "@1","@2","@3","@4","AsmBlock","BigOrLittle","TargetDefinition","LibrariesDefinition",
1907 "LibList","Name","OptName","ArgVal","ArgListH","ArgList","FunctionHeaderH","BEGIN",
1908 "FunctionHeader","END","Function","FnDeclareLinkage","FunctionProto","@5","@6",
1909 "OptSideEffect","ConstValueRef","SymbolicValueRef","ValueRef","ResolvedVal",
1910 "BasicBlockList","BasicBlock","InstructionList","Unwind","BBTerminatorInst",
1911 "JumpTable","Inst","PHIList","ValueRefList","ValueRefListE","OptTailCall","InstVal",
1912 "IndexList","OptVolatile","MemoryInst", NULL
1916 static const short yyr1[] = { 0,
1917 166, 166, 167, 167, 168, 168, 168, 168, 168, 168,
1918 168, 168, 168, 168, 168, 169, 169, 169, 170, 170,
1919 170, 170, 170, 170, 171, 171, 171, 171, 171, 171,
1920 171, 171, 171, 171, 172, 172, 172, 172, 172, 172,
1921 172, 172, 172, 172, 172, 172, 172, 172, 172, 172,
1922 173, 173, 173, 173, 174, 174, 174, 174, 174, 174,
1923 174, 174, 174, 174, 174, 174, 174, 175, 175, 175,
1924 175, 176, 176, 176, 176, 177, 177, 178, 178, 179,
1925 179, 180, 180, 180, 180, 180, 180, 180, 180, 181,
1926 181, 181, 181, 181, 181, 181, 181, 182, 182, 183,
1927 183, 184, 185, 185, 186, 186, 187, 187, 188, 188,
1928 189, 189, 190, 191, 191, 191, 191, 191, 191, 191,
1929 191, 191, 191, 191, 191, 192, 192, 192, 192, 192,
1930 192, 192, 192, 192, 192, 192, 192, 193, 193, 194,
1931 194, 194, 194, 195, 195, 195, 195, 195, 195, 195,
1932 195, 195, 195, 195, 195, 195, 195, 195, 195, 195,
1933 195, 196, 196, 196, 196, 196, 196, 196, 196, 196,
1934 196, 196, 196, 197, 197, 198, 198, 199, 200, 200,
1935 200, 200, 200, 201, 201, 201, 202, 201, 203, 201,
1936 204, 201, 205, 201, 201, 201, 201, 206, 207, 207,
1937 208, 208, 208, 208, 209, 210, 210, 210, 211, 211,
1938 212, 212, 213, 214, 214, 215, 215, 215, 215, 216,
1939 217, 217, 218, 219, 219, 220, 221, 221, 221, 223,
1940 224, 222, 225, 225, 226, 226, 226, 226, 226, 226,
1941 226, 226, 226, 226, 226, 227, 227, 228, 228, 229,
1942 230, 230, 231, 232, 232, 232, 233, 233, 234, 234,
1943 234, 234, 234, 234, 234, 234, 234, 235, 235, 236,
1944 237, 237, 238, 238, 239, 239, 240, 240, 241, 241,
1945 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
1946 241, 241, 241, 241, 241, 241, 242, 242, 243, 243,
1947 244, 244, 244, 244, 244, 244, 244, 244
1950 static const short yyr2[] = { 0,
1951 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1952 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1953 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1954 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1955 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1956 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1957 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1958 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1959 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1960 1, 1, 1, 1, 1, 1, 2, 0, 2, 0,
1961 3, 2, 0, 1, 0, 3, 1, 2, 1, 1,
1962 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1963 1, 1, 1, 1, 1, 1, 1, 1, 2, 4,
1964 5, 5, 3, 2, 5, 4, 2, 1, 3, 1,
1965 3, 1, 0, 4, 3, 3, 4, 4, 3, 6,
1966 5, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1967 2, 6, 5, 8, 6, 6, 6, 7, 7, 6,
1968 6, 8, 8, 3, 1, 1, 1, 1, 2, 2,
1969 4, 2, 1, 4, 2, 4, 0, 7, 0, 7,
1970 0, 7, 0, 7, 3, 4, 0, 1, 1, 1,
1971 3, 3, 3, 3, 3, 3, 1, 0, 1, 1,
1972 1, 0, 2, 3, 1, 1, 3, 1, 0, 8,
1973 1, 1, 3, 1, 1, 2, 0, 1, 1, 0,
1974 0, 5, 0, 1, 1, 1, 1, 1, 1, 1,
1975 1, 1, 3, 1, 5, 1, 1, 1, 1, 2,
1976 2, 2, 3, 2, 0, 1, 1, 1, 2, 2,
1977 3, 9, 9, 8, 13, 1, 1, 6, 5, 2,
1978 6, 7, 1, 3, 1, 0, 2, 1, 5, 5,
1979 5, 6, 6, 2, 4, 4, 6, 4, 4, 4,
1980 4, 6, 6, 2, 7, 1, 2, 0, 1, 0,
1981 3, 6, 3, 6, 2, 4, 6, 4
1984 static const short yydefact[] = { 197,
1985 89, 183, 182, 230, 82, 83, 84, 85, 86, 87,
1986 88, 0, 90, 255, 179, 180, 255, 209, 210, 0,
1987 0, 0, 89, 0, 185, 227, 0, 0, 91, 92,
1988 93, 94, 95, 96, 0, 0, 256, 252, 81, 224,
1989 225, 226, 251, 0, 0, 0, 0, 195, 0, 0,
1990 0, 0, 0, 0, 0, 80, 228, 229, 231, 198,
1991 181, 97, 1, 2, 110, 114, 115, 116, 117, 118,
1992 119, 120, 121, 122, 123, 124, 125, 127, 0, 0,
1993 0, 0, 246, 0, 0, 109, 126, 113, 247, 128,
1994 221, 222, 223, 300, 254, 0, 0, 0, 0, 208,
1995 196, 186, 184, 176, 177, 0, 0, 0, 0, 90,
1996 129, 0, 0, 0, 112, 134, 138, 0, 0, 143,
1997 137, 299, 0, 278, 0, 0, 0, 0, 90, 267,
1998 257, 258, 5, 6, 7, 8, 9, 10, 11, 12,
1999 13, 14, 15, 16, 17, 18, 51, 52, 53, 54,
2000 19, 20, 21, 22, 23, 24, 0, 0, 0, 0,
2001 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2002 67, 55, 56, 57, 58, 59, 60, 61, 62, 63,
2003 64, 65, 66, 0, 0, 0, 0, 0, 266, 253,
2004 90, 270, 0, 296, 203, 200, 199, 201, 202, 204,
2005 207, 0, 191, 193, 189, 114, 115, 116, 117, 118,
2006 119, 120, 121, 122, 123, 124, 0, 0, 0, 0,
2007 187, 232, 0, 0, 0, 0, 0, 133, 219, 142,
2008 140, 0, 0, 284, 277, 260, 259, 0, 0, 71,
2009 75, 70, 74, 69, 73, 68, 72, 76, 77, 0,
2010 0, 25, 26, 27, 28, 29, 30, 31, 32, 33,
2011 34, 0, 49, 50, 45, 46, 47, 48, 35, 36,
2012 37, 38, 39, 40, 41, 42, 43, 44, 0, 100,
2013 100, 305, 0, 0, 294, 0, 0, 0, 0, 0,
2014 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2015 0, 205, 105, 105, 105, 159, 160, 3, 4, 157,
2016 158, 161, 156, 152, 153, 0, 0, 0, 0, 0,
2017 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2018 0, 155, 154, 105, 111, 111, 136, 0, 139, 218,
2019 212, 215, 216, 0, 0, 130, 235, 236, 237, 242,
2020 238, 239, 240, 241, 233, 0, 244, 249, 248, 250,
2021 0, 261, 0, 0, 0, 0, 0, 301, 0, 303,
2022 298, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2023 0, 0, 0, 0, 0, 0, 0, 0, 206, 0,
2024 192, 194, 190, 0, 0, 0, 0, 0, 0, 0,
2025 145, 175, 0, 0, 0, 149, 0, 146, 0, 0,
2026 0, 0, 0, 188, 131, 132, 135, 211, 213, 0,
2027 103, 141, 234, 0, 0, 0, 0, 0, 0, 0,
2028 0, 0, 0, 0, 308, 0, 0, 0, 288, 291,
2029 0, 0, 289, 290, 0, 0, 0, 285, 286, 0,
2030 306, 0, 0, 0, 107, 105, 0, 0, 298, 0,
2031 0, 0, 0, 0, 144, 134, 113, 0, 147, 148,
2032 0, 0, 0, 0, 0, 217, 214, 104, 98, 0,
2033 243, 0, 0, 276, 0, 0, 100, 101, 100, 273,
2034 297, 0, 0, 0, 0, 0, 279, 280, 281, 276,
2035 0, 102, 108, 106, 0, 0, 0, 0, 0, 0,
2036 0, 174, 151, 0, 0, 0, 0, 0, 0, 0,
2037 220, 0, 0, 0, 275, 0, 282, 283, 0, 302,
2038 304, 0, 0, 0, 287, 292, 293, 0, 307, 0,
2039 0, 163, 0, 0, 0, 0, 150, 0, 0, 0,
2040 0, 0, 99, 245, 0, 0, 0, 274, 271, 0,
2041 295, 0, 0, 0, 171, 0, 0, 165, 166, 167,
2042 170, 162, 0, 264, 0, 0, 0, 272, 168, 169,
2043 0, 0, 0, 262, 0, 263, 0, 0, 164, 172,
2044 173, 0, 0, 0, 0, 0, 0, 269, 0, 0,
2048 static const short yydefgoto[] = { 83,
2049 310, 327, 328, 329, 262, 279, 330, 331, 217, 218,
2050 250, 219, 23, 13, 35, 521, 368, 455, 479, 391,
2051 456, 84, 85, 220, 87, 88, 118, 232, 402, 357,
2052 403, 106, 603, 1, 2, 334, 305, 303, 304, 61,
2053 198, 48, 101, 202, 89, 419, 342, 343, 344, 36,
2054 93, 14, 42, 15, 59, 16, 26, 110, 424, 358,
2055 90, 360, 490, 17, 38, 39, 189, 190, 576, 95,
2056 285, 525, 526, 191, 192, 435, 193, 194
2059 static const short yypact[] = {-32768,
2060 58, 247,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2061 -32768, -44, 181, 69,-32768,-32768, 10,-32768,-32768, 16,
2062 -116, 34, 65, -38,-32768, 112, 118, 144,-32768,-32768,
2063 -32768,-32768,-32768,-32768, 1357, -19,-32768,-32768, 39,-32768,
2064 -32768,-32768,-32768, 6, 12, 20, 23,-32768, 55, 118,
2065 1357, 86, 86, 86, 86,-32768,-32768,-32768,-32768,-32768,
2066 -32768,-32768,-32768,-32768, 36,-32768,-32768,-32768,-32768,-32768,
2067 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 210, 218,
2068 1, 171,-32768, 39, 73,-32768,-32768, -42,-32768,-32768,
2069 -32768,-32768,-32768, 1611,-32768, 215, 83, 236, 219, 233,
2070 -32768,-32768,-32768,-32768,-32768, 1418, 1418, 1418, 1459, 181,
2071 -32768, 84, 100, 737,-32768,-32768, -42, -99, 104, 803,
2072 -32768,-32768, 1418,-32768, 201, 1479, 14, 221, 181,-32768,
2073 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2074 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2075 -32768,-32768,-32768,-32768,-32768,-32768, 77, 377, 1418, 1418,
2076 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418,
2077 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2078 -32768,-32768,-32768, 1418, 1418, 1418, 1418, 1418,-32768,-32768,
2079 181,-32768, 53,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2080 -32768, -36,-32768,-32768,-32768, 140, 167, 257, 204, 262,
2081 206, 264, 214, 266, 265, 268, 217, 269, 270, 579,
2082 -32768,-32768, 1418, 1418, 115, -96, 1418,-32768, 1199,-32768,
2083 128, 126, 920,-32768,-32768, 36,-32768, 920, 920,-32768,
2084 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 920,
2085 1357,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2086 -32768, 1418,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
2087 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 1418, 130,
2088 142,-32768, 920, 139, 151, 153, 154, 155, 157, 158,
2089 164, 165, 920, 920, 920, 166, 284, 1357, 1418, 1418,
2090 297,-32768, 169, 169, 169,-32768,-32768,-32768,-32768,-32768,
2091 -32768,-32768,-32768,-32768,-32768, 77, 377, 168, 172, 174,
2092 175, 177, 1240, 1520, 757, 300, 180, 182, 183, 192,
2093 193,-32768,-32768, 169, -43, -71,-32768, 190, -42,-32768,
2094 39,-32768, 173, 202, 1260,-32768,-32768,-32768,-32768,-32768,
2095 -32768,-32768,-32768,-32768, 273, 1459,-32768,-32768,-32768,-32768,
2096 209,-32768, 212, 920, 920, 920, -4,-32768, -2,-32768,
2097 213, 920, 211, 1418, 1418, 1418, 1418, 1418, 1418, 1418,
2098 216, 222, 223, 1418, 1418, 920, 920, 226,-32768, -20,
2099 -32768,-32768,-32768, 225, 227, 1459, 1459, 1459, 1459, 1459,
2100 -32768,-32768, -13, 778, -17,-32768, -69,-32768, 1459, 1459,
2101 1459, 1459, 1459,-32768,-32768,-32768,-32768,-32768,-32768, 1301,
2102 325,-32768,-32768, 346, -16, 350, 360, 228, 231, 234,
2103 920, 382, 920, 1418,-32768, 235, 920, 237,-32768,-32768,
2104 238, 239,-32768,-32768, 920, 920, 920,-32768,-32768, 240,
2105 -32768, 1418, 365, 389,-32768, 169, 1459, 1459, 213, 241,
2106 243, 245, 248, 1459,-32768, 242, -104, -67,-32768,-32768,
2107 249, 253, 263, 272, 364,-32768,-32768,-32768, 358, 274,
2108 -32768, 920, 920, 1418, 920, 920, 276,-32768, 276,-32768,
2109 279, 920, 280, 1418, 1418, 1418,-32768,-32768,-32768, 1418,
2110 920,-32768,-32768,-32768, 281, 282, 267, 1459, 1459, 1459,
2111 1459,-32768,-32768, 278, 1459, 1459, 1459, 1459, 1418, 422,
2112 -32768, 416, 288, 285, 279, 289,-32768,-32768, 390,-32768,
2113 -32768, 1418, 287, 920,-32768,-32768,-32768, 292,-32768, 1459,
2114 1459,-32768, 299, 298, 302, 303,-32768, 301, 306, 307,
2115 308, 310,-32768,-32768, 432, 15, 435,-32768,-32768, 309,
2116 -32768, 316, 319, 1459,-32768, 1459, 1459,-32768,-32768,-32768,
2117 -32768,-32768, 920,-32768, 1046, 64, 437,-32768,-32768,-32768,
2118 326, 329, 331,-32768, 328,-32768, 1046, 920,-32768,-32768,
2119 -32768, 467, 336, 148, 920, 469, 470,-32768, 920, 920,
2120 -32768,-32768, 493, 494,-32768
2123 static const short yypgoto[] = {-32768,
2124 -32768, 401, 402, 404, 200, 203, 405, 423, -126, -125,
2125 -535,-32768, 479, 496, -109,-32768, -274, 102,-32768, -296,
2126 -32768, -45,-32768, -35,-32768, -58, 27,-32768, -97, 304,
2127 -306, 101,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 471,
2128 -32768,-32768,-32768,-32768, 13,-32768, 106,-32768,-32768, 412,
2129 -32768,-32768,-32768,-32768,-32768, 525,-32768,-32768,-32768, -553,
2130 -9, 114, -122,-32768, 511,-32768, -65,-32768,-32768,-32768,
2131 -32768, 96, 31,-32768,-32768, 74,-32768,-32768
2138 static const short yytable[] = { 86,
2139 234, 248, 249, 237, 113, 103, 370, 392, 393, 91,
2140 431, 221, 433, 453, 24, 86, 27, 405, 407, 251,
2141 575, 585, 238, 117, 240, 241, 242, 243, 244, 245,
2142 246, 247, 37, 593, 239, 49, 454, 414, 282, 40,
2143 587, 286, 287, 288, 289, 290, 291, 292, -138, 425,
2144 -111, 24, 432, 227, 432, 117, 227, -178, -138, 121,
2145 18, 117, 19, 228, 296, 297, 338, 44, 45, 46,
2146 203, 204, 205, 240, 241, 242, 243, 244, 245, 246,
2147 247, 298, 3, 464, 51, 464, 47, 233, 4, 416,
2148 233, 37, 121, 470, 50, 514, 119, 468, 5, 6,
2149 7, 8, 9, 10, 11, 5, 6, 7, 8, 52,
2150 10, 53, -111, 56, 54, 415, 301, 104, 105, 12,
2151 121, 121, 302, 280, 281, 233, 283, 284, 233, 233,
2152 233, 233, 233, 233, 233, 464, 464, 196, 197, 464,
2153 226, 60, 92, 469, 481, 465, 231, 62, 293, 294,
2154 295, 233, 233, 107, 108, 109, 57, 96, 58, 504,
2155 299, 300, 114, 97, 335, 336, 306, 307, 339, -71,
2156 -71, 98, 41, 574, 99, 63, 64, 388, 115, 66,
2157 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2158 -112, 77, 18, 341, 19, 252, 253, 254, 255, 256,
2159 257, 258, 259, 260, 261, 364, -70, -70, -69, -69,
2160 333, 100, 530, 111, 531, 86, -68, -68, 78, 308,
2161 309, 112, 586, 359, 131, 132, 365, 120, 359, 359,
2162 240, 241, 242, 243, 244, 245, 246, 247, 195, 199,
2163 359, 223, 200, 366, 28, 29, 30, 31, 32, 33,
2164 34, 438, 386, 440, 441, 442, 201, 224, 229, 235,
2165 -75, 448, 86, 387, 233, -74, -81, -73, 18, -72,
2166 19, -78, 311, 359, -79, 337, 312, 4, -81, -81,
2167 345, 346, 367, 359, 359, 359, 339, -81, -81, -81,
2168 -81, -81, -81, -81, 369, 372, -81, 20, 459, 460,
2169 461, 462, 463, 373, 21, 374, 375, 376, 22, 377,
2170 378, 471, 472, 473, 474, 475, 379, 380, 384, 385,
2171 389, 390, 396, 408, 79, 420, 397, 80, 398, 399,
2172 81, 400, 82, 116, 409, 423, 410, 411, 233, 439,
2173 233, 233, 233, 443, 444, 467, 412, 413, 233, 449,
2174 417, 361, 362, 418, 359, 359, 359, 421, 453, 505,
2175 506, 426, 359, 363, 427, 434, 512, 437, 445, 480,
2176 482, 535, 536, 537, 446, 447, 359, 359, 452, 457,
2177 483, 458, 484, 485, 341, 488, 486, 492, 502, 494,
2178 495, 496, 503, 508, 500, 509, 371, 510, 233, 519,
2179 511, 515, 513, 263, 264, 516, 381, 382, 383, 558,
2180 543, 544, 545, 546, 520, 517, 501, 548, 549, 550,
2181 551, 359, 542, 359, 518, 553, 522, 359, 529, 248,
2182 249, 532, 534, 540, 541, 359, 359, 359, 547, 554,
2183 555, 556, 562, 563, 557, 559, 432, 561, 233, 248,
2184 249, 564, 573, 565, 566, 567, 568, 588, 233, 233,
2185 233, 569, 570, 571, 233, 572, 581, 578, 582, 583,
2186 577, 579, 359, 359, 580, 359, 359, 428, 429, 430,
2187 592, 589, 359, 552, 590, 436, 591, 595, 596, 599,
2188 600, 359, 604, 605, 184, 185, 233, 186, 187, 450,
2189 451, 265, 266, 267, 268, 269, 270, 271, 272, 273,
2190 274, 275, 276, 277, 278, 394, 188, 94, 55, 395,
2191 102, 222, 478, 332, 359, 477, 25, 43, 597, 491,
2192 538, 0, 507, 0, 0, 0, 0, 0, 0, 0,
2193 0, 0, 0, 0, 487, 0, 489, 0, 0, 0,
2194 493, 0, 0, 0, 0, 0, 0, 0, 497, 498,
2195 499, 0, 0, 359, 0, 0, 0, 0, 0, 0,
2196 0, 0, 0, 0, 0, 0, 0, 0, 359, 0,
2197 0, 0, 0, 63, 64, 359, 0, 0, 0, 359,
2198 359, 0, 0, 0, 0, 523, 524, 0, 527, 528,
2199 18, 0, 19, 0, 313, 533, 0, 0, 0, 0,
2200 0, 0, 0, 0, 539, 0, 314, 315, 0, 0,
2201 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2202 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2203 0, 0, 0, 0, 0, 0, 0, 560, 0, 0,
2204 0, 0, 0, 0, 0, 0, 0, 133, 134, 135,
2205 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
2206 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
2207 156, 316, 317, 0, 0, 0, 584, 0, 318, 0,
2208 319, 0, 320, 321, 322, 0, 0, 0, 0, 0,
2209 0, 594, 0, 0, 0, 0, 0, 0, 598, 0,
2210 0, 0, 601, 602, 0, 0, 0, 171, 172, 173,
2211 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
2212 0, 0, 0, 0, 0, 323, 0, 0, 324, 0,
2213 325, 63, 64, 326, 115, 66, 67, 68, 69, 70,
2214 71, 72, 73, 74, 75, 76, 0, 77, 18, 0,
2215 19, 63, 64, 0, 115, 206, 207, 208, 209, 210,
2216 211, 212, 213, 214, 215, 216, 0, 77, 18, 0,
2217 19, 0, 63, 64, 78, 115, 206, 207, 208, 209,
2218 210, 211, 212, 213, 214, 215, 216, 0, 77, 18,
2219 0, 19, 0, 0, 78, 0, 0, 63, 64, 0,
2220 115, 66, 67, 68, 69, 70, 71, 72, 73, 74,
2221 75, 76, 0, 77, 18, 78, 19, 0, 0, 0,
2222 0, 0, 0, 0, 0, 0, 0, 0, 0, 230,
2223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2224 78, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2225 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2227 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2228 79, 0, 0, 80, 0, 0, 81, 0, 82, 225,
2229 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2230 79, 0, 0, 80, 0, 0, 81, 0, 82, 406,
2231 0, 0, 347, 348, 63, 64, 349, 0, 0, 0,
2232 0, 79, 0, 0, 80, 0, 0, 81, 0, 82,
2233 466, 18, 0, 19, 0, 350, 351, 352, 0, 0,
2234 0, 0, 0, 0, 0, 0, 79, 353, 354, 80,
2235 0, 0, 81, 0, 82, 0, 0, 0, 0, 0,
2236 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2237 355, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2238 0, 0, 0, 0, 0, 0, 0, 0, 133, 134,
2239 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
2240 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
2241 155, 156, 316, 317, 0, 0, 0, 0, 0, 318,
2242 0, 319, 0, 320, 321, 322, 0, 0, 0, 0,
2243 0, 0, 0, 0, 0, 0, 0, 0, 347, 348,
2244 0, 0, 349, 0, 0, 0, 0, 0, 171, 172,
2245 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
2246 183, 350, 351, 352, 0, 0, 0, 0, 0, 356,
2247 0, 0, 0, 353, 354, 0, 0, 0, 0, 0,
2248 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2249 0, 0, 0, 0, 0, 0, 355, 0, 0, 0,
2250 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2251 0, 0, 0, 0, 133, 134, 135, 136, 137, 138,
2252 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
2253 149, 150, 151, 152, 153, 154, 155, 156, 316, 317,
2254 0, 0, 0, 0, 0, 318, 0, 319, 0, 320,
2255 321, 322, 0, 0, 0, 0, 0, 0, 0, 0,
2256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2257 0, 0, 0, 0, 171, 172, 173, 174, 175, 176,
2258 177, 178, 179, 180, 181, 182, 183, 0, 0, 0,
2259 0, 0, 0, 63, 64, 356, 115, 66, 67, 68,
2260 69, 70, 71, 72, 73, 74, 75, 76, 0, 77,
2261 18, 0, 19, 0, 0, 0, 0, 0, 0, 0,
2262 0, 0, 0, 0, 0, 340, 0, 0, 0, 0,
2263 0, 0, 0, 0, 63, 64, 78, 115, 206, 207,
2264 208, 209, 210, 211, 212, 213, 214, 215, 216, 0,
2265 77, 18, 0, 19, 63, 64, 0, 115, 66, 67,
2266 68, 69, 70, 71, 72, 73, 74, 75, 76, 0,
2267 77, 18, 0, 19, 0, 0, 0, 78, 0, 0,
2268 0, 0, 0, 0, 0, 0, 422, 0, 0, 0,
2269 0, 0, 0, 0, 0, 63, 64, 78, 115, 66,
2270 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
2271 0, 77, 18, 0, 19, 0, 0, 0, 0, 0,
2272 0, 0, 0, 0, 0, 0, 0, 476, 0, 0,
2273 0, 0, 0, 0, 0, 0, 0, 0, 78, 0,
2274 0, 0, 79, 0, 0, 80, 0, 0, 81, 0,
2275 82, 63, 64, 0, 65, 66, 67, 68, 69, 70,
2276 71, 72, 73, 74, 75, 76, 0, 77, 18, 0,
2277 19, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2278 0, 0, 0, 79, 0, 0, 80, 0, 401, 81,
2279 0, 82, 0, 0, 78, 0, 0, 0, 0, 0,
2280 0, 0, 0, 79, 0, 0, 80, 0, 0, 81,
2281 0, 82, 63, 64, 0, 115, 66, 67, 68, 69,
2282 70, 71, 72, 73, 74, 75, 76, 0, 77, 18,
2283 0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
2284 0, 0, 0, 0, 79, 0, 0, 80, 0, 0,
2285 81, 0, 82, 63, 64, 78, 115, 206, 207, 208,
2286 209, 210, 211, 212, 213, 214, 215, 216, 0, 77,
2287 18, 0, 19, 63, 64, 0, 236, 66, 67, 68,
2288 69, 70, 71, 72, 73, 74, 75, 76, 0, 77,
2289 18, 0, 19, 0, 0, 0, 78, 0, 0, 0,
2290 79, 0, 0, 80, 0, 0, 81, 0, 82, 0,
2291 0, 0, 0, 0, 63, 64, 78, 115, 206, 207,
2292 208, 209, 210, 211, 212, 213, 214, 215, 216, 0,
2293 77, 18, 0, 19, 0, 0, 0, 0, 0, 0,
2294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2295 0, 0, 0, 0, 0, 0, 0, 78, 0, 0,
2296 0, 79, 0, 0, 80, 0, 0, 81, 0, 82,
2297 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2298 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2299 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2300 0, 0, 79, 0, 0, 80, 0, 0, 81, 0,
2301 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2302 0, 0, 79, 0, 0, 80, 0, 0, 81, 0,
2303 82, 0, 0, 0, 0, 122, 0, 0, 0, 0,
2304 0, 0, 0, 0, 0, 0, 0, 0, 0, 123,
2305 0, 0, 0, 0, 0, 0, 0, 0, 0, 124,
2306 125, 0, 0, 79, 0, 0, 80, 0, 0, 81,
2307 0, 404, 126, 127, 128, 129, 130, 131, 132, 133,
2308 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
2309 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
2310 154, 155, 156, 157, 158, 159, 160, 161, 0, 0,
2311 162, 163, 164, 165, 166, 167, 168, 169, 170, 0,
2312 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2313 0, 0, 0, 0, 0, 0, 0, 0, 0, 171,
2314 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
2318 static const short yycheck[] = { 35,
2319 123, 128, 128, 126, 4, 51, 281, 304, 305, 29,
2320 15, 109, 15, 34, 2, 51, 61, 324, 325, 129,
2321 556, 575, 9, 82, 10, 11, 12, 13, 14, 15,
2322 16, 17, 23, 587, 21, 152, 57, 334, 161, 30,
2323 576, 164, 165, 166, 167, 168, 169, 170, 153, 356,
2324 155, 39, 57, 153, 57, 114, 153, 0, 163, 164,
2325 22, 120, 24, 163, 187, 188, 163, 52, 53, 54,
2326 106, 107, 108, 10, 11, 12, 13, 14, 15, 16,
2327 17, 191, 25, 153, 20, 153, 71, 123, 31, 161,
2328 126, 23, 164, 163, 61, 163, 84, 404, 41, 42,
2329 43, 44, 45, 46, 47, 41, 42, 43, 44, 45,
2330 46, 47, 155, 152, 50, 159, 153, 32, 33, 62,
2331 164, 164, 159, 159, 160, 161, 162, 163, 164, 165,
2332 166, 167, 168, 169, 170, 153, 153, 55, 56, 153,
2333 114, 24, 162, 161, 161, 159, 120, 4, 184, 185,
2334 186, 187, 188, 53, 54, 55, 45, 152, 47, 456,
2335 108, 109, 162, 152, 223, 224, 27, 28, 227, 3,
2336 4, 152, 163, 159, 152, 5, 6, 300, 8, 9,
2337 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2338 155, 21, 22, 229, 24, 119, 120, 121, 122, 123,
2339 124, 125, 126, 127, 128, 251, 3, 4, 3, 4,
2340 220, 157, 487, 4, 489, 251, 3, 4, 48, 3,
2341 4, 4, 159, 233, 77, 78, 262, 155, 238, 239,
2342 10, 11, 12, 13, 14, 15, 16, 17, 24, 4,
2343 250, 158, 24, 279, 64, 65, 66, 67, 68, 69,
2344 70, 374, 298, 376, 377, 378, 24, 158, 155, 59,
2345 4, 384, 298, 299, 300, 4, 20, 4, 22, 4,
2346 24, 7, 4, 283, 7, 161, 7, 31, 32, 33,
2347 153, 156, 153, 293, 294, 295, 345, 41, 42, 43,
2348 44, 45, 46, 47, 153, 157, 50, 51, 396, 397,
2349 398, 399, 400, 153, 58, 153, 153, 153, 62, 153,
2350 153, 409, 410, 411, 412, 413, 153, 153, 153, 36,
2351 24, 153, 155, 24, 154, 153, 155, 157, 155, 155,
2352 160, 155, 162, 163, 155, 63, 155, 155, 374, 375,
2353 376, 377, 378, 379, 380, 404, 155, 155, 384, 385,
2354 161, 238, 239, 341, 364, 365, 366, 156, 34, 457,
2355 458, 153, 372, 250, 153, 153, 464, 157, 153, 24,
2356 21, 494, 495, 496, 153, 153, 386, 387, 153, 155,
2357 21, 155, 155, 153, 420, 4, 153, 153, 24, 153,
2358 153, 153, 4, 153, 155, 153, 283, 153, 434, 36,
2359 153, 153, 161, 27, 28, 153, 293, 294, 295, 532,
2360 508, 509, 510, 511, 57, 153, 452, 515, 516, 517,
2361 518, 431, 156, 433, 153, 4, 153, 437, 153, 556,
2362 556, 153, 153, 153, 153, 445, 446, 447, 161, 24,
2363 153, 157, 540, 541, 156, 159, 57, 156, 484, 576,
2364 576, 153, 21, 156, 153, 153, 156, 21, 494, 495,
2365 496, 156, 156, 156, 500, 156, 564, 159, 566, 567,
2366 36, 156, 482, 483, 156, 485, 486, 364, 365, 366,
2367 153, 156, 492, 519, 156, 372, 156, 21, 153, 21,
2368 21, 501, 0, 0, 94, 94, 532, 94, 94, 386,
2369 387, 125, 126, 127, 128, 129, 130, 131, 132, 133,
2370 134, 135, 136, 137, 138, 316, 94, 39, 23, 317,
2371 50, 110, 421, 220, 534, 420, 2, 17, 594, 434,
2372 500, -1, 459, -1, -1, -1, -1, -1, -1, -1,
2373 -1, -1, -1, -1, 431, -1, 433, -1, -1, -1,
2374 437, -1, -1, -1, -1, -1, -1, -1, 445, 446,
2375 447, -1, -1, 573, -1, -1, -1, -1, -1, -1,
2376 -1, -1, -1, -1, -1, -1, -1, -1, 588, -1,
2377 -1, -1, -1, 5, 6, 595, -1, -1, -1, 599,
2378 600, -1, -1, -1, -1, 482, 483, -1, 485, 486,
2379 22, -1, 24, -1, 26, 492, -1, -1, -1, -1,
2380 -1, -1, -1, -1, 501, -1, 38, 39, -1, -1,
2381 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2382 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2383 -1, -1, -1, -1, -1, -1, -1, 534, -1, -1,
2384 -1, -1, -1, -1, -1, -1, -1, 79, 80, 81,
2385 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
2386 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
2387 102, 103, 104, -1, -1, -1, 573, -1, 110, -1,
2388 112, -1, 114, 115, 116, -1, -1, -1, -1, -1,
2389 -1, 588, -1, -1, -1, -1, -1, -1, 595, -1,
2390 -1, -1, 599, 600, -1, -1, -1, 139, 140, 141,
2391 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
2392 -1, -1, -1, -1, -1, 157, -1, -1, 160, -1,
2393 162, 5, 6, 165, 8, 9, 10, 11, 12, 13,
2394 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
2395 24, 5, 6, -1, 8, 9, 10, 11, 12, 13,
2396 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
2397 24, -1, 5, 6, 48, 8, 9, 10, 11, 12,
2398 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
2399 -1, 24, -1, -1, 48, -1, -1, 5, 6, -1,
2400 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
2401 18, 19, -1, 21, 22, 48, 24, -1, -1, -1,
2402 -1, -1, -1, -1, -1, -1, -1, -1, -1, 37,
2403 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2404 48, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2405 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2406 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2407 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2408 154, -1, -1, 157, -1, -1, 160, -1, 162, 163,
2409 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2410 154, -1, -1, 157, -1, -1, 160, -1, 162, 163,
2411 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
2412 -1, 154, -1, -1, 157, -1, -1, 160, -1, 162,
2413 163, 22, -1, 24, -1, 26, 27, 28, -1, -1,
2414 -1, -1, -1, -1, -1, -1, 154, 38, 39, 157,
2415 -1, -1, 160, -1, 162, -1, -1, -1, -1, -1,
2416 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2417 61, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2418 -1, -1, -1, -1, -1, -1, -1, -1, 79, 80,
2419 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
2420 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
2421 101, 102, 103, 104, -1, -1, -1, -1, -1, 110,
2422 -1, 112, -1, 114, 115, 116, -1, -1, -1, -1,
2423 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
2424 -1, -1, 7, -1, -1, -1, -1, -1, 139, 140,
2425 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
2426 151, 26, 27, 28, -1, -1, -1, -1, -1, 160,
2427 -1, -1, -1, 38, 39, -1, -1, -1, -1, -1,
2428 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2429 -1, -1, -1, -1, -1, -1, 61, -1, -1, -1,
2430 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2431 -1, -1, -1, -1, 79, 80, 81, 82, 83, 84,
2432 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2433 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
2434 -1, -1, -1, -1, -1, 110, -1, 112, -1, 114,
2435 115, 116, -1, -1, -1, -1, -1, -1, -1, -1,
2436 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2437 -1, -1, -1, -1, 139, 140, 141, 142, 143, 144,
2438 145, 146, 147, 148, 149, 150, 151, -1, -1, -1,
2439 -1, -1, -1, 5, 6, 160, 8, 9, 10, 11,
2440 12, 13, 14, 15, 16, 17, 18, 19, -1, 21,
2441 22, -1, 24, -1, -1, -1, -1, -1, -1, -1,
2442 -1, -1, -1, -1, -1, 37, -1, -1, -1, -1,
2443 -1, -1, -1, -1, 5, 6, 48, 8, 9, 10,
2444 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2445 21, 22, -1, 24, 5, 6, -1, 8, 9, 10,
2446 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2447 21, 22, -1, 24, -1, -1, -1, 48, -1, -1,
2448 -1, -1, -1, -1, -1, -1, 37, -1, -1, -1,
2449 -1, -1, -1, -1, -1, 5, 6, 48, 8, 9,
2450 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2451 -1, 21, 22, -1, 24, -1, -1, -1, -1, -1,
2452 -1, -1, -1, -1, -1, -1, -1, 37, -1, -1,
2453 -1, -1, -1, -1, -1, -1, -1, -1, 48, -1,
2454 -1, -1, 154, -1, -1, 157, -1, -1, 160, -1,
2455 162, 5, 6, -1, 8, 9, 10, 11, 12, 13,
2456 14, 15, 16, 17, 18, 19, -1, 21, 22, -1,
2457 24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2458 -1, -1, -1, 154, -1, -1, 157, -1, 159, 160,
2459 -1, 162, -1, -1, 48, -1, -1, -1, -1, -1,
2460 -1, -1, -1, 154, -1, -1, 157, -1, -1, 160,
2461 -1, 162, 5, 6, -1, 8, 9, 10, 11, 12,
2462 13, 14, 15, 16, 17, 18, 19, -1, 21, 22,
2463 -1, 24, -1, -1, -1, -1, -1, -1, -1, -1,
2464 -1, -1, -1, -1, 154, -1, -1, 157, -1, -1,
2465 160, -1, 162, 5, 6, 48, 8, 9, 10, 11,
2466 12, 13, 14, 15, 16, 17, 18, 19, -1, 21,
2467 22, -1, 24, 5, 6, -1, 8, 9, 10, 11,
2468 12, 13, 14, 15, 16, 17, 18, 19, -1, 21,
2469 22, -1, 24, -1, -1, -1, 48, -1, -1, -1,
2470 154, -1, -1, 157, -1, -1, 160, -1, 162, -1,
2471 -1, -1, -1, -1, 5, 6, 48, 8, 9, 10,
2472 11, 12, 13, 14, 15, 16, 17, 18, 19, -1,
2473 21, 22, -1, 24, -1, -1, -1, -1, -1, -1,
2474 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2475 -1, -1, -1, -1, -1, -1, -1, 48, -1, -1,
2476 -1, 154, -1, -1, 157, -1, -1, 160, -1, 162,
2477 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2478 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2479 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2480 -1, -1, 154, -1, -1, 157, -1, -1, 160, -1,
2481 162, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2482 -1, -1, 154, -1, -1, 157, -1, -1, 160, -1,
2483 162, -1, -1, -1, -1, 35, -1, -1, -1, -1,
2484 -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
2485 -1, -1, -1, -1, -1, -1, -1, -1, -1, 59,
2486 60, -1, -1, 154, -1, -1, 157, -1, -1, 160,
2487 -1, 162, 72, 73, 74, 75, 76, 77, 78, 79,
2488 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
2489 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
2490 100, 101, 102, 103, 104, 105, 106, 107, -1, -1,
2491 110, 111, 112, 113, 114, 115, 116, 117, 118, -1,
2492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2493 -1, -1, -1, -1, -1, -1, -1, -1, -1, 139,
2494 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
2497 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
2498 #line 3 "/usr/share/bison.simple"
2499 /* This file comes from bison-1.28. */
2501 /* Skeleton output parser for bison,
2502 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
2504 This program is free software; you can redistribute it and/or modify
2505 it under the terms of the GNU General Public License as published by
2506 the Free Software Foundation; either version 2, or (at your option)
2509 This program is distributed in the hope that it will be useful,
2510 but WITHOUT ANY WARRANTY; without even the implied warranty of
2511 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2512 GNU General Public License for more details.
2514 You should have received a copy of the GNU General Public License
2515 along with this program; if not, write to the Free Software
2516 Foundation, Inc., 59 Temple Place - Suite 330,
2517 Boston, MA 02111-1307, USA. */
2519 /* As a special exception, when this file is copied by Bison into a
2520 Bison output file, you may use that output file without restriction.
2521 This special exception was added by the Free Software Foundation
2522 in version 1.24 of Bison. */
2524 /* This is the parser code that is written into each bison parser
2525 when the %semantic_parser declaration is not specified in the grammar.
2526 It was written by Richard Stallman by simplifying the hairy parser
2527 used when %semantic_parser is specified. */
2529 #ifndef YYSTACK_USE_ALLOCA
2531 #define YYSTACK_USE_ALLOCA
2532 #else /* alloca not defined */
2534 #define YYSTACK_USE_ALLOCA
2535 #define alloca __builtin_alloca
2536 #else /* not GNU C. */
2537 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
2538 #define YYSTACK_USE_ALLOCA
2540 #else /* not sparc */
2541 /* We think this test detects Watcom and Microsoft C. */
2542 /* This used to test MSDOS, but that is a bad idea
2543 since that symbol is in the user namespace. */
2544 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
2545 #if 0 /* No need for malloc.h, which pollutes the namespace;
2546 instead, just don't use alloca. */
2549 #else /* not MSDOS, or __TURBOC__ */
2551 /* I don't know what this was needed for, but it pollutes the namespace.
2552 So I turned it off. rms, 2 May 1997. */
2553 /* #include <malloc.h> */
2555 #define YYSTACK_USE_ALLOCA
2556 #else /* not MSDOS, or __TURBOC__, or _AIX */
2558 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
2559 and on HPUX 10. Eventually we can turn this on. */
2560 #define YYSTACK_USE_ALLOCA
2561 #define alloca __builtin_alloca
2564 #endif /* not _AIX */
2565 #endif /* not MSDOS, or __TURBOC__ */
2566 #endif /* not sparc */
2567 #endif /* not GNU C */
2568 #endif /* alloca not defined */
2569 #endif /* YYSTACK_USE_ALLOCA not defined */
2571 #ifdef YYSTACK_USE_ALLOCA
2572 #define YYSTACK_ALLOC alloca
2574 #define YYSTACK_ALLOC malloc
2577 /* Note: there must be only one dollar sign in this file.
2578 It is replaced by the list of actions, each action
2579 as one case of the switch. */
2581 #define yyerrok (yyerrstatus = 0)
2582 #define yyclearin (yychar = YYEMPTY)
2585 #define YYACCEPT goto yyacceptlab
2586 #define YYABORT goto yyabortlab
2587 #define YYERROR goto yyerrlab1
2588 /* Like YYERROR except do call yyerror.
2589 This remains here temporarily to ease the
2590 transition to the new meaning of YYERROR, for GCC.
2591 Once GCC version 2 has supplanted version 1, this can go. */
2592 #define YYFAIL goto yyerrlab
2593 #define YYRECOVERING() (!!yyerrstatus)
2594 #define YYBACKUP(token, value) \
2596 if (yychar == YYEMPTY && yylen == 1) \
2597 { yychar = (token), yylval = (value); \
2598 yychar1 = YYTRANSLATE (yychar); \
2603 { yyerror ("syntax error: cannot back up"); YYERROR; } \
2607 #define YYERRCODE 256
2610 #define YYLEX yylex()
2616 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
2618 #define YYLEX yylex(&yylval, &yylloc)
2620 #else /* not YYLSP_NEEDED */
2622 #define YYLEX yylex(&yylval, YYLEX_PARAM)
2624 #define YYLEX yylex(&yylval)
2626 #endif /* not YYLSP_NEEDED */
2629 /* If nonreentrant, generate the variables here */
2633 int yychar; /* the lookahead symbol */
2634 YYSTYPE yylval; /* the semantic value of the */
2635 /* lookahead symbol */
2638 YYLTYPE yylloc; /* location data for the lookahead */
2642 int yynerrs; /* number of parse errors so far */
2643 #endif /* not YYPURE */
2646 int yydebug; /* nonzero means print parse trace */
2647 /* Since this is uninitialized, it does not stop multiple parsers
2651 /* YYINITDEPTH indicates the initial size of the parser's stacks */
2654 #define YYINITDEPTH 200
2657 /* YYMAXDEPTH is the maximum size the stacks can grow to
2658 (effective only if the built-in stack extension method is used). */
2665 #define YYMAXDEPTH 10000
2668 /* Define __yy_memcpy. Note that the size argument
2669 should be passed with type unsigned int, because that is what the non-GCC
2670 definitions require. With GCC, __builtin_memcpy takes an arg
2671 of type size_t, but it can handle unsigned int. */
2673 #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
2674 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
2675 #else /* not GNU C or C++ */
2678 /* This is the most reliable way to avoid incompatibilities
2679 in available built-in functions on various systems. */
2681 __yy_memcpy (to, from, count)
2686 register char *f = from;
2687 register char *t = to;
2688 register int i = count;
2694 #else /* __cplusplus */
2696 /* This is the most reliable way to avoid incompatibilities
2697 in available built-in functions on various systems. */
2699 __yy_memcpy (char *to, char *from, unsigned int count)
2701 register char *t = to;
2702 register char *f = from;
2703 register int i = count;
2712 #line 217 "/usr/share/bison.simple"
2714 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
2715 into yyparse. The argument should have type void *.
2716 It should actually point to an object.
2717 Grammar actions can access the variable by casting it
2718 to the proper pointer type. */
2720 #ifdef YYPARSE_PARAM
2722 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
2723 #define YYPARSE_PARAM_DECL
2724 #else /* not __cplusplus */
2725 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
2726 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
2727 #endif /* not __cplusplus */
2728 #else /* not YYPARSE_PARAM */
2729 #define YYPARSE_PARAM_ARG
2730 #define YYPARSE_PARAM_DECL
2731 #endif /* not YYPARSE_PARAM */
2733 /* Prevent warning if -Wstrict-prototypes. */
2735 #ifdef YYPARSE_PARAM
2736 int yyparse (void *);
2743 yyparse(YYPARSE_PARAM_ARG)
2746 register int yystate;
2748 register short *yyssp;
2749 register YYSTYPE *yyvsp;
2750 int yyerrstatus; /* number of tokens to shift before error messages enabled */
2751 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
2753 short yyssa[YYINITDEPTH]; /* the state stack */
2754 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
2756 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
2757 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
2760 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
2761 YYLTYPE *yyls = yylsa;
2764 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
2766 #define YYPOPSTACK (yyvsp--, yyssp--)
2769 int yystacksize = YYINITDEPTH;
2770 int yyfree_stacks = 0;
2781 YYSTYPE yyval; /* the variable used to return */
2782 /* semantic values from the action */
2789 fprintf(stderr, "Starting parse\n");
2795 yychar = YYEMPTY; /* Cause a token to be read. */
2797 /* Initialize stack pointers.
2798 Waste one element of value and location stack
2799 so that they stay on the same level as the state stack.
2800 The wasted elements are never initialized. */
2808 /* Push a new state, which is found in yystate . */
2809 /* In all cases, when you get here, the value and location stacks
2810 have just been pushed. so pushing a state here evens the stacks. */
2815 if (yyssp >= yyss + yystacksize - 1)
2817 /* Give user a chance to reallocate the stack */
2818 /* Use copies of these so that the &'s don't force the real ones into memory. */
2819 YYSTYPE *yyvs1 = yyvs;
2820 short *yyss1 = yyss;
2822 YYLTYPE *yyls1 = yyls;
2825 /* Get the current used size of the three stacks, in elements. */
2826 int size = yyssp - yyss + 1;
2829 /* Each stack pointer address is followed by the size of
2830 the data in use in that stack, in bytes. */
2832 /* This used to be a conditional around just the two extra args,
2833 but that might be undefined if yyoverflow is a macro. */
2834 yyoverflow("parser stack overflow",
2835 &yyss1, size * sizeof (*yyssp),
2836 &yyvs1, size * sizeof (*yyvsp),
2837 &yyls1, size * sizeof (*yylsp),
2840 yyoverflow("parser stack overflow",
2841 &yyss1, size * sizeof (*yyssp),
2842 &yyvs1, size * sizeof (*yyvsp),
2846 yyss = yyss1; yyvs = yyvs1;
2850 #else /* no yyoverflow */
2851 /* Extend the stack our own way. */
2852 if (yystacksize >= YYMAXDEPTH)
2854 yyerror("parser stack overflow");
2866 if (yystacksize > YYMAXDEPTH)
2867 yystacksize = YYMAXDEPTH;
2868 #ifndef YYSTACK_USE_ALLOCA
2871 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
2872 __yy_memcpy ((char *)yyss, (char *)yyss1,
2873 size * (unsigned int) sizeof (*yyssp));
2874 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
2875 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
2876 size * (unsigned int) sizeof (*yyvsp));
2878 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
2879 __yy_memcpy ((char *)yyls, (char *)yyls1,
2880 size * (unsigned int) sizeof (*yylsp));
2882 #endif /* no yyoverflow */
2884 yyssp = yyss + size - 1;
2885 yyvsp = yyvs + size - 1;
2887 yylsp = yyls + size - 1;
2892 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
2895 if (yyssp >= yyss + yystacksize - 1)
2901 fprintf(stderr, "Entering state %d\n", yystate);
2907 /* Do appropriate processing given the current state. */
2908 /* Read a lookahead token if we need one and don't already have one. */
2911 /* First try to decide what to do without reference to lookahead token. */
2913 yyn = yypact[yystate];
2917 /* Not known => get a lookahead token if don't already have one. */
2919 /* yychar is either YYEMPTY or YYEOF
2920 or a valid token in external form. */
2922 if (yychar == YYEMPTY)
2926 fprintf(stderr, "Reading a token: ");
2931 /* Convert token to internal form (in yychar1) for indexing tables with */
2933 if (yychar <= 0) /* This means end of input. */
2936 yychar = YYEOF; /* Don't call YYLEX any more */
2940 fprintf(stderr, "Now at end of input.\n");
2945 yychar1 = YYTRANSLATE(yychar);
2950 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
2951 /* Give the individual parser a way to print the precise meaning
2952 of a token, for further debugging info. */
2954 YYPRINT (stderr, yychar, yylval);
2956 fprintf (stderr, ")\n");
2962 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
2967 /* yyn is what to do for this token type in this state.
2968 Negative => reduce, -yyn is rule number.
2969 Positive => shift, yyn is new state.
2970 New state is final state => don't bother to shift,
2971 just return success.
2972 0, or most negative number => error. */
2987 /* Shift the lookahead token. */
2991 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
2994 /* Discard the token being shifted unless it is eof. */
2995 if (yychar != YYEOF)
3003 /* count tokens shifted since error; after three, turn off error status. */
3004 if (yyerrstatus) yyerrstatus--;
3009 /* Do the default action for the current state. */
3012 yyn = yydefact[yystate];
3016 /* Do a reduction. yyn is the number of a rule to reduce with. */
3020 yyval = yyvsp[1-yylen]; /* implement default value of the action */
3027 fprintf (stderr, "Reducing via rule %d (line %d), ",
3030 /* Print the symbols being reduced, and their result. */
3031 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
3032 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
3033 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
3041 #line 1595 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3043 if (yyvsp[0].UIntVal > (uint32_t)INT32_MAX) // Outside of my range!
3044 error("Value too large for type");
3045 yyval.SIntVal = (int32_t)yyvsp[0].UIntVal;
3049 #line 1604 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3051 if (yyvsp[0].UInt64Val > (uint64_t)INT64_MAX) // Outside of my range!
3052 error("Value too large for type");
3053 yyval.SInt64Val = (int64_t)yyvsp[0].UInt64Val;
3057 #line 1626 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3058 { yyval.IPred = ICmpInst::ICMP_EQ; ;
3061 #line 1626 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3062 { yyval.IPred = ICmpInst::ICMP_NE; ;
3065 #line 1627 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3066 { yyval.IPred = ICmpInst::ICMP_SLT; ;
3069 #line 1627 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3070 { yyval.IPred = ICmpInst::ICMP_SGT; ;
3073 #line 1628 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3074 { yyval.IPred = ICmpInst::ICMP_SLE; ;
3077 #line 1628 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3078 { yyval.IPred = ICmpInst::ICMP_SGE; ;
3081 #line 1629 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3082 { yyval.IPred = ICmpInst::ICMP_ULT; ;
3085 #line 1629 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3086 { yyval.IPred = ICmpInst::ICMP_UGT; ;
3089 #line 1630 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3090 { yyval.IPred = ICmpInst::ICMP_ULE; ;
3093 #line 1630 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3094 { yyval.IPred = ICmpInst::ICMP_UGE; ;
3097 #line 1634 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3098 { yyval.FPred = FCmpInst::FCMP_OEQ; ;
3101 #line 1634 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3102 { yyval.FPred = FCmpInst::FCMP_ONE; ;
3105 #line 1635 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3106 { yyval.FPred = FCmpInst::FCMP_OLT; ;
3109 #line 1635 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3110 { yyval.FPred = FCmpInst::FCMP_OGT; ;
3113 #line 1636 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3114 { yyval.FPred = FCmpInst::FCMP_OLE; ;
3117 #line 1636 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3118 { yyval.FPred = FCmpInst::FCMP_OGE; ;
3121 #line 1637 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3122 { yyval.FPred = FCmpInst::FCMP_ORD; ;
3125 #line 1637 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3126 { yyval.FPred = FCmpInst::FCMP_UNO; ;
3129 #line 1638 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3130 { yyval.FPred = FCmpInst::FCMP_UEQ; ;
3133 #line 1638 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3134 { yyval.FPred = FCmpInst::FCMP_UNE; ;
3137 #line 1639 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3138 { yyval.FPred = FCmpInst::FCMP_ULT; ;
3141 #line 1639 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3142 { yyval.FPred = FCmpInst::FCMP_UGT; ;
3145 #line 1640 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3146 { yyval.FPred = FCmpInst::FCMP_ULE; ;
3149 #line 1640 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3150 { yyval.FPred = FCmpInst::FCMP_UGE; ;
3153 #line 1641 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3154 { yyval.FPred = FCmpInst::FCMP_TRUE; ;
3157 #line 1642 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3158 { yyval.FPred = FCmpInst::FCMP_FALSE; ;
3161 #line 1673 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3163 yyval.StrVal = yyvsp[-1].StrVal;
3167 #line 1676 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3173 #line 1681 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3174 { yyval.Linkage = GlobalValue::InternalLinkage; ;
3177 #line 1682 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3178 { yyval.Linkage = GlobalValue::LinkOnceLinkage; ;
3181 #line 1683 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3182 { yyval.Linkage = GlobalValue::WeakLinkage; ;
3185 #line 1684 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3186 { yyval.Linkage = GlobalValue::AppendingLinkage; ;
3189 #line 1685 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3190 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
3193 #line 1686 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3194 { yyval.Linkage = GlobalValue::DLLExportLinkage; ;
3197 #line 1687 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3198 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
3201 #line 1688 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3202 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
3205 #line 1692 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3206 { yyval.UIntVal = OldCallingConv::C; ;
3209 #line 1693 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3210 { yyval.UIntVal = OldCallingConv::C; ;
3213 #line 1694 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3214 { yyval.UIntVal = OldCallingConv::CSRet; ;
3217 #line 1695 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3218 { yyval.UIntVal = OldCallingConv::Fast; ;
3221 #line 1696 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3222 { yyval.UIntVal = OldCallingConv::Cold; ;
3225 #line 1697 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3226 { yyval.UIntVal = OldCallingConv::X86_StdCall; ;
3229 #line 1698 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3230 { yyval.UIntVal = OldCallingConv::X86_FastCall; ;
3233 #line 1699 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3235 if ((unsigned)yyvsp[0].UInt64Val != yyvsp[0].UInt64Val)
3236 error("Calling conv too large");
3237 yyval.UIntVal = yyvsp[0].UInt64Val;
3241 #line 1709 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3242 { yyval.UIntVal = 0; ;
3245 #line 1710 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3247 yyval.UIntVal = yyvsp[0].UInt64Val;
3248 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
3249 error("Alignment must be a power of two");
3253 #line 1718 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3254 { yyval.UIntVal = 0; ;
3257 #line 1719 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3259 yyval.UIntVal = yyvsp[0].UInt64Val;
3260 if (yyval.UIntVal != 0 && !isPowerOf2_32(yyval.UIntVal))
3261 error("Alignment must be a power of two");
3265 #line 1727 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3267 for (unsigned i = 0, e = strlen(yyvsp[0].StrVal); i != e; ++i)
3268 if (yyvsp[0].StrVal[i] == '"' || yyvsp[0].StrVal[i] == '\\')
3269 error("Invalid character in section name");
3270 yyval.StrVal = yyvsp[0].StrVal;
3274 #line 1736 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3275 { yyval.StrVal = 0; ;
3278 #line 1737 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3279 { yyval.StrVal = yyvsp[0].StrVal; ;
3282 #line 1744 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3286 #line 1745 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3290 #line 1749 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3292 CurGV->setSection(yyvsp[0].StrVal);
3293 free(yyvsp[0].StrVal);
3297 #line 1753 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3299 if (yyvsp[0].UInt64Val != 0 && !isPowerOf2_32(yyvsp[0].UInt64Val))
3300 error("Alignment must be a power of two");
3301 CurGV->setAlignment(yyvsp[0].UInt64Val);
3306 #line 1770 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3308 yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T);
3309 yyval.TypeVal.S = Signless;
3313 #line 1778 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3315 yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T);
3316 yyval.TypeVal.S = Signless;
3320 #line 1785 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3322 if (!UpRefs.empty())
3323 error("Invalid upreference in type: " + (*yyvsp[0].TypeVal.PAT)->getDescription());
3324 yyval.TypeVal = yyvsp[0].TypeVal;
3328 #line 1799 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3330 yyval.TypeVal.PAT = new PATypeHolder(yyvsp[0].PrimType.T);
3331 yyval.TypeVal.S = yyvsp[0].PrimType.S;
3335 #line 1803 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3337 yyval.TypeVal.PAT = new PATypeHolder(OpaqueType::get());
3338 yyval.TypeVal.S = Signless;
3342 #line 1807 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3343 { // Named types are also simple types...
3344 const Type* tmp = getType(yyvsp[0].ValIDVal);
3345 yyval.TypeVal.PAT = new PATypeHolder(tmp);
3346 yyval.TypeVal.S = Signless; // FIXME: what if its signed?
3350 #line 1812 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3351 { // Type UpReference
3352 if (yyvsp[0].UInt64Val > (uint64_t)~0U)
3353 error("Value out of range");
3354 OpaqueType *OT = OpaqueType::get(); // Use temporary placeholder
3355 UpRefs.push_back(UpRefRecord((unsigned)yyvsp[0].UInt64Val, OT)); // Add to vector...
3356 yyval.TypeVal.PAT = new PATypeHolder(OT);
3357 yyval.TypeVal.S = Signless;
3358 UR_OUT("New Upreference!\n");
3362 #line 1821 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3363 { // Function derived type?
3364 std::vector<const Type*> Params;
3365 for (std::list<llvm::PATypeInfo>::iterator I = yyvsp[-1].TypeList->begin(),
3366 E = yyvsp[-1].TypeList->end(); I != E; ++I) {
3367 Params.push_back(I->PAT->get());
3369 FunctionType::ParamAttrsList ParamAttrs;
3370 bool isVarArg = Params.size() && Params.back() == Type::VoidTy;
3371 if (isVarArg) Params.pop_back();
3373 yyval.TypeVal.PAT = new PATypeHolder(
3374 HandleUpRefs(FunctionType::get(yyvsp[-3].TypeVal.PAT->get(), Params, isVarArg,
3376 yyval.TypeVal.S = yyvsp[-3].TypeVal.S;
3377 delete yyvsp[-3].TypeVal.PAT; // Delete the return type handle
3378 delete yyvsp[-1].TypeList; // Delete the argument list
3382 #line 1838 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3383 { // Sized array type?
3384 yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(ArrayType::get(yyvsp[-1].TypeVal.PAT->get(),
3385 (unsigned)yyvsp[-3].UInt64Val)));
3386 yyval.TypeVal.S = yyvsp[-1].TypeVal.S;
3387 delete yyvsp[-1].TypeVal.PAT;
3391 #line 1844 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3393 const llvm::Type* ElemTy = yyvsp[-1].TypeVal.PAT->get();
3394 if ((unsigned)yyvsp[-3].UInt64Val != yyvsp[-3].UInt64Val)
3395 error("Unsigned result not equal to signed result");
3396 if (!(ElemTy->isInteger() || ElemTy->isFloatingPoint()))
3397 error("Elements of a VectorType must be integer or floating point");
3398 if (!isPowerOf2_32(yyvsp[-3].UInt64Val))
3399 error("VectorType length should be a power of 2");
3400 yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(VectorType::get(ElemTy,
3401 (unsigned)yyvsp[-3].UInt64Val)));
3402 yyval.TypeVal.S = yyvsp[-1].TypeVal.S;
3403 delete yyvsp[-1].TypeVal.PAT;
3407 #line 1857 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3408 { // Structure type?
3409 std::vector<const Type*> Elements;
3410 for (std::list<llvm::PATypeInfo>::iterator I = yyvsp[-1].TypeList->begin(),
3411 E = yyvsp[-1].TypeList->end(); I != E; ++I)
3412 Elements.push_back(I->PAT->get());
3413 yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements)));
3414 yyval.TypeVal.S = Signless;
3415 delete yyvsp[-1].TypeList;
3419 #line 1866 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3420 { // Empty structure type?
3421 yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector<const Type*>()));
3422 yyval.TypeVal.S = Signless;
3426 #line 1870 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3427 { // Packed Structure type?
3428 std::vector<const Type*> Elements;
3429 for (std::list<llvm::PATypeInfo>::iterator I = yyvsp[-2].TypeList->begin(),
3430 E = yyvsp[-2].TypeList->end(); I != E; ++I) {
3431 Elements.push_back(I->PAT->get());
3434 yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(StructType::get(Elements, true)));
3435 yyval.TypeVal.S = Signless;
3436 delete yyvsp[-2].TypeList;
3440 #line 1881 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3441 { // Empty packed structure type?
3442 yyval.TypeVal.PAT = new PATypeHolder(StructType::get(std::vector<const Type*>(),true));
3443 yyval.TypeVal.S = Signless;
3447 #line 1885 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3449 if (yyvsp[-1].TypeVal.PAT->get() == Type::LabelTy)
3450 error("Cannot form a pointer to a basic block");
3451 yyval.TypeVal.PAT = new PATypeHolder(HandleUpRefs(PointerType::get(yyvsp[-1].TypeVal.PAT->get())));
3452 yyval.TypeVal.S = yyvsp[-1].TypeVal.S;
3453 delete yyvsp[-1].TypeVal.PAT;
3457 #line 1898 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3459 yyval.TypeList = new std::list<PATypeInfo>();
3460 yyval.TypeList->push_back(yyvsp[0].TypeVal);
3464 #line 1902 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3466 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(yyvsp[0].TypeVal);
3470 #line 1910 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3473 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
3474 VoidTI.S = Signless;
3475 (yyval.TypeList=yyvsp[-2].TypeList)->push_back(VoidTI);
3479 #line 1916 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3481 yyval.TypeList = new std::list<PATypeInfo>();
3483 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
3484 VoidTI.S = Signless;
3485 yyval.TypeList->push_back(VoidTI);
3489 #line 1923 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3491 yyval.TypeList = new std::list<PATypeInfo>();
3495 #line 1935 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3496 { // Nonempty unsized arr
3497 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-3].TypeVal.PAT->get());
3499 error("Cannot make array constant with type: '" +
3500 yyvsp[-3].TypeVal.PAT->get()->getDescription() + "'");
3501 const Type *ETy = ATy->getElementType();
3502 int NumElements = ATy->getNumElements();
3504 // Verify that we have the correct size...
3505 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
3506 error("Type mismatch: constant sized array initialized with " +
3507 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
3508 itostr(NumElements) + "");
3510 // Verify all elements are correct type!
3511 std::vector<Constant*> Elems;
3512 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3513 Constant *C = (*yyvsp[-1].ConstVector)[i].C;
3514 const Type* ValTy = C->getType();
3516 error("Element #" + utostr(i) + " is not of type '" +
3517 ETy->getDescription() +"' as required!\nIt is of type '"+
3518 ValTy->getDescription() + "'");
3521 yyval.ConstVal.C = ConstantArray::get(ATy, Elems);
3522 yyval.ConstVal.S = yyvsp[-3].TypeVal.S;
3523 delete yyvsp[-3].TypeVal.PAT;
3524 delete yyvsp[-1].ConstVector;
3528 #line 1965 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3530 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal.PAT->get());
3532 error("Cannot make array constant with type: '" +
3533 yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'");
3534 int NumElements = ATy->getNumElements();
3535 if (NumElements != -1 && NumElements != 0)
3536 error("Type mismatch: constant sized array initialized with 0"
3537 " arguments, but has size of " + itostr(NumElements) +"");
3538 yyval.ConstVal.C = ConstantArray::get(ATy, std::vector<Constant*>());
3539 yyval.ConstVal.S = yyvsp[-2].TypeVal.S;
3540 delete yyvsp[-2].TypeVal.PAT;
3544 #line 1978 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3546 const ArrayType *ATy = dyn_cast<ArrayType>(yyvsp[-2].TypeVal.PAT->get());
3548 error("Cannot make array constant with type: '" +
3549 yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'");
3550 int NumElements = ATy->getNumElements();
3551 const Type *ETy = dyn_cast<IntegerType>(ATy->getElementType());
3552 if (!ETy || cast<IntegerType>(ETy)->getBitWidth() != 8)
3553 error("String arrays require type i8, not '" + ETy->getDescription() +
3555 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
3556 if (NumElements != -1 && NumElements != (EndStr-yyvsp[0].StrVal))
3557 error("Can't build string constant of size " +
3558 itostr((int)(EndStr-yyvsp[0].StrVal)) + " when array has size " +
3559 itostr(NumElements) + "");
3560 std::vector<Constant*> Vals;
3561 for (char *C = (char *)yyvsp[0].StrVal; C != (char *)EndStr; ++C)
3562 Vals.push_back(ConstantInt::get(ETy, *C));
3563 free(yyvsp[0].StrVal);
3564 yyval.ConstVal.C = ConstantArray::get(ATy, Vals);
3565 yyval.ConstVal.S = yyvsp[-2].TypeVal.S;
3566 delete yyvsp[-2].TypeVal.PAT;
3570 #line 2001 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3571 { // Nonempty unsized arr
3572 const VectorType *PTy = dyn_cast<VectorType>(yyvsp[-3].TypeVal.PAT->get());
3574 error("Cannot make packed constant with type: '" +
3575 yyvsp[-3].TypeVal.PAT->get()->getDescription() + "'");
3576 const Type *ETy = PTy->getElementType();
3577 int NumElements = PTy->getNumElements();
3578 // Verify that we have the correct size...
3579 if (NumElements != -1 && NumElements != (int)yyvsp[-1].ConstVector->size())
3580 error("Type mismatch: constant sized packed initialized with " +
3581 utostr(yyvsp[-1].ConstVector->size()) + " arguments, but has size of " +
3582 itostr(NumElements) + "");
3583 // Verify all elements are correct type!
3584 std::vector<Constant*> Elems;
3585 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
3586 Constant *C = (*yyvsp[-1].ConstVector)[i].C;
3587 const Type* ValTy = C->getType();
3589 error("Element #" + utostr(i) + " is not of type '" +
3590 ETy->getDescription() +"' as required!\nIt is of type '"+
3591 ValTy->getDescription() + "'");
3594 yyval.ConstVal.C = ConstantVector::get(PTy, Elems);
3595 yyval.ConstVal.S = yyvsp[-3].TypeVal.S;
3596 delete yyvsp[-3].TypeVal.PAT;
3597 delete yyvsp[-1].ConstVector;
3601 #line 2029 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3603 const StructType *STy = dyn_cast<StructType>(yyvsp[-3].TypeVal.PAT->get());
3605 error("Cannot make struct constant with type: '" +
3606 yyvsp[-3].TypeVal.PAT->get()->getDescription() + "'");
3607 if (yyvsp[-1].ConstVector->size() != STy->getNumContainedTypes())
3608 error("Illegal number of initializers for structure type");
3610 // Check to ensure that constants are compatible with the type initializer!
3611 std::vector<Constant*> Fields;
3612 for (unsigned i = 0, e = yyvsp[-1].ConstVector->size(); i != e; ++i) {
3613 Constant *C = (*yyvsp[-1].ConstVector)[i].C;
3614 if (C->getType() != STy->getElementType(i))
3615 error("Expected type '" + STy->getElementType(i)->getDescription() +
3616 "' for element #" + utostr(i) + " of structure initializer");
3617 Fields.push_back(C);
3619 yyval.ConstVal.C = ConstantStruct::get(STy, Fields);
3620 yyval.ConstVal.S = yyvsp[-3].TypeVal.S;
3621 delete yyvsp[-3].TypeVal.PAT;
3622 delete yyvsp[-1].ConstVector;
3626 #line 2051 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3628 const StructType *STy = dyn_cast<StructType>(yyvsp[-2].TypeVal.PAT->get());
3630 error("Cannot make struct constant with type: '" +
3631 yyvsp[-2].TypeVal.PAT->get()->getDescription() + "'");
3632 if (STy->getNumContainedTypes() != 0)
3633 error("Illegal number of initializers for structure type");
3634 yyval.ConstVal.C = ConstantStruct::get(STy, std::vector<Constant*>());
3635 yyval.ConstVal.S = yyvsp[-2].TypeVal.S;
3636 delete yyvsp[-2].TypeVal.PAT;
3640 #line 2062 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3642 const StructType *STy = dyn_cast<StructType>(yyvsp[-5].TypeVal.PAT->get());
3644 error("Cannot make packed struct constant with type: '" +
3645 yyvsp[-5].TypeVal.PAT->get()->getDescription() + "'");
3646 if (yyvsp[-2].ConstVector->size() != STy->getNumContainedTypes())
3647 error("Illegal number of initializers for packed structure type");
3649 // Check to ensure that constants are compatible with the type initializer!
3650 std::vector<Constant*> Fields;
3651 for (unsigned i = 0, e = yyvsp[-2].ConstVector->size(); i != e; ++i) {
3652 Constant *C = (*yyvsp[-2].ConstVector)[i].C;
3653 if (C->getType() != STy->getElementType(i))
3654 error("Expected type '" + STy->getElementType(i)->getDescription() +
3655 "' for element #" + utostr(i) + " of packed struct initializer");
3656 Fields.push_back(C);
3658 yyval.ConstVal.C = ConstantStruct::get(STy, Fields);
3659 yyval.ConstVal.S = yyvsp[-5].TypeVal.S;
3660 delete yyvsp[-5].TypeVal.PAT;
3661 delete yyvsp[-2].ConstVector;
3665 #line 2084 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3667 const StructType *STy = dyn_cast<StructType>(yyvsp[-4].TypeVal.PAT->get());
3669 error("Cannot make packed struct constant with type: '" +
3670 yyvsp[-4].TypeVal.PAT->get()->getDescription() + "'");
3671 if (STy->getNumContainedTypes() != 0)
3672 error("Illegal number of initializers for packed structure type");
3673 yyval.ConstVal.C = ConstantStruct::get(STy, std::vector<Constant*>());
3674 yyval.ConstVal.S = yyvsp[-4].TypeVal.S;
3675 delete yyvsp[-4].TypeVal.PAT;
3679 #line 2095 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3681 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal.PAT->get());
3683 error("Cannot make null pointer constant with type: '" +
3684 yyvsp[-1].TypeVal.PAT->get()->getDescription() + "'");
3685 yyval.ConstVal.C = ConstantPointerNull::get(PTy);
3686 yyval.ConstVal.S = yyvsp[-1].TypeVal.S;
3687 delete yyvsp[-1].TypeVal.PAT;
3691 #line 2104 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3693 yyval.ConstVal.C = UndefValue::get(yyvsp[-1].TypeVal.PAT->get());
3694 yyval.ConstVal.S = yyvsp[-1].TypeVal.S;
3695 delete yyvsp[-1].TypeVal.PAT;
3699 #line 2109 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3701 const PointerType *Ty = dyn_cast<PointerType>(yyvsp[-1].TypeVal.PAT->get());
3703 error("Global const reference must be a pointer type, not" +
3704 yyvsp[-1].TypeVal.PAT->get()->getDescription());
3706 // ConstExprs can exist in the body of a function, thus creating
3707 // GlobalValues whenever they refer to a variable. Because we are in
3708 // the context of a function, getExistingValue will search the functions
3709 // symbol table instead of the module symbol table for the global symbol,
3710 // which throws things all off. To get around this, we just tell
3711 // getExistingValue that we are at global scope here.
3713 Function *SavedCurFn = CurFun.CurrentFunction;
3714 CurFun.CurrentFunction = 0;
3715 Value *V = getExistingValue(Ty, yyvsp[0].ValIDVal);
3716 CurFun.CurrentFunction = SavedCurFn;
3718 // If this is an initializer for a constant pointer, which is referencing a
3719 // (currently) undefined variable, create a stub now that shall be replaced
3720 // in the future with the right type of variable.
3723 assert(isa<PointerType>(Ty) && "Globals may only be used as pointers");
3724 const PointerType *PT = cast<PointerType>(Ty);
3726 // First check to see if the forward references value is already created!
3727 PerModuleInfo::GlobalRefsType::iterator I =
3728 CurModule.GlobalRefs.find(std::make_pair(PT, yyvsp[0].ValIDVal));
3730 if (I != CurModule.GlobalRefs.end()) {
3731 V = I->second; // Placeholder already exists, use it...
3732 yyvsp[0].ValIDVal.destroy();
3735 if (yyvsp[0].ValIDVal.Type == ValID::NameVal) Name = yyvsp[0].ValIDVal.Name;
3737 // Create the forward referenced global.
3739 if (const FunctionType *FTy =
3740 dyn_cast<FunctionType>(PT->getElementType())) {
3741 GV = new Function(FTy, GlobalValue::ExternalLinkage, Name,
3742 CurModule.CurrentModule);
3744 GV = new GlobalVariable(PT->getElementType(), false,
3745 GlobalValue::ExternalLinkage, 0,
3746 Name, CurModule.CurrentModule);
3749 // Keep track of the fact that we have a forward ref to recycle it
3750 CurModule.GlobalRefs.insert(std::make_pair(std::make_pair(PT, yyvsp[0].ValIDVal), GV));
3754 yyval.ConstVal.C = cast<GlobalValue>(V);
3755 yyval.ConstVal.S = yyvsp[-1].TypeVal.S;
3756 delete yyvsp[-1].TypeVal.PAT; // Free the type handle
3760 #line 2167 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3762 if (yyvsp[-1].TypeVal.PAT->get() != yyvsp[0].ConstVal.C->getType())
3763 error("Mismatched types for constant expression");
3764 yyval.ConstVal = yyvsp[0].ConstVal;
3765 yyval.ConstVal.S = yyvsp[-1].TypeVal.S;
3766 delete yyvsp[-1].TypeVal.PAT;
3770 #line 2174 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3772 const Type *Ty = yyvsp[-1].TypeVal.PAT->get();
3773 if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
3774 error("Cannot create a null initialized value of this type");
3775 yyval.ConstVal.C = Constant::getNullValue(Ty);
3776 yyval.ConstVal.S = yyvsp[-1].TypeVal.S;
3777 delete yyvsp[-1].TypeVal.PAT;
3781 #line 2182 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3782 { // integral constants
3783 const Type *Ty = yyvsp[-1].PrimType.T;
3784 if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].SInt64Val))
3785 error("Constant value doesn't fit in type");
3786 yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].SInt64Val);
3787 yyval.ConstVal.S = Signed;
3791 #line 2189 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3792 { // integral constants
3793 const Type *Ty = yyvsp[-1].PrimType.T;
3794 if (!ConstantInt::isValueValidForType(Ty, yyvsp[0].UInt64Val))
3795 error("Constant value doesn't fit in type");
3796 yyval.ConstVal.C = ConstantInt::get(Ty, yyvsp[0].UInt64Val);
3797 yyval.ConstVal.S = Unsigned;
3801 #line 2196 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3802 { // Boolean constants
3803 yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, true);
3804 yyval.ConstVal.S = Unsigned;
3808 #line 2200 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3809 { // Boolean constants
3810 yyval.ConstVal.C = ConstantInt::get(Type::Int1Ty, false);
3811 yyval.ConstVal.S = Unsigned;
3815 #line 2204 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3816 { // Float & Double constants
3817 if (!ConstantFP::isValueValidForType(yyvsp[-1].PrimType.T, yyvsp[0].FPVal))
3818 error("Floating point constant invalid for type");
3819 yyval.ConstVal.C = ConstantFP::get(yyvsp[-1].PrimType.T, yyvsp[0].FPVal);
3820 yyval.ConstVal.S = Signless;
3824 #line 2213 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3826 const Type* SrcTy = yyvsp[-3].ConstVal.C->getType();
3827 const Type* DstTy = yyvsp[-1].TypeVal.PAT->get();
3828 Signedness SrcSign = yyvsp[-3].ConstVal.S;
3829 Signedness DstSign = yyvsp[-1].TypeVal.S;
3830 if (!SrcTy->isFirstClassType())
3831 error("cast constant expression from a non-primitive type: '" +
3832 SrcTy->getDescription() + "'");
3833 if (!DstTy->isFirstClassType())
3834 error("cast constant expression to a non-primitive type: '" +
3835 DstTy->getDescription() + "'");
3836 yyval.ConstVal.C = cast<Constant>(getCast(yyvsp[-5].CastOpVal, yyvsp[-3].ConstVal.C, SrcSign, DstTy, DstSign));
3837 yyval.ConstVal.S = DstSign;
3838 delete yyvsp[-1].TypeVal.PAT;
3842 #line 2228 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3844 const Type *Ty = yyvsp[-2].ConstVal.C->getType();
3845 if (!isa<PointerType>(Ty))
3846 error("GetElementPtr requires a pointer operand");
3848 std::vector<Value*> VIndices;
3849 std::vector<Constant*> CIndices;
3850 upgradeGEPIndices(yyvsp[-2].ConstVal.C->getType(), yyvsp[-1].ValueList, VIndices, &CIndices);
3852 delete yyvsp[-1].ValueList;
3853 yyval.ConstVal.C = ConstantExpr::getGetElementPtr(yyvsp[-2].ConstVal.C, &CIndices[0], CIndices.size());
3854 yyval.ConstVal.S = Signless;
3858 #line 2241 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3860 if (!yyvsp[-5].ConstVal.C->getType()->isInteger() ||
3861 cast<IntegerType>(yyvsp[-5].ConstVal.C->getType())->getBitWidth() != 1)
3862 error("Select condition must be bool type");
3863 if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType())
3864 error("Select operand types must match");
3865 yyval.ConstVal.C = ConstantExpr::getSelect(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3866 yyval.ConstVal.S = Unsigned;
3870 #line 2250 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3872 const Type *Ty = yyvsp[-3].ConstVal.C->getType();
3873 if (Ty != yyvsp[-1].ConstVal.C->getType())
3874 error("Binary operator types must match");
3875 // First, make sure we're dealing with the right opcode by upgrading from
3876 // obsolete versions.
3877 Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S);
3879 // HACK: llvm 1.3 and earlier used to emit invalid pointer constant exprs.
3880 // To retain backward compatibility with these early compilers, we emit a
3881 // cast to the appropriate integer type automatically if we are in the
3882 // broken case. See PR424 for more information.
3883 if (!isa<PointerType>(Ty)) {
3884 yyval.ConstVal.C = ConstantExpr::get(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3886 const Type *IntPtrTy = 0;
3887 switch (CurModule.CurrentModule->getPointerSize()) {
3888 case Module::Pointer32: IntPtrTy = Type::Int32Ty; break;
3889 case Module::Pointer64: IntPtrTy = Type::Int64Ty; break;
3890 default: error("invalid pointer binary constant expr");
3892 yyval.ConstVal.C = ConstantExpr::get(Opcode,
3893 ConstantExpr::getCast(Instruction::PtrToInt, yyvsp[-3].ConstVal.C, IntPtrTy),
3894 ConstantExpr::getCast(Instruction::PtrToInt, yyvsp[-1].ConstVal.C, IntPtrTy));
3895 yyval.ConstVal.C = ConstantExpr::getCast(Instruction::IntToPtr, yyval.ConstVal.C, Ty);
3897 yyval.ConstVal.S = yyvsp[-3].ConstVal.S;
3901 #line 2278 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3903 const Type* Ty = yyvsp[-3].ConstVal.C->getType();
3904 if (Ty != yyvsp[-1].ConstVal.C->getType())
3905 error("Logical operator types must match");
3906 if (!Ty->isInteger()) {
3907 if (!isa<VectorType>(Ty) ||
3908 !cast<VectorType>(Ty)->getElementType()->isInteger())
3909 error("Logical operator requires integer operands");
3911 Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S);
3912 yyval.ConstVal.C = ConstantExpr::get(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3913 yyval.ConstVal.S = yyvsp[-3].ConstVal.S;
3917 #line 2291 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3919 const Type* Ty = yyvsp[-3].ConstVal.C->getType();
3920 if (Ty != yyvsp[-1].ConstVal.C->getType())
3921 error("setcc operand types must match");
3922 unsigned short pred;
3923 Instruction::OtherOps Opcode = getCompareOp(yyvsp[-5].BinaryOpVal, pred, Ty, yyvsp[-3].ConstVal.S);
3924 yyval.ConstVal.C = ConstantExpr::getCompare(Opcode, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3925 yyval.ConstVal.S = Unsigned;
3929 #line 2300 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3931 if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType())
3932 error("icmp operand types must match");
3933 yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].IPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3934 yyval.ConstVal.S = Unsigned;
3938 #line 2306 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3940 if (yyvsp[-3].ConstVal.C->getType() != yyvsp[-1].ConstVal.C->getType())
3941 error("fcmp operand types must match");
3942 yyval.ConstVal.C = ConstantExpr::getCompare(yyvsp[-5].FPred, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3943 yyval.ConstVal.S = Unsigned;
3947 #line 2312 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3949 if (!yyvsp[-1].ConstVal.C->getType()->isInteger() ||
3950 cast<IntegerType>(yyvsp[-1].ConstVal.C->getType())->getBitWidth() != 8)
3951 error("Shift count for shift constant must be unsigned byte");
3952 const Type* Ty = yyvsp[-3].ConstVal.C->getType();
3953 if (!yyvsp[-3].ConstVal.C->getType()->isInteger())
3954 error("Shift constant expression requires integer operand");
3955 Constant *ShiftAmt = ConstantExpr::getZExt(yyvsp[-1].ConstVal.C, Ty);
3956 yyval.ConstVal.C = ConstantExpr::get(getBinaryOp(yyvsp[-5].BinaryOpVal, Ty, yyvsp[-3].ConstVal.S), yyvsp[-3].ConstVal.C, ShiftAmt);
3957 yyval.ConstVal.S = yyvsp[-3].ConstVal.S;
3961 #line 2323 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3963 if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C))
3964 error("Invalid extractelement operands");
3965 yyval.ConstVal.C = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3966 yyval.ConstVal.S = yyvsp[-3].ConstVal.S;
3970 #line 2329 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3972 if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C))
3973 error("Invalid insertelement operands");
3974 yyval.ConstVal.C = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3975 yyval.ConstVal.S = yyvsp[-5].ConstVal.S;
3979 #line 2335 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3981 if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C))
3982 error("Invalid shufflevector operands");
3983 yyval.ConstVal.C = ConstantExpr::getShuffleVector(yyvsp[-5].ConstVal.C, yyvsp[-3].ConstVal.C, yyvsp[-1].ConstVal.C);
3984 yyval.ConstVal.S = yyvsp[-5].ConstVal.S;
3988 #line 2346 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3989 { (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal); ;
3992 #line 2347 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
3994 yyval.ConstVector = new std::vector<ConstInfo>();
3995 yyval.ConstVector->push_back(yyvsp[0].ConstVal);
3999 #line 2356 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4000 { yyval.BoolVal = false; ;
4003 #line 2357 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4004 { yyval.BoolVal = true; ;
4007 #line 2369 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4009 yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal;
4010 CurModule.ModuleDone();
4014 #line 2378 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4015 { yyval.ModuleVal = yyvsp[-1].ModuleVal; CurFun.FunctionDone(); ;
4018 #line 2379 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4019 { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;
4022 #line 2380 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4023 { yyval.ModuleVal = yyvsp[-3].ModuleVal; ;
4026 #line 2381 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4027 { yyval.ModuleVal = yyvsp[-1].ModuleVal; ;
4030 #line 2382 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4032 yyval.ModuleVal = CurModule.CurrentModule;
4033 // Emit an error if there are any unresolved types left.
4034 if (!CurModule.LateResolveTypes.empty()) {
4035 const ValID &DID = CurModule.LateResolveTypes.begin()->first;
4036 if (DID.Type == ValID::NameVal) {
4037 error("Reference to an undefined type: '"+DID.getName() + "'");
4039 error("Reference to an undefined type: #" + itostr(DID.Num));
4045 #line 2398 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4047 // Eagerly resolve types. This is not an optimization, this is a
4048 // requirement that is due to the fact that we could have this:
4050 // %list = type { %list * }
4051 // %list = type { %list * } ; repeated type decl
4053 // If types are not resolved eagerly, then the two types will not be
4054 // determined to be the same type!
4056 const Type* Ty = yyvsp[0].TypeVal.PAT->get();
4057 ResolveTypeTo(yyvsp[-2].StrVal, Ty);
4059 if (!setTypeName(Ty, yyvsp[-2].StrVal) && !yyvsp[-2].StrVal) {
4060 // If this is a named type that is not a redefinition, add it to the slot
4062 CurModule.Types.push_back(Ty);
4064 delete yyvsp[0].TypeVal.PAT;
4068 #line 2418 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4069 { // Function prototypes can be in const pool
4073 #line 2420 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4074 { // Asm blocks can be in the const pool
4078 #line 2422 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4080 if (yyvsp[0].ConstVal.C == 0)
4081 error("Global value initializer is not a constant");
4082 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, yyvsp[-2].Linkage, yyvsp[-1].BoolVal, yyvsp[0].ConstVal.C->getType(), yyvsp[0].ConstVal.C);
4086 #line 2426 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4092 #line 2429 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4094 const Type *Ty = yyvsp[0].TypeVal.PAT->get();
4095 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage, yyvsp[-1].BoolVal, Ty, 0);
4096 delete yyvsp[0].TypeVal.PAT;
4100 #line 2433 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4106 #line 2436 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4108 const Type *Ty = yyvsp[0].TypeVal.PAT->get();
4109 CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::DLLImportLinkage, yyvsp[-1].BoolVal, Ty, 0);
4110 delete yyvsp[0].TypeVal.PAT;
4114 #line 2440 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4120 #line 2443 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4122 const Type *Ty = yyvsp[0].TypeVal.PAT->get();
4124 ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalWeakLinkage, yyvsp[-1].BoolVal, Ty, 0);
4125 delete yyvsp[0].TypeVal.PAT;
4129 #line 2448 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4135 #line 2451 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4140 #line 2453 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4145 #line 2455 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4150 #line 2460 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4152 const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
4153 char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
4154 std::string NewAsm(yyvsp[0].StrVal, EndStr);
4155 free(yyvsp[0].StrVal);
4157 if (AsmSoFar.empty())
4158 CurModule.CurrentModule->setModuleInlineAsm(NewAsm);
4160 CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
4164 #line 2474 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4165 { yyval.Endianness = Module::BigEndian; ;
4168 #line 2475 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4169 { yyval.Endianness = Module::LittleEndian; ;
4172 #line 2479 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4174 CurModule.setEndianness(yyvsp[0].Endianness);
4178 #line 2482 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4180 if (yyvsp[0].UInt64Val == 32)
4181 CurModule.setPointerSize(Module::Pointer32);
4182 else if (yyvsp[0].UInt64Val == 64)
4183 CurModule.setPointerSize(Module::Pointer64);
4185 error("Invalid pointer size: '" + utostr(yyvsp[0].UInt64Val) + "'");
4189 #line 2490 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4191 CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
4192 free(yyvsp[0].StrVal);
4196 #line 2494 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4198 CurModule.CurrentModule->setDataLayout(yyvsp[0].StrVal);
4199 free(yyvsp[0].StrVal);
4203 #line 2505 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4205 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
4206 free(yyvsp[0].StrVal);
4210 #line 2509 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4212 CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
4213 free(yyvsp[0].StrVal);
4217 #line 2513 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4221 #line 2526 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4222 { yyval.StrVal = 0; ;
4225 #line 2530 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4227 if (yyvsp[-1].TypeVal.PAT->get() == Type::VoidTy)
4228 error("void typed arguments are invalid");
4229 yyval.ArgVal = new std::pair<PATypeInfo, char*>(yyvsp[-1].TypeVal, yyvsp[0].StrVal);
4233 #line 2538 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4235 yyval.ArgList = yyvsp[-2].ArgList;
4236 yyval.ArgList->push_back(*yyvsp[0].ArgVal);
4237 delete yyvsp[0].ArgVal;
4241 #line 2543 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4243 yyval.ArgList = new std::vector<std::pair<PATypeInfo,char*> >();
4244 yyval.ArgList->push_back(*yyvsp[0].ArgVal);
4245 delete yyvsp[0].ArgVal;
4249 #line 2551 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4250 { yyval.ArgList = yyvsp[0].ArgList; ;
4253 #line 2552 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4255 yyval.ArgList = yyvsp[-2].ArgList;
4257 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4258 VoidTI.S = Signless;
4259 yyval.ArgList->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
4263 #line 2559 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4265 yyval.ArgList = new std::vector<std::pair<PATypeInfo,char*> >();
4267 VoidTI.PAT = new PATypeHolder(Type::VoidTy);
4268 VoidTI.S = Signless;
4269 yyval.ArgList->push_back(std::pair<PATypeInfo, char*>(VoidTI, 0));
4273 #line 2566 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4274 { yyval.ArgList = 0; ;
4277 #line 2570 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4279 UnEscapeLexed(yyvsp[-5].StrVal);
4280 std::string FunctionName(yyvsp[-5].StrVal);
4281 free(yyvsp[-5].StrVal); // Free strdup'd memory!
4283 const Type* RetTy = yyvsp[-6].TypeVal.PAT->get();
4285 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
4286 error("LLVM functions cannot return aggregate types");
4288 std::vector<const Type*> ParamTyList;
4290 // In LLVM 2.0 the signatures of three varargs intrinsics changed to take
4291 // i8*. We check here for those names and override the parameter list
4292 // types to ensure the prototype is correct.
4293 if (FunctionName == "llvm.va_start" || FunctionName == "llvm.va_end") {
4294 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
4295 } else if (FunctionName == "llvm.va_copy") {
4296 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
4297 ParamTyList.push_back(PointerType::get(Type::Int8Ty));
4298 } else if (yyvsp[-3].ArgList) { // If there are arguments...
4299 for (std::vector<std::pair<PATypeInfo,char*> >::iterator
4300 I = yyvsp[-3].ArgList->begin(), E = yyvsp[-3].ArgList->end(); I != E; ++I) {
4301 const Type *Ty = I->first.PAT->get();
4302 ParamTyList.push_back(Ty);
4306 bool isVarArg = ParamTyList.size() && ParamTyList.back() == Type::VoidTy;
4308 ParamTyList.pop_back();
4310 // Convert the CSRet calling convention into the corresponding parameter
4312 FunctionType::ParamAttrsList ParamAttrs;
4313 if (yyvsp[-7].UIntVal == OldCallingConv::CSRet) {
4314 ParamAttrs.push_back(FunctionType::NoAttributeSet); // result
4315 ParamAttrs.push_back(FunctionType::StructRetAttribute); // first arg
4318 const FunctionType *FT = FunctionType::get(RetTy, ParamTyList, isVarArg,
4320 const PointerType *PFT = PointerType::get(FT);
4321 delete yyvsp[-6].TypeVal.PAT;
4324 if (!FunctionName.empty()) {
4325 ID = ValID::create((char*)FunctionName.c_str());
4327 ID = ValID::create((int)CurModule.Values[PFT].size());
4331 Module* M = CurModule.CurrentModule;
4333 // See if this function was forward referenced. If so, recycle the object.
4334 if (GlobalValue *FWRef = CurModule.GetForwardRefForGlobal(PFT, ID)) {
4335 // Move the function to the end of the list, from whereever it was
4336 // previously inserted.
4337 Fn = cast<Function>(FWRef);
4338 M->getFunctionList().remove(Fn);
4339 M->getFunctionList().push_back(Fn);
4340 } else if (!FunctionName.empty()) {
4341 GlobalValue *Conflict = M->getFunction(FunctionName);
4343 Conflict = M->getNamedGlobal(FunctionName);
4344 if (Conflict && PFT == Conflict->getType()) {
4345 if (!CurFun.isDeclare && !Conflict->isDeclaration()) {
4346 // We have two function definitions that conflict, same type, same
4347 // name. We should really check to make sure that this is the result
4348 // of integer type planes collapsing and generate an error if it is
4349 // not, but we'll just rename on the assumption that it is. However,
4350 // let's do it intelligently and rename the internal linkage one
4352 std::string NewName(makeNameUnique(FunctionName));
4353 if (Conflict->hasInternalLinkage()) {
4354 Conflict->setName(NewName);
4355 RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType());
4356 CurModule.RenameMap[Key] = NewName;
4357 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
4358 InsertValue(Fn, CurModule.Values);
4360 Fn = new Function(FT, CurFun.Linkage, NewName, M);
4361 InsertValue(Fn, CurModule.Values);
4362 RenameMapKey Key = std::make_pair(FunctionName,PFT);
4363 CurModule.RenameMap[Key] = NewName;
4366 // If they are not both definitions, then just use the function we
4367 // found since the types are the same.
4368 Fn = cast<Function>(Conflict);
4370 // Make sure to strip off any argument names so we can't get
4372 if (Fn->isDeclaration())
4373 for (Function::arg_iterator AI = Fn->arg_begin(),
4374 AE = Fn->arg_end(); AI != AE; ++AI)
4377 } else if (Conflict) {
4378 // We have two globals with the same name and different types.
4379 // Previously, this was permitted because the symbol table had
4380 // "type planes" and names only needed to be distinct within a
4381 // type plane. After PR411 was fixed, this is no loner the case.
4382 // To resolve this we must rename one of the two.
4383 if (Conflict->hasInternalLinkage()) {
4384 // We can safely renamed the Conflict.
4385 Conflict->setName(makeNameUnique(Conflict->getName()));
4386 RenameMapKey Key = std::make_pair(FunctionName,Conflict->getType());
4387 CurModule.RenameMap[Key] = Conflict->getName();
4388 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
4389 InsertValue(Fn, CurModule.Values);
4390 } else if (CurFun.Linkage == GlobalValue::InternalLinkage) {
4391 // We can safely rename the function we're defining
4392 std::string NewName = makeNameUnique(FunctionName);
4393 Fn = new Function(FT, CurFun.Linkage, NewName, M);
4394 InsertValue(Fn, CurModule.Values);
4395 RenameMapKey Key = std::make_pair(FunctionName,PFT);
4396 CurModule.RenameMap[Key] = NewName;
4398 // We can't quietly rename either of these things, but we must
4399 // rename one of them. Generate a warning about the renaming and
4400 // elect to rename the thing we're now defining.
4401 std::string NewName = makeNameUnique(FunctionName);
4402 warning("Renaming function '" + FunctionName + "' as '" + NewName +
4403 "' may cause linkage errors");
4404 Fn = new Function(FT, CurFun.Linkage, NewName, M);
4405 InsertValue(Fn, CurModule.Values);
4406 RenameMapKey Key = std::make_pair(FunctionName,PFT);
4407 CurModule.RenameMap[Key] = NewName;
4410 // There's no conflict, just define the function
4411 Fn = new Function(FT, CurFun.Linkage, FunctionName, M);
4412 InsertValue(Fn, CurModule.Values);
4416 CurFun.FunctionStart(Fn);
4418 if (CurFun.isDeclare) {
4419 // If we have declaration, always overwrite linkage. This will allow us
4420 // to correctly handle cases, when pointer to function is passed as
4421 // argument to another function.
4422 Fn->setLinkage(CurFun.Linkage);
4424 Fn->setCallingConv(upgradeCallingConv(yyvsp[-7].UIntVal));
4425 Fn->setAlignment(yyvsp[0].UIntVal);
4426 if (yyvsp[-1].StrVal) {
4427 Fn->setSection(yyvsp[-1].StrVal);
4428 free(yyvsp[-1].StrVal);
4431 // Add all of the arguments we parsed to the function...
4432 if (yyvsp[-3].ArgList) { // Is null if empty...
4433 if (isVarArg) { // Nuke the last entry
4434 assert(yyvsp[-3].ArgList->back().first.PAT->get() == Type::VoidTy &&
4435 yyvsp[-3].ArgList->back().second == 0 && "Not a varargs marker");
4436 delete yyvsp[-3].ArgList->back().first.PAT;
4437 yyvsp[-3].ArgList->pop_back(); // Delete the last entry
4439 Function::arg_iterator ArgIt = Fn->arg_begin();
4440 Function::arg_iterator ArgEnd = Fn->arg_end();
4441 std::vector<std::pair<PATypeInfo,char*> >::iterator I = yyvsp[-3].ArgList->begin();
4442 std::vector<std::pair<PATypeInfo,char*> >::iterator E = yyvsp[-3].ArgList->end();
4443 for ( ; I != E && ArgIt != ArgEnd; ++I, ++ArgIt) {
4444 delete I->first.PAT; // Delete the typeholder...
4445 setValueName(ArgIt, I->second); // Insert arg into symtab...
4448 delete yyvsp[-3].ArgList; // We're now done with the argument list
4453 #line 2750 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4455 yyval.FunctionVal = CurFun.CurrentFunction;
4457 // Make sure that we keep track of the linkage type even if there was a
4458 // previous "declare".
4459 yyval.FunctionVal->setLinkage(yyvsp[-2].Linkage);
4463 #line 2764 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4465 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4469 #line 2769 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4470 { yyval.Linkage = GlobalValue::ExternalLinkage; ;
4473 #line 2770 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4474 { yyval.Linkage = GlobalValue::DLLImportLinkage; ;
4477 #line 2771 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4478 { yyval.Linkage = GlobalValue::ExternalWeakLinkage; ;
4481 #line 2775 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4482 { CurFun.isDeclare = true; ;
4485 #line 2776 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4486 { CurFun.Linkage = yyvsp[0].Linkage; ;
4489 #line 2776 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4491 yyval.FunctionVal = CurFun.CurrentFunction;
4492 CurFun.FunctionDone();
4497 #line 2788 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4498 { yyval.BoolVal = false; ;
4501 #line 2789 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4502 { yyval.BoolVal = true; ;
4505 #line 2794 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4506 { yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val); ;
4509 #line 2795 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4510 { yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val); ;
4513 #line 2796 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4514 { yyval.ValIDVal = ValID::create(yyvsp[0].FPVal); ;
4517 #line 2797 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4518 { yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, true)); ;
4521 #line 2798 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4522 { yyval.ValIDVal = ValID::create(ConstantInt::get(Type::Int1Ty, false)); ;
4525 #line 2799 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4526 { yyval.ValIDVal = ValID::createNull(); ;
4529 #line 2800 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4530 { yyval.ValIDVal = ValID::createUndef(); ;
4533 #line 2801 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4534 { yyval.ValIDVal = ValID::createZeroInit(); ;
4537 #line 2802 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4538 { // Nonempty unsized packed vector
4539 const Type *ETy = (*yyvsp[-1].ConstVector)[0].C->getType();
4540 int NumElements = yyvsp[-1].ConstVector->size();
4541 VectorType* pt = VectorType::get(ETy, NumElements);
4542 PATypeHolder* PTy = new PATypeHolder(
4543 HandleUpRefs(VectorType::get(ETy, NumElements)));
4545 // Verify all elements are correct type!
4546 std::vector<Constant*> Elems;
4547 for (unsigned i = 0; i < yyvsp[-1].ConstVector->size(); i++) {
4548 Constant *C = (*yyvsp[-1].ConstVector)[i].C;
4549 const Type *CTy = C->getType();
4551 error("Element #" + utostr(i) + " is not of type '" +
4552 ETy->getDescription() +"' as required!\nIt is of type '" +
4553 CTy->getDescription() + "'");
4556 yyval.ValIDVal = ValID::create(ConstantVector::get(pt, Elems));
4557 delete PTy; delete yyvsp[-1].ConstVector;
4561 #line 2823 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4563 yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal.C);
4567 #line 2826 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4569 char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
4570 std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
4571 End = UnEscapeLexed(yyvsp[0].StrVal, true);
4572 std::string Constraints = std::string(yyvsp[0].StrVal, End);
4573 yyval.ValIDVal = ValID::createInlineAsm(AsmStr, Constraints, yyvsp[-3].BoolVal);
4574 free(yyvsp[-2].StrVal);
4575 free(yyvsp[0].StrVal);
4579 #line 2841 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4580 { yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal); ;
4583 #line 2842 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4584 { yyval.ValIDVal = ValID::create(yyvsp[0].StrVal); ;
4587 #line 2855 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4589 const Type *Ty = yyvsp[-1].TypeVal.PAT->get();
4590 yyval.ValueVal.S = yyvsp[-1].TypeVal.S;
4591 yyval.ValueVal.V = getVal(Ty, yyvsp[0].ValIDVal);
4592 delete yyvsp[-1].TypeVal.PAT;
4596 #line 2864 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4598 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4602 #line 2867 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4603 { // Do not allow functions with 0 basic blocks
4604 yyval.FunctionVal = yyvsp[-1].FunctionVal;
4608 #line 2876 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4610 setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
4611 InsertValue(yyvsp[0].TermInstVal);
4612 yyvsp[-2].BasicBlockVal->getInstList().push_back(yyvsp[0].TermInstVal);
4613 InsertValue(yyvsp[-2].BasicBlockVal);
4614 yyval.BasicBlockVal = yyvsp[-2].BasicBlockVal;
4618 #line 2886 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4620 if (yyvsp[0].InstVal.I)
4621 yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal.I);
4622 yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
4626 #line 2891 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4628 yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
4629 // Make sure to move the basic block to the correct location in the
4630 // function, instead of leaving it inserted wherever it was first
4632 Function::BasicBlockListType &BBL =
4633 CurFun.CurrentFunction->getBasicBlockList();
4634 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
4638 #line 2900 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4640 yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true);
4641 // Make sure to move the basic block to the correct location in the
4642 // function, instead of leaving it inserted wherever it was first
4644 Function::BasicBlockListType &BBL =
4645 CurFun.CurrentFunction->getBasicBlockList();
4646 BBL.splice(BBL.end(), BBL, yyval.BasicBlockVal);
4650 #line 2914 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4651 { // Return with a result...
4652 yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal.V);
4656 #line 2917 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4657 { // Return with no result...
4658 yyval.TermInstVal = new ReturnInst();
4662 #line 2920 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4663 { // Unconditional Branch...
4664 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4665 yyval.TermInstVal = new BranchInst(tmpBB);
4669 #line 2924 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4671 BasicBlock* tmpBBA = getBBVal(yyvsp[-3].ValIDVal);
4672 BasicBlock* tmpBBB = getBBVal(yyvsp[0].ValIDVal);
4673 Value* tmpVal = getVal(Type::Int1Ty, yyvsp[-6].ValIDVal);
4674 yyval.TermInstVal = new BranchInst(tmpBBA, tmpBBB, tmpVal);
4678 #line 2930 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4680 Value* tmpVal = getVal(yyvsp[-7].PrimType.T, yyvsp[-6].ValIDVal);
4681 BasicBlock* tmpBB = getBBVal(yyvsp[-3].ValIDVal);
4682 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, yyvsp[-1].JumpTable->size());
4683 yyval.TermInstVal = S;
4684 std::vector<std::pair<Constant*,BasicBlock*> >::iterator I = yyvsp[-1].JumpTable->begin(),
4685 E = yyvsp[-1].JumpTable->end();
4686 for (; I != E; ++I) {
4687 if (ConstantInt *CI = dyn_cast<ConstantInt>(I->first))
4688 S->addCase(CI, I->second);
4690 error("Switch case is constant, but not a simple integer");
4692 delete yyvsp[-1].JumpTable;
4696 #line 2945 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4698 Value* tmpVal = getVal(yyvsp[-6].PrimType.T, yyvsp[-5].ValIDVal);
4699 BasicBlock* tmpBB = getBBVal(yyvsp[-2].ValIDVal);
4700 SwitchInst *S = new SwitchInst(tmpVal, tmpBB, 0);
4701 yyval.TermInstVal = S;
4705 #line 2952 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4707 const PointerType *PFTy;
4708 const FunctionType *Ty;
4710 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-10].TypeVal.PAT->get())) ||
4711 !(Ty = dyn_cast<FunctionType>(PFTy->getElementType()))) {
4712 // Pull out the types of all of the arguments...
4713 std::vector<const Type*> ParamTypes;
4714 if (yyvsp[-7].ValueList) {
4715 for (std::vector<ValueInfo>::iterator I = yyvsp[-7].ValueList->begin(), E = yyvsp[-7].ValueList->end();
4717 ParamTypes.push_back((*I).V->getType());
4719 FunctionType::ParamAttrsList ParamAttrs;
4720 if (yyvsp[-11].UIntVal == OldCallingConv::CSRet) {
4721 ParamAttrs.push_back(FunctionType::NoAttributeSet);
4722 ParamAttrs.push_back(FunctionType::StructRetAttribute);
4724 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
4725 if (isVarArg) ParamTypes.pop_back();
4726 Ty = FunctionType::get(yyvsp[-10].TypeVal.PAT->get(), ParamTypes, isVarArg, ParamAttrs);
4727 PFTy = PointerType::get(Ty);
4729 Value *V = getVal(PFTy, yyvsp[-9].ValIDVal); // Get the function we're calling...
4730 BasicBlock *Normal = getBBVal(yyvsp[-3].ValIDVal);
4731 BasicBlock *Except = getBBVal(yyvsp[0].ValIDVal);
4733 // Create the call node...
4734 if (!yyvsp[-7].ValueList) { // Has no arguments?
4735 yyval.TermInstVal = new InvokeInst(V, Normal, Except, 0, 0);
4736 } else { // Has arguments?
4737 // Loop through FunctionType's arguments and ensure they are specified
4740 FunctionType::param_iterator I = Ty->param_begin();
4741 FunctionType::param_iterator E = Ty->param_end();
4742 std::vector<ValueInfo>::iterator ArgI = yyvsp[-7].ValueList->begin(), ArgE = yyvsp[-7].ValueList->end();
4744 std::vector<Value*> Args;
4745 for (; ArgI != ArgE && I != E; ++ArgI, ++I) {
4746 if ((*ArgI).V->getType() != *I)
4747 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
4748 (*I)->getDescription() + "'");
4749 Args.push_back((*ArgI).V);
4752 if (I != E || (ArgI != ArgE && !Ty->isVarArg()))
4753 error("Invalid number of parameters detected");
4755 yyval.TermInstVal = new InvokeInst(V, Normal, Except, &Args[0], Args.size());
4757 cast<InvokeInst>(yyval.TermInstVal)->setCallingConv(upgradeCallingConv(yyvsp[-11].UIntVal));
4758 delete yyvsp[-10].TypeVal.PAT;
4759 delete yyvsp[-7].ValueList;
4763 #line 3007 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4765 yyval.TermInstVal = new UnwindInst();
4769 #line 3010 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4771 yyval.TermInstVal = new UnreachableInst();
4775 #line 3016 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4777 yyval.JumpTable = yyvsp[-5].JumpTable;
4778 Constant *V = cast<Constant>(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal));
4781 error("May only switch on a constant pool value");
4783 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4784 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4788 #line 3026 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4790 yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
4791 Constant *V = cast<Constant>(getExistingValue(yyvsp[-4].PrimType.T, yyvsp[-3].ValIDVal));
4794 error("May only switch on a constant pool value");
4796 BasicBlock* tmpBB = getBBVal(yyvsp[0].ValIDVal);
4797 yyval.JumpTable->push_back(std::make_pair(V, tmpBB));
4801 #line 3039 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4804 if (yyvsp[-1].StrVal)
4805 if (BitCastInst *BCI = dyn_cast<BitCastInst>(yyvsp[0].InstVal.I))
4806 if (BCI->getSrcTy() == BCI->getDestTy() &&
4807 BCI->getOperand(0)->getName() == yyvsp[-1].StrVal)
4808 // This is a useless bit cast causing a name redefinition. It is
4809 // a bit cast from a type to the same type of an operand with the
4810 // same name as the name we would give this instruction. Since this
4811 // instruction results in no code generation, it is safe to omit
4812 // the instruction. This situation can occur because of collapsed
4813 // type planes. For example:
4814 // %X = add int %Y, %Z
4815 // %X = cast int %Y to uint
4816 // After upgrade, this looks like:
4817 // %X = add i32 %Y, %Z
4818 // %X = bitcast i32 to i32
4819 // The bitcast is clearly useless so we omit it.
4822 yyval.InstVal.I = 0;
4823 yyval.InstVal.S = Signless;
4825 setValueName(yyvsp[0].InstVal.I, yyvsp[-1].StrVal);
4826 InsertValue(yyvsp[0].InstVal.I);
4827 yyval.InstVal = yyvsp[0].InstVal;
4832 #line 3068 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4833 { // Used for PHI nodes
4834 yyval.PHIList.P = new std::list<std::pair<Value*, BasicBlock*> >();
4835 yyval.PHIList.S = yyvsp[-5].TypeVal.S;
4836 Value* tmpVal = getVal(yyvsp[-5].TypeVal.PAT->get(), yyvsp[-3].ValIDVal);
4837 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4838 yyval.PHIList.P->push_back(std::make_pair(tmpVal, tmpBB));
4839 delete yyvsp[-5].TypeVal.PAT;
4843 #line 3076 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4845 yyval.PHIList = yyvsp[-6].PHIList;
4846 Value* tmpVal = getVal(yyvsp[-6].PHIList.P->front().first->getType(), yyvsp[-3].ValIDVal);
4847 BasicBlock* tmpBB = getBBVal(yyvsp[-1].ValIDVal);
4848 yyvsp[-6].PHIList.P->push_back(std::make_pair(tmpVal, tmpBB));
4852 #line 3084 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4853 { // Used for call statements, and memory insts...
4854 yyval.ValueList = new std::vector<ValueInfo>();
4855 yyval.ValueList->push_back(yyvsp[0].ValueVal);
4859 #line 3088 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4861 yyval.ValueList = yyvsp[-2].ValueList;
4862 yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal);
4866 #line 3096 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4867 { yyval.ValueList = 0; ;
4870 #line 3100 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4872 yyval.BoolVal = true;
4876 #line 3103 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4878 yyval.BoolVal = false;
4882 #line 3109 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4884 const Type* Ty = yyvsp[-3].TypeVal.PAT->get();
4885 if (!Ty->isInteger() && !Ty->isFloatingPoint() && !isa<VectorType>(Ty))
4886 error("Arithmetic operator requires integer, FP, or packed operands");
4887 if (isa<VectorType>(Ty) &&
4888 (yyvsp[-4].BinaryOpVal == URemOp || yyvsp[-4].BinaryOpVal == SRemOp || yyvsp[-4].BinaryOpVal == FRemOp || yyvsp[-4].BinaryOpVal == RemOp))
4889 error("Remainder not supported on vector types");
4890 // Upgrade the opcode from obsolete versions before we do anything with it.
4891 Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-4].BinaryOpVal, Ty, yyvsp[-3].TypeVal.S);
4892 Value* val1 = getVal(Ty, yyvsp[-2].ValIDVal);
4893 Value* val2 = getVal(Ty, yyvsp[0].ValIDVal);
4894 yyval.InstVal.I = BinaryOperator::create(Opcode, val1, val2);
4895 if (yyval.InstVal.I == 0)
4896 error("binary operator returned null");
4897 yyval.InstVal.S = yyvsp[-3].TypeVal.S;
4898 delete yyvsp[-3].TypeVal.PAT;
4902 #line 3126 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4904 const Type *Ty = yyvsp[-3].TypeVal.PAT->get();
4905 if (!Ty->isInteger()) {
4906 if (!isa<VectorType>(Ty) ||
4907 !cast<VectorType>(Ty)->getElementType()->isInteger())
4908 error("Logical operator requires integral operands");
4910 Instruction::BinaryOps Opcode = getBinaryOp(yyvsp[-4].BinaryOpVal, Ty, yyvsp[-3].TypeVal.S);
4911 Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal);
4912 Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal);
4913 yyval.InstVal.I = BinaryOperator::create(Opcode, tmpVal1, tmpVal2);
4914 if (yyval.InstVal.I == 0)
4915 error("binary operator returned null");
4916 yyval.InstVal.S = yyvsp[-3].TypeVal.S;
4917 delete yyvsp[-3].TypeVal.PAT;
4921 #line 3142 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4923 const Type* Ty = yyvsp[-3].TypeVal.PAT->get();
4924 if(isa<VectorType>(Ty))
4925 error("VectorTypes currently not supported in setcc instructions");
4926 unsigned short pred;
4927 Instruction::OtherOps Opcode = getCompareOp(yyvsp[-4].BinaryOpVal, pred, Ty, yyvsp[-3].TypeVal.S);
4928 Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal);
4929 Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal);
4930 yyval.InstVal.I = CmpInst::create(Opcode, pred, tmpVal1, tmpVal2);
4931 if (yyval.InstVal.I == 0)
4932 error("binary operator returned null");
4933 yyval.InstVal.S = Unsigned;
4934 delete yyvsp[-3].TypeVal.PAT;
4938 #line 3156 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4940 const Type *Ty = yyvsp[-3].TypeVal.PAT->get();
4941 if (isa<VectorType>(Ty))
4942 error("VectorTypes currently not supported in icmp instructions");
4943 else if (!Ty->isInteger() && !isa<PointerType>(Ty))
4944 error("icmp requires integer or pointer typed operands");
4945 Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal);
4946 Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal);
4947 yyval.InstVal.I = new ICmpInst(yyvsp[-4].IPred, tmpVal1, tmpVal2);
4948 yyval.InstVal.S = Unsigned;
4949 delete yyvsp[-3].TypeVal.PAT;
4953 #line 3168 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4955 const Type *Ty = yyvsp[-3].TypeVal.PAT->get();
4956 if (isa<VectorType>(Ty))
4957 error("VectorTypes currently not supported in fcmp instructions");
4958 else if (!Ty->isFloatingPoint())
4959 error("fcmp instruction requires floating point operands");
4960 Value* tmpVal1 = getVal(Ty, yyvsp[-2].ValIDVal);
4961 Value* tmpVal2 = getVal(Ty, yyvsp[0].ValIDVal);
4962 yyval.InstVal.I = new FCmpInst(yyvsp[-4].FPred, tmpVal1, tmpVal2);
4963 yyval.InstVal.S = Unsigned;
4964 delete yyvsp[-3].TypeVal.PAT;
4968 #line 3180 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4970 warning("Use of obsolete 'not' instruction: Replacing with 'xor");
4971 const Type *Ty = yyvsp[0].ValueVal.V->getType();
4972 Value *Ones = ConstantInt::getAllOnesValue(Ty);
4974 error("Expected integral type for not instruction");
4975 yyval.InstVal.I = BinaryOperator::create(Instruction::Xor, yyvsp[0].ValueVal.V, Ones);
4976 if (yyval.InstVal.I == 0)
4977 error("Could not create a xor instruction");
4978 yyval.InstVal.S = yyvsp[0].ValueVal.S
4982 #line 3191 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
4984 if (!yyvsp[0].ValueVal.V->getType()->isInteger() ||
4985 cast<IntegerType>(yyvsp[0].ValueVal.V->getType())->getBitWidth() != 8)
4986 error("Shift amount must be int8");
4987 const Type* Ty = yyvsp[-2].ValueVal.V->getType();
4988 if (!Ty->isInteger())
4989 error("Shift constant expression requires integer operand");
4990 Value* ShiftAmt = 0;
4991 if (cast<IntegerType>(Ty)->getBitWidth() > Type::Int8Ty->getBitWidth())
4992 if (Constant *C = dyn_cast<Constant>(yyvsp[0].ValueVal.V))
4993 ShiftAmt = ConstantExpr::getZExt(C, Ty);
4995 ShiftAmt = new ZExtInst(yyvsp[0].ValueVal.V, Ty, makeNameUnique("shift"), CurBB);
4997 ShiftAmt = yyvsp[0].ValueVal.V;
4998 yyval.InstVal.I = BinaryOperator::create(getBinaryOp(yyvsp[-3].BinaryOpVal, Ty, yyvsp[-2].ValueVal.S), yyvsp[-2].ValueVal.V, ShiftAmt);
4999 yyval.InstVal.S = yyvsp[-2].ValueVal.S;
5003 #line 3209 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5005 const Type *DstTy = yyvsp[0].TypeVal.PAT->get();
5006 if (!DstTy->isFirstClassType())
5007 error("cast instruction to a non-primitive type: '" +
5008 DstTy->getDescription() + "'");
5009 yyval.InstVal.I = cast<Instruction>(getCast(yyvsp[-3].CastOpVal, yyvsp[-2].ValueVal.V, yyvsp[-2].ValueVal.S, DstTy, yyvsp[0].TypeVal.S, true));
5010 yyval.InstVal.S = yyvsp[0].TypeVal.S;
5011 delete yyvsp[0].TypeVal.PAT;
5015 #line 3218 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5017 if (!yyvsp[-4].ValueVal.V->getType()->isInteger() ||
5018 cast<IntegerType>(yyvsp[-4].ValueVal.V->getType())->getBitWidth() != 1)
5019 error("select condition must be bool");
5020 if (yyvsp[-2].ValueVal.V->getType() != yyvsp[0].ValueVal.V->getType())
5021 error("select value types should match");
5022 yyval.InstVal.I = new SelectInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V);
5023 yyval.InstVal.S = yyvsp[-4].ValueVal.S;
5027 #line 3227 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5029 const Type *Ty = yyvsp[0].TypeVal.PAT->get();
5031 yyval.InstVal.I = new VAArgInst(yyvsp[-2].ValueVal.V, Ty);
5032 yyval.InstVal.S = yyvsp[0].TypeVal.S;
5033 delete yyvsp[0].TypeVal.PAT;
5037 #line 3234 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5039 const Type* ArgTy = yyvsp[-2].ValueVal.V->getType();
5040 const Type* DstTy = yyvsp[0].TypeVal.PAT->get();
5041 ObsoleteVarArgs = true;
5042 Function* NF = cast<Function>(CurModule.CurrentModule->
5043 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
5046 //foo = alloca 1 of t
5050 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vaarg.fix");
5051 CurBB->getInstList().push_back(foo);
5052 CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal.V);
5053 CurBB->getInstList().push_back(bar);
5054 CurBB->getInstList().push_back(new StoreInst(bar, foo));
5055 yyval.InstVal.I = new VAArgInst(foo, DstTy);
5056 yyval.InstVal.S = yyvsp[0].TypeVal.S;
5057 delete yyvsp[0].TypeVal.PAT;
5061 #line 3255 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5063 const Type* ArgTy = yyvsp[-2].ValueVal.V->getType();
5064 const Type* DstTy = yyvsp[0].TypeVal.PAT->get();
5065 ObsoleteVarArgs = true;
5066 Function* NF = cast<Function>(CurModule.CurrentModule->
5067 getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0));
5069 //b = vanext a, t ->
5070 //foo = alloca 1 of t
5073 //tmp = vaarg foo, t
5075 AllocaInst* foo = new AllocaInst(ArgTy, 0, "vanext.fix");
5076 CurBB->getInstList().push_back(foo);
5077 CallInst* bar = new CallInst(NF, yyvsp[-2].ValueVal.V);
5078 CurBB->getInstList().push_back(bar);
5079 CurBB->getInstList().push_back(new StoreInst(bar, foo));
5080 Instruction* tmp = new VAArgInst(foo, DstTy);
5081 CurBB->getInstList().push_back(tmp);
5082 yyval.InstVal.I = new LoadInst(foo);
5083 yyval.InstVal.S = yyvsp[0].TypeVal.S;
5084 delete yyvsp[0].TypeVal.PAT;
5088 #line 3279 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5090 if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V))
5091 error("Invalid extractelement operands");
5092 yyval.InstVal.I = new ExtractElementInst(yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V);
5093 yyval.InstVal.S = yyvsp[-2].ValueVal.S;
5097 #line 3285 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5099 if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V))
5100 error("Invalid insertelement operands");
5101 yyval.InstVal.I = new InsertElementInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V);
5102 yyval.InstVal.S = yyvsp[-4].ValueVal.S;
5106 #line 3291 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5108 if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V))
5109 error("Invalid shufflevector operands");
5110 yyval.InstVal.I = new ShuffleVectorInst(yyvsp[-4].ValueVal.V, yyvsp[-2].ValueVal.V, yyvsp[0].ValueVal.V);
5111 yyval.InstVal.S = yyvsp[-4].ValueVal.S;
5115 #line 3297 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5117 const Type *Ty = yyvsp[0].PHIList.P->front().first->getType();
5118 if (!Ty->isFirstClassType())
5119 error("PHI node operands must be of first class type");
5120 PHINode *PHI = new PHINode(Ty);
5121 PHI->reserveOperandSpace(yyvsp[0].PHIList.P->size());
5122 while (yyvsp[0].PHIList.P->begin() != yyvsp[0].PHIList.P->end()) {
5123 if (yyvsp[0].PHIList.P->front().first->getType() != Ty)
5124 error("All elements of a PHI node must be of the same type");
5125 PHI->addIncoming(yyvsp[0].PHIList.P->front().first, yyvsp[0].PHIList.P->front().second);
5126 yyvsp[0].PHIList.P->pop_front();
5128 yyval.InstVal.I = PHI;
5129 yyval.InstVal.S = yyvsp[0].PHIList.S;
5130 delete yyvsp[0].PHIList.P; // Free the list...
5134 #line 3313 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5137 // Handle the short call syntax
5138 const PointerType *PFTy;
5139 const FunctionType *FTy;
5140 if (!(PFTy = dyn_cast<PointerType>(yyvsp[-4].TypeVal.PAT->get())) ||
5141 !(FTy = dyn_cast<FunctionType>(PFTy->getElementType()))) {
5142 // Pull out the types of all of the arguments...
5143 std::vector<const Type*> ParamTypes;
5144 if (yyvsp[-1].ValueList) {
5145 for (std::vector<ValueInfo>::iterator I = yyvsp[-1].ValueList->begin(), E = yyvsp[-1].ValueList->end();
5147 ParamTypes.push_back((*I).V->getType());
5150 FunctionType::ParamAttrsList ParamAttrs;
5151 if (yyvsp[-5].UIntVal == OldCallingConv::CSRet) {
5152 ParamAttrs.push_back(FunctionType::NoAttributeSet);
5153 ParamAttrs.push_back(FunctionType::StructRetAttribute);
5155 bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy;
5156 if (isVarArg) ParamTypes.pop_back();
5158 const Type *RetTy = yyvsp[-4].TypeVal.PAT->get();
5159 if (!RetTy->isFirstClassType() && RetTy != Type::VoidTy)
5160 error("Functions cannot return aggregate types");
5162 FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs);
5163 PFTy = PointerType::get(FTy);
5166 // First upgrade any intrinsic calls.
5167 std::vector<Value*> Args;
5168 if (yyvsp[-1].ValueList)
5169 for (unsigned i = 0, e = yyvsp[-1].ValueList->size(); i < e; ++i)
5170 Args.push_back((*yyvsp[-1].ValueList)[i].V);
5171 Instruction *Inst = upgradeIntrinsicCall(FTy, yyvsp[-3].ValIDVal, Args);
5173 // If we got an upgraded intrinsic
5175 yyval.InstVal.I = Inst;
5176 yyval.InstVal.S = Signless;
5178 // Get the function we're calling
5179 Value *V = getVal(PFTy, yyvsp[-3].ValIDVal);
5181 // Check the argument values match
5182 if (!yyvsp[-1].ValueList) { // Has no arguments?
5183 // Make sure no arguments is a good thing!
5184 if (FTy->getNumParams() != 0)
5185 error("No arguments passed to a function that expects arguments");
5186 } else { // Has arguments?
5187 // Loop through FunctionType's arguments and ensure they are specified
5190 FunctionType::param_iterator I = FTy->param_begin();
5191 FunctionType::param_iterator E = FTy->param_end();
5192 std::vector<ValueInfo>::iterator ArgI = yyvsp[-1].ValueList->begin(), ArgE = yyvsp[-1].ValueList->end();
5194 for (; ArgI != ArgE && I != E; ++ArgI, ++I)
5195 if ((*ArgI).V->getType() != *I)
5196 error("Parameter " +(*ArgI).V->getName()+ " is not of type '" +
5197 (*I)->getDescription() + "'");
5199 if (I != E || (ArgI != ArgE && !FTy->isVarArg()))
5200 error("Invalid number of parameters detected");
5203 // Create the call instruction
5204 CallInst *CI = new CallInst(V, &Args[0], Args.size());
5205 CI->setTailCall(yyvsp[-6].BoolVal);
5206 CI->setCallingConv(upgradeCallingConv(yyvsp[-5].UIntVal));
5207 yyval.InstVal.I = CI;
5208 yyval.InstVal.S = yyvsp[-4].TypeVal.S;
5210 delete yyvsp[-4].TypeVal.PAT;
5211 delete yyvsp[-1].ValueList;
5215 #line 3391 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5217 yyval.InstVal = yyvsp[0].InstVal;
5221 #line 3399 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5222 { yyval.ValueList = yyvsp[0].ValueList; ;
5225 #line 3400 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5226 { yyval.ValueList = new std::vector<ValueInfo>(); ;
5229 #line 3404 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5230 { yyval.BoolVal = true; ;
5233 #line 3405 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5234 { yyval.BoolVal = false; ;
5237 #line 3409 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5239 const Type *Ty = yyvsp[-1].TypeVal.PAT->get();
5240 yyval.InstVal.S = yyvsp[-1].TypeVal.S;
5241 yyval.InstVal.I = new MallocInst(Ty, 0, yyvsp[0].UIntVal);
5242 delete yyvsp[-1].TypeVal.PAT;
5246 #line 3415 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5248 const Type *Ty = yyvsp[-4].TypeVal.PAT->get();
5249 yyval.InstVal.S = yyvsp[-4].TypeVal.S;
5250 yyval.InstVal.I = new MallocInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
5251 delete yyvsp[-4].TypeVal.PAT;
5255 #line 3421 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5257 const Type *Ty = yyvsp[-1].TypeVal.PAT->get();
5258 yyval.InstVal.S = yyvsp[-1].TypeVal.S;
5259 yyval.InstVal.I = new AllocaInst(Ty, 0, yyvsp[0].UIntVal);
5260 delete yyvsp[-1].TypeVal.PAT;
5264 #line 3427 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5266 const Type *Ty = yyvsp[-4].TypeVal.PAT->get();
5267 yyval.InstVal.S = yyvsp[-4].TypeVal.S;
5268 yyval.InstVal.I = new AllocaInst(Ty, getVal(yyvsp[-2].PrimType.T, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
5269 delete yyvsp[-4].TypeVal.PAT;
5273 #line 3433 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5275 const Type *PTy = yyvsp[0].ValueVal.V->getType();
5276 if (!isa<PointerType>(PTy))
5277 error("Trying to free nonpointer type '" + PTy->getDescription() + "'");
5278 yyval.InstVal.I = new FreeInst(yyvsp[0].ValueVal.V);
5279 yyval.InstVal.S = Signless;
5283 #line 3440 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5285 const Type* Ty = yyvsp[-1].TypeVal.PAT->get();
5286 yyval.InstVal.S = yyvsp[-1].TypeVal.S;
5287 if (!isa<PointerType>(Ty))
5288 error("Can't load from nonpointer type: " + Ty->getDescription());
5289 if (!cast<PointerType>(Ty)->getElementType()->isFirstClassType())
5290 error("Can't load from pointer of non-first-class type: " +
5291 Ty->getDescription());
5292 Value* tmpVal = getVal(Ty, yyvsp[0].ValIDVal);
5293 yyval.InstVal.I = new LoadInst(tmpVal, "", yyvsp[-3].BoolVal);
5294 delete yyvsp[-1].TypeVal.PAT;
5298 #line 3452 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5300 const PointerType *PTy = dyn_cast<PointerType>(yyvsp[-1].TypeVal.PAT->get());
5302 error("Can't store to a nonpointer type: " +
5303 yyvsp[-1].TypeVal.PAT->get()->getDescription());
5304 const Type *ElTy = PTy->getElementType();
5305 Value *StoreVal = yyvsp[-3].ValueVal.V;
5306 Value* tmpVal = getVal(PTy, yyvsp[0].ValIDVal);
5307 if (ElTy != yyvsp[-3].ValueVal.V->getType()) {
5308 StoreVal = handleSRetFuncTypeMerge(yyvsp[-3].ValueVal.V, ElTy);
5310 error("Can't store '" + yyvsp[-3].ValueVal.V->getType()->getDescription() +
5311 "' into space of type '" + ElTy->getDescription() + "'");
5313 PTy = PointerType::get(StoreVal->getType());
5314 if (Constant *C = dyn_cast<Constant>(tmpVal))
5315 tmpVal = ConstantExpr::getBitCast(C, PTy);
5317 tmpVal = new BitCastInst(tmpVal, PTy, "upgrd.cast", CurBB);
5320 yyval.InstVal.I = new StoreInst(StoreVal, tmpVal, yyvsp[-5].BoolVal);
5321 yyval.InstVal.S = Signless;
5322 delete yyvsp[-1].TypeVal.PAT;
5326 #line 3477 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5328 const Type* Ty = yyvsp[-2].TypeVal.PAT->get();
5329 if (!isa<PointerType>(Ty))
5330 error("getelementptr insn requires pointer operand");
5332 std::vector<Value*> VIndices;
5333 upgradeGEPIndices(Ty, yyvsp[0].ValueList, VIndices);
5335 Value* tmpVal = getVal(Ty, yyvsp[-1].ValIDVal);
5336 yyval.InstVal.I = new GetElementPtrInst(tmpVal, &VIndices[0], VIndices.size());
5337 yyval.InstVal.S = Signless;
5338 delete yyvsp[-2].TypeVal.PAT;
5339 delete yyvsp[0].ValueList;
5343 /* the action file gets copied in in place of this dollarsign */
5344 #line 543 "/usr/share/bison.simple"
5355 short *ssp1 = yyss - 1;
5356 fprintf (stderr, "state stack now");
5357 while (ssp1 != yyssp)
5358 fprintf (stderr, " %d", *++ssp1);
5359 fprintf (stderr, "\n");
5369 yylsp->first_line = yylloc.first_line;
5370 yylsp->first_column = yylloc.first_column;
5371 yylsp->last_line = (yylsp-1)->last_line;
5372 yylsp->last_column = (yylsp-1)->last_column;
5377 yylsp->last_line = (yylsp+yylen-1)->last_line;
5378 yylsp->last_column = (yylsp+yylen-1)->last_column;
5382 /* Now "shift" the result of the reduction.
5383 Determine what state that goes to,
5384 based on the state we popped back to
5385 and the rule number reduced by. */
5389 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
5390 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
5391 yystate = yytable[yystate];
5393 yystate = yydefgoto[yyn - YYNTBASE];
5397 yyerrlab: /* here on detecting error */
5400 /* If not already recovering from an error, report this error. */
5404 #ifdef YYERROR_VERBOSE
5405 yyn = yypact[yystate];
5407 if (yyn > YYFLAG && yyn < YYLAST)
5414 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
5415 for (x = (yyn < 0 ? -yyn : 0);
5416 x < (sizeof(yytname) / sizeof(char *)); x++)
5417 if (yycheck[x + yyn] == x)
5418 size += strlen(yytname[x]) + 15, count++;
5419 msg = (char *) malloc(size + 15);
5422 strcpy(msg, "parse error");
5427 for (x = (yyn < 0 ? -yyn : 0);
5428 x < (sizeof(yytname) / sizeof(char *)); x++)
5429 if (yycheck[x + yyn] == x)
5431 strcat(msg, count == 0 ? ", expecting `" : " or `");
5432 strcat(msg, yytname[x]);
5441 yyerror ("parse error; also virtual memory exceeded");
5444 #endif /* YYERROR_VERBOSE */
5445 yyerror("parse error");
5449 yyerrlab1: /* here on error raised explicitly by an action */
5451 if (yyerrstatus == 3)
5453 /* if just tried and failed to reuse lookahead token after an error, discard it. */
5455 /* return failure if at end of input */
5456 if (yychar == YYEOF)
5461 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
5467 /* Else will try to reuse lookahead token
5468 after shifting the error token. */
5470 yyerrstatus = 3; /* Each real token shifted decrements this */
5474 yyerrdefault: /* current state does not do anything special for the error token. */
5477 /* This is wrong; only states that explicitly want error tokens
5478 should shift them. */
5479 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
5480 if (yyn) goto yydefault;
5483 yyerrpop: /* pop the current state because it cannot handle the error token */
5485 if (yyssp == yyss) YYABORT;
5495 short *ssp1 = yyss - 1;
5496 fprintf (stderr, "Error: state stack now");
5497 while (ssp1 != yyssp)
5498 fprintf (stderr, " %d", *++ssp1);
5499 fprintf (stderr, "\n");
5505 yyn = yypact[yystate];
5510 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
5529 fprintf(stderr, "Shifting error token, ");
5541 /* YYACCEPT comes here. */
5553 /* YYABORT comes here. */
5564 #line 3493 "/Users/sabre/cvs/llvm/tools/llvm-upgrade/UpgradeParser.y"
5567 int yyerror(const char *ErrorMsg) {
5569 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5570 + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
5571 std::string errMsg = where + "error: " + std::string(ErrorMsg);
5572 if (yychar != YYEMPTY && yychar != 0)
5573 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
5575 std::cerr << "llvm-upgrade: " << errMsg << '\n';
5576 std::cout << "llvm-upgrade: parse failed.\n";
5580 void warning(const std::string& ErrorMsg) {
5582 = std::string((CurFilename == "-") ? std::string("<stdin>") : CurFilename)
5583 + ":" + llvm::utostr((unsigned) Upgradelineno) + ": ";
5584 std::string errMsg = where + "warning: " + std::string(ErrorMsg);
5585 if (yychar != YYEMPTY && yychar != 0)
5586 errMsg += " while reading token '" + std::string(Upgradetext, Upgradeleng) +
5588 std::cerr << "llvm-upgrade: " << errMsg << '\n';
5591 void error(const std::string& ErrorMsg, int LineNo) {
5592 if (LineNo == -1) LineNo = Upgradelineno;
5593 Upgradelineno = LineNo;
5594 yyerror(ErrorMsg.c_str());