[mlir][Parser] Fix crash in DenseElementsAttr parser when no elements are parsed

This fixes a crash when no elements are parsed, but the type expects at least one.

Fixes PR#47763

Differential Revision: https://reviews.llvm.org/D92982
This commit is contained in:
River Riddle 2020-12-10 12:44:35 -08:00
parent 61a038f852
commit 75eca67c1c
2 changed files with 12 additions and 0 deletions

View File

@ -531,6 +531,13 @@ DenseElementsAttr TensorLiteralParser::getAttr(llvm::SMLoc loc,
return nullptr;
}
// Handle the case where no elements were parsed.
if (!hexStorage.hasValue() && storage.empty() && type.getNumElements()) {
p.emitError(loc) << "parsed zero elements, but type (" << type
<< ") expected at least 1";
return nullptr;
}
// Handle complex types in the specific element type cases below.
bool isComplex = false;
if (ComplexType complexTy = eltType.dyn_cast<ComplexType>()) {

View File

@ -687,6 +687,11 @@ func @elementsattr_toolarge1() -> () {
// -----
// expected-error@+1 {{parsed zero elements, but type ('tensor<i64>') expected at least 1}}
#attr = dense<> : tensor<i64>
// -----
func @elementsattr_toolarge2() -> () {
^bb0:
"foo"(){bar = dense<[-777]> : tensor<1xi8>} : () -> () // expected-error {{integer constant out of range}}