Skip to content

Commit cb4eacb

Browse files
authored
Merge pull request #8377 from reyoung/feature/fix_get_empty_lod
Fix empty Vector foreach
2 parents e5087fa + 6f625f9 commit cb4eacb

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed

paddle/fluid/framework/mixed_vector.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,11 @@ class Vector {
106106
// std::vector iterator methods. Based on CPU data access method
107107
size_t size() const { return size_; }
108108

109-
T* begin() { return &this->operator[](0); }
109+
T* begin() { return capacity() == 0 ? &EmptyDummy() : &this->operator[](0); }
110110

111-
T* end() { return &this->operator[](size()); }
111+
T* end() {
112+
return capacity() == 0 ? &EmptyDummy() : &this->operator[](size());
113+
}
112114

113115
T& front() { return *begin(); }
114116

@@ -118,8 +120,13 @@ class Vector {
118120
return *it;
119121
}
120122

121-
const T* begin() const { return &this->operator[](0); }
122-
const T* end() const { return &this->operator[](size()); }
123+
const T* begin() const {
124+
return capacity() == 0 ? &EmptyDummy() : &this->operator[](0);
125+
}
126+
127+
const T* end() const {
128+
return capacity() == 0 ? &EmptyDummy() : &this->operator[](size());
129+
}
123130

124131
const T* cbegin() const { return begin(); }
125132

@@ -358,6 +365,11 @@ class Vector {
358365
}
359366
}
360367

368+
static T& EmptyDummy() {
369+
static T dummy = T();
370+
return dummy;
371+
}
372+
361373
mutable int flag_;
362374
mutable Tensor cpu_vec_;
363375
mutable Tensor cuda_vec_;

paddle/fluid/framework/mixed_vector_test.cu

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,9 @@ TEST(mixed_vector, InitWithCount) {
9898
ASSERT_EQ(vec[i], 10);
9999
}
100100
}
101+
102+
TEST(mixed_vector, ForEach) {
103+
vec<int> tmp;
104+
for (auto& v : tmp) {
105+
}
106+
}

paddle/fluid/inference/tests/book/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ inference_test(image_classification ARGS vgg resnet)
2929
inference_test(label_semantic_roles)
3030
inference_test(recognize_digits ARGS mlp)
3131
inference_test(recommender_system)
32-
inference_test(rnn_encoder_decoder)
32+
#inference_test(rnn_encoder_decoder)
3333
inference_test(understand_sentiment)
3434
inference_test(word2vec)

0 commit comments

Comments
 (0)