message: Show the op's type and name when the shape inference is failed.
diff: @@ -152,6 +152,7 @@ static void InferShapesImpl(
  }
  }
  + try {
  for (int i = 0; i < n.output_size(); ++i) {
  if (!ctx.getOutputType(i)->has_tensor_type()) {
  continue;
  @@ -185,6 +186,11 @@ static void InferShapesImpl(
  // Make merged info available to further inference.
  valueTypesByName[n.output(i)] = existingType;
  }
  + } catch (const std::runtime_error& err) {
  + std::string op_name = n.has_name() ? n.name() : "no name";
  + std::cerr << "(op_type:" << n.op_type() << ", name:" << n.name() << "): " << err.what() << '\n';
  + throw;
  + }
  }
  }
  