diff --git a/benchmark/portals4_macros.h b/benchmark/portals4_macros.h
index 91fb34288c64a7cc4e304f27de3170e0dafb5b45..4d63e56dcdd727f9b17df6ae80fc633c4465534f 100644
--- a/benchmark/portals4_macros.h
+++ b/benchmark/portals4_macros.h
@@ -1,18 +1,42 @@
 #ifndef LINKTEST_PORTALS4MACROS_H
 #define LINKTEST_PORTALS4MACROS_H
-// NOLINTBEGIN
-#define CHECK_RETURNVAL(x) do { int ret; \
-    switch (ret = x) { \
-        case PTL_IGNORED: \
-        case PTL_OK: break; \
-        case PTL_FAIL: fprintf(stderr, "=> %s returned PTL_FAIL (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        case PTL_NO_SPACE: fprintf(stderr, "=> %s returned PTL_NO_SPACE (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        case PTL_ARG_INVALID: fprintf(stderr, "=> %s returned PTL_ARG_INVALID (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        case PTL_NO_INIT: fprintf(stderr, "=> %s returned PTL_NO_INIT (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        case PTL_PT_IN_USE: fprintf(stderr, "=> %s returned PTL_PT_IN_USE (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        case PTL_IN_USE: fprintf(stderr, "=> %s returned PTL_IN_USE (line %u)\n", #x, (unsigned int)__LINE__); abort(); break; \
-        default: fprintf(stderr, "=> %s returned failcode %i (line %u)\n", #x, ret, (unsigned int)__LINE__); abort(); break; \
-    } } while (0) 
-// NOLINTEND
+inline void check_returnval(int x, const char* x_str, unsigned int line) {
+    int ret;
+    switch (ret = x) {
+        case PTL_IGNORED:
+        case PTL_OK:
+            break;
+        case PTL_FAIL:
+            fprintf(stderr, "=> %s returned PTL_FAIL (line %u)\n", x_str, line);
+            abort();
+            break;
+        case PTL_NO_SPACE:
+            fprintf(stderr, "=> %s returned PTL_NO_SPACE (line %u)\n", x_str, line);
+            abort();
+            break;
+        case PTL_ARG_INVALID:
+            fprintf(stderr, "=> %s returned PTL_ARG_INVALID (line %u)\n", x_str, line);
+            abort();
+            break;
+        case PTL_NO_INIT:
+            fprintf(stderr, "=> %s returned PTL_NO_INIT (line %u)\n", x_str, line);
+            abort();
+            break;
+        case PTL_PT_IN_USE:
+            fprintf(stderr, "=> %s returned PTL_PT_IN_USE (line %u)\n", x_str, line);
+            abort();
+            break;
+        case PTL_IN_USE:
+            fprintf(stderr, "=> %s returned PTL_IN_USE (line %u)\n", x_str, line);
+            abort();
+            break;
+        default:
+            fprintf(stderr, "=> %s returned failcode %i (line %u)\n", x_str, ret, line);
+            abort();
+            break;
+    }
+}
+
+#define CHECK_RETURNVAL(x) check_returnval(x, #x, __LINE__) // NOLINT
 
 #endif //PORTALS4MACROS
\ No newline at end of file