From 235e1ff4721eac5f946e340e4e65c1abbb8c056e Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Wed, 30 Oct 2019 13:01:24 -0700 Subject: [PATCH] [Grappler] Fix a stack-use-after-scope The problem is that Attrs stores a non-owning reference to the temporary intializer list. The lifetime of that list ends at the end of the full expression. This happens to work if TF is compiled with -fmerge-all-constants but doesn't without it. PiperOrigin-RevId: 277567188 Change-Id: Icf88e32127332cd314895524829313f71f99761d --- .../generic_layout_optimizer_transposer_test.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tensorflow/core/grappler/optimizers/generic_layout_optimizer_transposer_test.cc b/tensorflow/core/grappler/optimizers/generic_layout_optimizer_transposer_test.cc index b5145585715..9c0f2150412 100644 --- a/tensorflow/core/grappler/optimizers/generic_layout_optimizer_transposer_test.cc +++ b/tensorflow/core/grappler/optimizers/generic_layout_optimizer_transposer_test.cc @@ -203,15 +203,15 @@ Status CreateSimpleConv2DBackpropFilter(GraphDef* graph, ops::RandomUniform(scope.WithOpName("out_backprop"), {kBatchSize, kHeight, kWidth, kDepthOut}, data_type); if (padding == "EXPLICIT") { - auto attrs = ops::Conv2DBackpropFilter::Attrs() - .Dilations({1, kDilation, kDilation, 1}) - .ExplicitPaddings({0, 0, kPaddingTop, kPaddingBottom, - kPaddingLeft, kPaddingRight, 0, 0}) - .DataFormat(kSrcFormat); auto conv2d_backprop_filter = ops::Conv2DBackpropFilter( scope.WithOpName("conv2d_backprop_filter").WithDevice("/device:GPU:0"), input, {kHeight, kWidth, kDepthIn, kDepthOut}, out_backprop, - {1, 2, 4, 1}, padding, attrs); + {1, 2, 4, 1}, padding, + ops::Conv2DBackpropFilter::Attrs() + .Dilations({1, kDilation, kDilation, 1}) + .ExplicitPaddings({0, 0, kPaddingTop, kPaddingBottom, kPaddingLeft, + kPaddingRight, 0, 0}) + .DataFormat(kSrcFormat)); auto output = ops::Identity(scope.WithOpName("output"), conv2d_backprop_filter); } else {