Previously, the expression (Reader.readFoo()) was expanded twice,
triggering asserts as one of the Error types ends up not checked
(and as it was expanded twice, the method would end up called twice
if it failed first).
Differential Revision: https://reviews.llvm.org/D66817
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@370309
91177308-0d34-0410-b5e6-
96231b3b80d8
return std::error_code();
}
-#define RETURN_IF_ERROR(E) \
- if (E) \
- return E;
+#define RETURN_IF_ERROR(Expr) \
+ do { \
+ Error E = (Expr); \
+ if (E) \
+ return std::move(E); \
+ } while (0)
Expected<ArrayRef<UTF16>>
ResourceSectionRef::getDirStringAtOffset(uint32_t Offset) {