Only half-fixed. The extra semi-colon is still there. Reid Spencer wrote: > Jeff, > > This is now fixed. I wish the newer versions of bison would at least > warn about this! > > Reid. > > On Sun, 2006-12-31 at 12:42 -0800, Jeff Cohen wrote: > >> A semi-colon appears to be in the wrong place, as marked below. Some >> versions of bison complain, while others silently accept it (including >> the newest ones)--though how they interpret the grammar is not clear. >> >> Reid Spencer wrote: >> >>> Changes in directory llvm/lib/AsmParser: >>> >>> Lexer.l updated: 1.89 -> 1.90 >>> llvmAsmParser.y updated: 1.292 -> 1.293 >>> --- >>> Log message: >>> >>> For PR950: http://llvm.org/PR950 : >>> Major reorganization. This patch introduces the signedness changes for >>> the new integer types (i8, i16, i32, i64) which replace the old signed >>> versions (ubyte, sbyte, ushort, short, etc). This patch also implements >>> the function type parameter attributes feature. Together these conspired >>> to introduce new reduce/reduce errors into the grammar. Consequently, it >>> was necessary to introduce a new keyword into the grammar in order to >>> disambiguate. Without this, yacc would make incorrect shift/reduce and >>> reduce/reduce decisions and fail to parse the intended assembly. >>> >>> Changes in assembly: >>> >>> 1. The "implementation" keyword is superfluous but still supported. You >>> can use it as a sentry which will ensure there are no remaining up >>> reference types. However, this is optional as those checks are also >>> performed elsewhere. >>> >>> 2. Parameter attributes are now implemented using an at sign to >>> indicate the attribute. The attributes are placed after the type >>> in a function declaration or after the argument value in a function >>> call. For example: >>> i8 @sext %myfunc(i16 @zext) >>> call i8 @sext %myfunc(i16 @zext %someVal) >>> The facility is available for supporting additional attributes and >>> they can be combined using the @(attr1,attr2,attr3) syntax. Right >>> now the only two supported are @sext and @zext >>> >>> 3. Functions must now be defined with the "define" keyword which is >>> analagous to the "declare" keyword for function declarations. The >>> introduction of this keyword disambiguates situations where a >>> named result type is confused with a new type or gvar definition. >>> For example: >>> %MyType = type i16 >>> %MyType %func(%MyType) { ... } >>> With the introduction of optional parameter attributes between >>> the function name and the function result type, yacc will pick >>> the wrong rule to reduce unless it is disambiguated with "define" >>> before the function definition, as in: >>> define %MyType @zext %func(%MyType %someArg) { ... } >>> >>> >>> >>> --- >>> Diffs of the changes: (+413 -253) >>> >>> Lexer.l | 12 - >>> llvmAsmParser.y | 654 >>> +++++++++++++++++++++++++++++++++++--------------------- >>> 2 files changed, 413 insertions(+), 253 deletions(-) >>> >>> >>> Index: llvm/lib/AsmParser/llvmAsmParser.y >>> diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.292 >>> llvm/lib/AsmParser/llvmAsmParser.y:1.293 >>> --- llvm/lib/AsmParser/llvmAsmParser.y:1.292 Fri Dec 29 14:29:48 2006 >>> +++ llvm/lib/AsmParser/llvmAsmParser.y Sat Dec 30 23:40:12 2006 >>> >>> @@ -2307,18 +2412,31 @@ >>> }; >>> >>> >>> -ValueRefList : ResolvedVal { // Used for call statements, and memory >>> insts... >>> - $$ = new std::vector<Value*>(); >>> - $$->push_back($1); >>> +ValueRefList : Types ValueRef OptParamAttrs { >>> + if (!UpRefs.empty()) >>> + GEN_ERROR("Invalid upreference in type: " + (*$1)->getDescription()); >>> + // Used for call and invoke instructions >>> + $$ = new ValueRefList(); >>> + ValueRefListEntry E; E.Attrs = $3; E.Val = getVal($1->get(), $2); >>> + $$->push_back(E); >>> } >>> - | ValueRefList ',' ResolvedVal { >>> + | ValueRefList ',' Types ValueRef OptParamAttrs { >>> + if (!UpRefs.empty()) >>> + GEN_ERROR("Invalid upreference in type: " + (*$3)->getDescription()); >>> $$ = $1; >>> - $1->push_back($3); >>> + ValueRefListEntry E; E.Attrs = $5; E.Val = getVal($3->get(), $4); >>> + $$->push_back(E); >>> CHECK_FOR_ERROR >>> - }; >>> + } >>> + | /*empty*/ { $$ = new ValueRefList(); }; >>> >>> -// ValueRefListE - Just like ValueRefList, except that it may also be >>> empty! >>> -ValueRefListE : ValueRefList | /*empty*/ { $$ = 0; }; >>> +IndexList // Used for gep instructions and constant expressions >>> + : /*empty*/ { $$ = new std::vector<Value*>(); }; <====== bad semi-colon >>> + | IndexList ',' ResolvedVal { >>> + $$ = $1; >>> + $$->push_back($3); >>> + CHECK_FOR_ERROR >>> + } <====== missing semi-colon >>> >>> >>> >>> >> _______________________________________________ >> llvm-commits mailing list >> llvm-commits@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >> > > > > >
_______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits