fix an assertion with multidefs. Def inside of multiclasses don't need to

be complete.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30034 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-09-01 21:59:03 +00:00
parent bf77441605
commit 7717d0930a
3 changed files with 37 additions and 25 deletions

View File

@ -350,10 +350,10 @@ static const short yyrline[] = { 0,
458, 471, 487, 489, 489, 493, 495, 499, 502, 506, 458, 471, 487, 489, 489, 493, 495, 499, 502, 506,
523, 525, 531, 531, 532, 532, 534, 536, 540, 545, 523, 525, 531, 531, 532, 532, 534, 536, 540, 545,
550, 553, 557, 560, 565, 566, 566, 568, 568, 570, 550, 553, 557, 560, 565, 566, 566, 568, 568, 570,
577, 595, 620, 634, 639, 641, 643, 647, 656, 670, 577, 595, 620, 634, 639, 641, 643, 647, 657, 671,
673, 677, 688, 690, 692, 697, 697, 759, 759, 760, 674, 678, 689, 691, 693, 698, 698, 763, 763, 764,
760, 762, 767, 767, 770, 770, 773, 776, 780, 780, 764, 766, 771, 771, 774, 774, 777, 780, 784, 784,
782 786
}; };
#endif #endif
@ -1679,7 +1679,8 @@ case 77:
case 78: case 78:
#line 647 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 647 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
yyvsp[0].Rec->resolveReferences(); if (CurMultiClass == 0) // Def's in multiclasses aren't really defs.
yyvsp[0].Rec->resolveReferences();
// If ObjectBody has template arguments, it's an error. // If ObjectBody has template arguments, it's an error.
assert(yyvsp[0].Rec->getTemplateArgs().empty() && "How'd this get template args?"); assert(yyvsp[0].Rec->getTemplateArgs().empty() && "How'd this get template args?");
@ -1687,7 +1688,7 @@ case 78:
; ;
break;} break;}
case 79: case 79:
#line 656 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 657 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
yyval.Rec = yyvsp[0].Rec; yyval.Rec = yyvsp[0].Rec;
// Copy the template arguments for the multiclass into the def. // Copy the template arguments for the multiclass into the def.
@ -1701,20 +1702,20 @@ case 79:
; ;
break;} break;}
case 80: case 80:
#line 670 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 671 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
yyval.RecList = new std::vector<Record*>(); yyval.RecList = new std::vector<Record*>();
yyval.RecList->push_back(yyvsp[0].Rec); yyval.RecList->push_back(yyvsp[0].Rec);
; ;
break;} break;}
case 81: case 81:
#line 673 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 674 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
yyval.RecList->push_back(yyvsp[0].Rec); yyval.RecList->push_back(yyvsp[0].Rec);
; ;
break;} break;}
case 82: case 82:
#line 677 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 678 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
MultiClass *&MCE = MultiClasses[*yyvsp[0].StrVal]; MultiClass *&MCE = MultiClasses[*yyvsp[0].StrVal];
if (MCE) { if (MCE) {
@ -1726,29 +1727,29 @@ case 82:
; ;
break;} break;}
case 83: case 83:
#line 688 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 689 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
ParsingTemplateArgs = true; ParsingTemplateArgs = true;
; ;
break;} break;}
case 84: case 84:
#line 690 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 691 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
ParsingTemplateArgs = false; ParsingTemplateArgs = false;
; ;
break;} break;}
case 85: case 85:
#line 692 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 693 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
CurMultiClass = 0; CurMultiClass = 0;
; ;
break;} break;}
case 86: case 86:
#line 697 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 698 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ CurDefmPrefix = yyvsp[0].StrVal; ; { CurDefmPrefix = yyvsp[0].StrVal; ;
break;} break;}
case 87: case 87:
#line 697 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 698 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
// To instantiate a multiclass, we need to first get the multiclass, then // To instantiate a multiclass, we need to first get the multiclass, then
// instantiate each def contained in the multiclass with the SubClassRef // instantiate each def contained in the multiclass with the SubClassRef
@ -1804,6 +1805,9 @@ case 87:
exit(1); exit(1);
} }
Records.addDef(CurRec); Records.addDef(CurRec);
CurRec->resolveReferences();
CurRec = 0; CurRec = 0;
} }
@ -1812,42 +1816,42 @@ case 87:
; ;
break;} break;}
case 88: case 88:
#line 759 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 763 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{; {;
break;} break;}
case 89: case 89:
#line 759 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 763 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{; {;
break;} break;}
case 92: case 92:
#line 762 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 766 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
LetStack.back().push_back(LetRecord(*yyvsp[-3].StrVal, yyvsp[-2].BitList, yyvsp[0].Initializer)); LetStack.back().push_back(LetRecord(*yyvsp[-3].StrVal, yyvsp[-2].BitList, yyvsp[0].Initializer));
delete yyvsp[-3].StrVal; delete yyvsp[-2].BitList; delete yyvsp[-3].StrVal; delete yyvsp[-2].BitList;
; ;
break;} break;}
case 95: case 95:
#line 770 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 774 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ LetStack.push_back(std::vector<LetRecord>()); ; { LetStack.push_back(std::vector<LetRecord>()); ;
break;} break;}
case 97: case 97:
#line 773 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 777 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
LetStack.pop_back(); LetStack.pop_back();
; ;
break;} break;}
case 98: case 98:
#line 776 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 780 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{ {
LetStack.pop_back(); LetStack.pop_back();
; ;
break;} break;}
case 99: case 99:
#line 780 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 784 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{; {;
break;} break;}
case 100: case 100:
#line 780 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 784 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
{; {;
break;} break;}
} }
@ -2072,7 +2076,7 @@ yyerrhandle:
} }
return 1; return 1;
} }
#line 784 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y" #line 788 "/Volumes/ProjectsDisk/cvs/llvm/utils/TableGen/FileParser.y"
int yyerror(const char *ErrorMsg) { int yyerror(const char *ErrorMsg) {

View File

@ -645,7 +645,8 @@ ClassInst : CLASS ClassName {
}; };
DefInst : DEF DefName ObjectBody { DefInst : DEF DefName ObjectBody {
$3->resolveReferences(); if (CurMultiClass == 0) // Def's in multiclasses aren't really defs.
$3->resolveReferences();
// If ObjectBody has template arguments, it's an error. // If ObjectBody has template arguments, it's an error.
assert($3->getTemplateArgs().empty() && "How'd this get template args?"); assert($3->getTemplateArgs().empty() && "How'd this get template args?");
@ -749,6 +750,9 @@ DefMInst : DEFM ID { CurDefmPrefix = $2; } ':' SubClassRef ';' {
exit(1); exit(1);
} }
Records.addDef(CurRec); Records.addDef(CurRec);
CurRec->resolveReferences();
CurRec = 0; CurRec = 0;
} }

View File

@ -645,7 +645,8 @@ ClassInst : CLASS ClassName {
}; };
DefInst : DEF DefName ObjectBody { DefInst : DEF DefName ObjectBody {
$3->resolveReferences(); if (CurMultiClass == 0) // Def's in multiclasses aren't really defs.
$3->resolveReferences();
// If ObjectBody has template arguments, it's an error. // If ObjectBody has template arguments, it's an error.
assert($3->getTemplateArgs().empty() && "How'd this get template args?"); assert($3->getTemplateArgs().empty() && "How'd this get template args?");
@ -749,6 +750,9 @@ DefMInst : DEFM ID { CurDefmPrefix = $2; } ':' SubClassRef ';' {
exit(1); exit(1);
} }
Records.addDef(CurRec); Records.addDef(CurRec);
CurRec->resolveReferences();
CurRec = 0; CurRec = 0;
} }