diff --git a/paddle/fluid/framework/details/fetch_op_handle.cc b/paddle/fluid/framework/details/fetch_op_handle.cc index 4a8f201108f78dbaae64862a1828484fd9fb8874..c581149a2726323d9173048f409c503a58cfdee7 100644 --- a/paddle/fluid/framework/details/fetch_op_handle.cc +++ b/paddle/fluid/framework/details/fetch_op_handle.cc @@ -44,6 +44,12 @@ void FetchOpHandle::WaitAndMergeCPUTensors() const { data_->at(offset_).MergeLoDTensor(tensors_ptr, platform::CPUPlace()); } +template +inline T &Ref(T *ptr, ARGS &&... args) { + PADDLE_ENFORCE(ptr != nullptr, args...); + return *ptr; +} + void FetchOpHandle::RunImpl() { WaitInputVarGenerated(platform::CPUPlace()); @@ -56,8 +62,11 @@ void FetchOpHandle::RunImpl() { PADDLE_ENFORCE_EQ(inputs_.size(), scopes.size()); for (size_t i = 0; i < scopes.size(); ++i) { auto &scope = scopes[i]; - auto *var = - scope->FindVar(kLocalExecScopeName)->Get()->FindVar(var_name); + auto *var = Ref(Ref(scope->FindVar(kLocalExecScopeName), "Cannot find %s", + kLocalExecScopeName) + .Get(), + "Cannot get scope") + .FindVar(var_name); PADDLE_ENFORCE_NOT_NULL(var, "Cannot find variable %s in execution scope", var_name); auto &t = var->Get();