mirror of
https://github.com/intel/llvm.git
synced 2026-01-26 03:56:16 +08:00
[mlir] Fix two AttributeParser aborts
Reproducers that resulted in triggering the following asserts mlir::NamedAttribute::NamedAttribute(mlir::StringAttr, mlir::Attribute) mlir/lib/IR/Attributes.cpp:29:3 consumeToken mlir/lib/Parser/Parser.h:126 Differential Revision: https://reviews.llvm.org/D122240
This commit is contained in:
@@ -169,8 +169,10 @@ Attribute Parser::parseAttribute(Type type) {
|
||||
const char *curPointer = getToken().getLoc().getPointer();
|
||||
consumeToken(Token::colon);
|
||||
if (!consumeIf(Token::colon)) {
|
||||
state.lex.resetPointer(curPointer);
|
||||
consumeToken();
|
||||
if (getToken().isNot(Token::eof, Token::error)) {
|
||||
state.lex.resetPointer(curPointer);
|
||||
consumeToken();
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Parse the reference itself.
|
||||
@@ -271,6 +273,10 @@ ParseResult Parser::parseAttributeDict(NamedAttrList &attributes) {
|
||||
nameId = builder.getStringAttr(getTokenSpelling());
|
||||
else
|
||||
return emitError("expected attribute name");
|
||||
|
||||
if (nameId->size() == 0)
|
||||
return emitError("expected valid attribute name");
|
||||
|
||||
if (!seenKeys.insert(*nameId).second)
|
||||
return emitError("duplicate key '")
|
||||
<< nameId->getValue() << "' in dictionary attribute";
|
||||
|
||||
@@ -1643,3 +1643,14 @@ func @invalid_region_dominance_with_dominance_free_regions() {
|
||||
// -----
|
||||
|
||||
func @foo() {} // expected-error {{expected non-empty function body}}
|
||||
|
||||
// -----
|
||||
|
||||
// expected-error@+1 {{expected valid attribute name}}
|
||||
"t"(){""}
|
||||
|
||||
// -----
|
||||
|
||||
// expected-error@+2 {{expected ']'}}
|
||||
"f"() { b = [@m:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user