Skip to content

Commit 045e591

Browse files
authored
fix a code bug which cause crash when empty variable is used, test=develop (#16080)
1 parent a177d48 commit 045e591

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

paddle/fluid/framework/details/memory_optimize_helper.cc

+7-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
#include <numeric>
2121
#include <sstream>
2222
#include <string>
23+
#include <unordered_map>
24+
#include <unordered_set>
25+
#include "paddle/fluid/framework/operator.h"
2326
#include "paddle/fluid/framework/var_desc.h"
2427
#include "paddle/fluid/platform/cpu_info.h"
2528

@@ -302,7 +305,10 @@ std::string OrderedSet::ToString() const {
302305

303306
bool NodeCanReused(ir::Node* node) {
304307
// valid the node is a var node
305-
if (node == nullptr || !node->IsVar() || node->IsCtrlVar()) return false;
308+
// vars can be @EMPTY@, @LR_DECAY_REUSE_ID@. For example, while_grad
309+
if (node == nullptr || !node->IsVar() || node->IsCtrlVar() ||
310+
node->Name() == kEmptyVarName)
311+
return false;
306312

307313
bool flag = true;
308314
// op output force generated in cpu, can not be reused.
@@ -348,10 +354,6 @@ bool NodeCanReused(const VarDesc& node) {
348354
if (shape.empty() || size < MinChunkSize()) {
349355
return false;
350356
}
351-
// vars can be @EMPTY@, @LR_DECAY_REUSE_ID@. For example, while_grad
352-
std::string name = node.Name();
353-
if (!name.empty() && name[0] == '@' && name[name.size() - 1] == '@')
354-
return false;
355357
return true;
356358
}
357359

0 commit comments

Comments
 (0)