]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable: wrap EXPECT macros in do/while
authorPatrick Steinhardt <ps@pks.im>
Mon, 11 Dec 2023 09:07:29 +0000 (10:07 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 Dec 2023 15:23:15 +0000 (07:23 -0800)
The `EXPECT` macros used by the reftable test framework are all using a
single `if` statement with the actual condition. This results in weird
syntax when using them in if/else statements like the following:

```
if (foo)
EXPECT(foo == 2)
else
EXPECT(bar == 2)
```

Note that there need not be a trailing semicolon. Furthermore, it is not
immediately obvious whether the else now belongs to the `if (foo)` or
whether it belongs to the expanded `if (foo == 2)` from the macro.

Fix this by wrapping the macros in a do/while loop.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
reftable/test_framework.h

index 774cb275bf679440b804d86370c8858c9e0b1bd2..ee44f735aea51d03fc3400a9340ccbd7af881f9e 100644 (file)
@@ -12,32 +12,38 @@ https://developers.google.com/open-source/licenses/bsd
 #include "system.h"
 #include "reftable-error.h"
 
-#define EXPECT_ERR(c)                                                  \
-       if (c != 0) {                                                  \
-               fflush(stderr);                                        \
-               fflush(stdout);                                        \
-               fprintf(stderr, "%s: %d: error == %d (%s), want 0\n",  \
-                       __FILE__, __LINE__, c, reftable_error_str(c)); \
-               abort();                                               \
-       }
-
-#define EXPECT_STREQ(a, b)                                               \
-       if (strcmp(a, b)) {                                              \
-               fflush(stderr);                                          \
-               fflush(stdout);                                          \
-               fprintf(stderr, "%s:%d: %s (%s) != %s (%s)\n", __FILE__, \
-                       __LINE__, #a, a, #b, b);                         \
-               abort();                                                 \
-       }
-
-#define EXPECT(c)                                                          \
-       if (!(c)) {                                                        \
-               fflush(stderr);                                            \
-               fflush(stdout);                                            \
-               fprintf(stderr, "%s: %d: failed assertion %s\n", __FILE__, \
-                       __LINE__, #c);                                     \
-               abort();                                                   \
-       }
+#define EXPECT_ERR(c)                                                          \
+       do {                                                                   \
+               if (c != 0) {                                                  \
+                       fflush(stderr);                                        \
+                       fflush(stdout);                                        \
+                       fprintf(stderr, "%s: %d: error == %d (%s), want 0\n",  \
+                               __FILE__, __LINE__, c, reftable_error_str(c)); \
+                       abort();                                               \
+               }                                                              \
+       } while (0)
+
+#define EXPECT_STREQ(a, b)                                                       \
+       do {                                                                     \
+               if (strcmp(a, b)) {                                              \
+                       fflush(stderr);                                          \
+                       fflush(stdout);                                          \
+                       fprintf(stderr, "%s:%d: %s (%s) != %s (%s)\n", __FILE__, \
+                               __LINE__, #a, a, #b, b);                         \
+                       abort();                                                 \
+               }                                                                \
+       } while (0)
+
+#define EXPECT(c)                                                                  \
+       do {                                                                       \
+               if (!(c)) {                                                        \
+                       fflush(stderr);                                            \
+                       fflush(stdout);                                            \
+                       fprintf(stderr, "%s: %d: failed assertion %s\n", __FILE__, \
+                               __LINE__, #c);                                     \
+                       abort();                                                   \
+               }                                                                  \
+       } while (0)
 
 #define RUN_TEST(f)                          \
        fprintf(stderr, "running %s\n", #f); \