[mlir][sparse] Improving the FATAL macro
authorwren romano <2998727+wrengr@users.noreply.github.com>
Tue, 31 May 2022 20:06:10 +0000 (13:06 -0700)
committerwren romano <2998727+wrengr@users.noreply.github.com>
Tue, 31 May 2022 21:31:38 +0000 (14:31 -0700)
The previous macro definition using `{...}` would fail to compile when the callsite uses a semicolon followed by an else-statement (i.e., `if (...) FATAL(...); else ...;`).  Replacing the simple braces with `do{...}while(0)` (n.b., semicolon not included in the macro definition) enables callsites to use the semicolon plus else-statement syntax without problems.  The new definition now requires the semicolon at all callsites, but since it was already being called that way nothing changes.

For more explanation, see <https://gcc.gnu.org/onlinedocs/cpp/Swallowing-the-Semicolon.html>

Reviewed By: aartbik

Differential Revision: https://reviews.llvm.org/D126514

mlir/lib/ExecutionEngine/SparseTensorUtils.cpp

index da3b705..d307e52 100644 (file)
@@ -83,10 +83,10 @@ static inline uint64_t checkedMul(uint64_t lhs, uint64_t rhs) {
 // to track down whether an error is coming from our code vs somewhere else
 // in MLIR.)
 #define FATAL(...)                                                             \
-  {                                                                            \
+  do {                                                                         \
     fprintf(stderr, "SparseTensorUtils: " __VA_ARGS__);                        \
     exit(1);                                                                   \
-  }
+  } while (0)
 
 // TODO: try to unify this with `SparseTensorFile::assertMatchesShape`
 // which is used by `openSparseTensorCOO`.  It's easy enough to resolve