提交 74daac56 编写于 作者: A A. Unique TensorFlower 提交者: Vinila Settem

[tfg][functiondef_import] Error on empty edge names

Return an error in the generic function importer if an edge name is empty.

PiperOrigin-RevId: 449953062
上级 fa2cd0a9
......@@ -38,6 +38,7 @@ limitations under the License.
#include "tensorflow/core/platform/protobuf.h"
#include "tensorflow/core/platform/status.h"
#include "tensorflow/core/protobuf/graph_debug_info.pb.h"
#include "tensorflow/core/platform/statusor.h"
using tensorflow::AttrValue;
using tensorflow::FunctionDef;
......@@ -45,6 +46,7 @@ using tensorflow::NodeDef;
using tensorflow::OpDef;
using tensorflow::OpDef_AttrDef;
using tensorflow::Status;
using tensorflow::StatusOr;
using tensorflow::errors::InvalidArgument;
using tensorflow::protobuf::RepeatedPtrField;
......@@ -171,9 +173,12 @@ Status ImportNodes(ValueMapManager value_manager,
if (node.op().empty()) return InvalidArgument("empty op type");
OperationState state(unknown_loc, absl::StrCat("tfg.", node.op()));
// Fetch the inputs, creating placeholder if an input hasn't been visited.
for (const std::string& input : node.input())
for (const std::string& input : node.input()) {
if (input.empty())
return InvalidArgument("Node '", node.name(), "' has an empty input");
state.operands.push_back(
value_manager.GetValueOrCreatePlaceholder(input));
}
// Retrieve the entry in the nodes_map for this node and infer the result
// count from what was inferred during the first traversal above.
state.types.push_back(placeholder_ty);
......@@ -465,21 +470,31 @@ Status ImportGenericFunction(
Value());
for (const auto& ret_val : func.ret()) {
auto position = output_name_to_position.find(ret_val.first);
if (position == output_name_to_position.end())
if (position == output_name_to_position.end()) {
return InvalidArgument(
"Can't import function, returned value references unknown output "
"argument ",
ret_val.first);
}
if (ret_val.second.empty()) {
return InvalidArgument("Function '", func.signature().name(),
"' has empty result name");
}
ret_vals[position->second] =
value_manager.GetValueOrCreatePlaceholder(ret_val.second);
}
for (const auto& ret_val : func.control_ret()) {
auto position = control_output_to_position.find(ret_val.first);
if (position == control_output_to_position.end())
if (position == control_output_to_position.end()) {
return InvalidArgument(
"Can't import function, returned value references unknown output "
"argument ",
ret_val.first);
}
if (ret_val.second.empty()) {
return InvalidArgument("Function '", func.signature().name(),
"' has empty control result name");
}
Value result = value_manager.GetValueOrCreatePlaceholder(
(Twine("^") + ret_val.second).str());
if (!result.getType().isa<ControlType>())
......
# RUN: not tfg-translate -graphdef-to-mlir %s 2>&1 | FileCheck %s
# CHECK: Function 'foo' has empty control result name
library {
function {
signature {
name: "foo"
control_output: "output"
}
node_def {
name: "y"
op: "NoOp"
attr {
key: "T"
value {
placeholder: "T"
}
}
}
control_ret {
key: "output"
value: ""
}
}
}
# RUN: not tfg-translate -graphdef-to-mlir %s 2>&1 | FileCheck %s
# CHECK: Node 'y' has an empty input
library {
function {
signature {
name: "foo"
}
node_def {
name: "y"
input: ""
op: "Identity"
attr {
key: "T"
value {
placeholder: "T"
}
}
}
}
}
# RUN: not tfg-translate -graphdef-to-mlir %s 2>&1 | FileCheck %s
# CHECK: Function 'foo' has empty result name
library {
function {
signature {
name: "foo"
output_arg {
name: "output"
type: DT_INT32
}
}
node_def {
name: "y"
op: "NoOp"
attr {
key: "T"
value {
placeholder: "T"
}
}
}
ret {
key: "output"
value: ""
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册