Index: src/sksl/SkSLIRGenerator.cpp |
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp |
index 6307087edd9d4f97233d1ea16f20aed848dc5b04..b93cbfbe9931495765f20b2e8f86e614c59c0980 100644 |
--- a/src/sksl/SkSLIRGenerator.cpp |
+++ b/src/sksl/SkSLIRGenerator.cpp |
@@ -525,6 +525,9 @@ std::unique_ptr<InterfaceBlock> IRGenerator::convertInterfaceBlock(const ASTInte |
std::unique_ptr<VarDeclarations> decl = this->convertVarDeclarations( |
*intf.fDeclarations[i], |
Variable::kGlobal_Storage); |
+ if (!decl) { |
+ return nullptr; |
+ } |
for (const auto& var : decl->fVars) { |
fields.push_back(Type::Field(var.fVar->fModifiers, var.fVar->fName, |
&var.fVar->fType)); |
@@ -1024,11 +1027,17 @@ std::unique_ptr<Expression> IRGenerator::convertConstructor( |
int rows = args[i]->fType.rows(); |
args[i] = this->coerce(std::move(args[i]), |
type.componentType().toCompound(fContext, columns, rows)); |
+ if (!args[i]) { |
+ return nullptr; |
+ } |
actual += args[i]->fType.rows() * args[i]->fType.columns(); |
} else if (args[i]->fType.kind() == Type::kScalar_Kind) { |
actual += 1; |
if (type.kind() != Type::kScalar_Kind) { |
args[i] = this->coerce(std::move(args[i]), type.componentType()); |
+ if (!args[i]) { |
+ return nullptr; |
+ } |
} |
} else { |
fErrors.error(position, "'" + args[i]->fType.description() + "' is not a valid " |
@@ -1228,6 +1237,7 @@ std::unique_ptr<Expression> IRGenerator::convertSuffixExpression( |
*newType)); |
} else { |
fErrors.error(expression.fPosition, "'[]' must follow a type name"); |
+ return nullptr; |
} |
} |
case ASTSuffix::kCall_Kind: { |