diff --git a/src/macros.hpp b/src/macros.hpp
index b5c38c151c778c65d00e5bdcad6af356c9ee80e6..16768eac10aef15e5b02d7aa4a9a18e4cd1a1fdf 100644
--- a/src/macros.hpp
+++ b/src/macros.hpp
@@ -15,6 +15,15 @@
 #define ATTR_LIKELY(x) __builtin_expect((x), 1)
 #define ATTR_UNLIKELY(x) __builtin_expect((x), 0)
 
+#define COMPILER_PRAGMA(x) _Pragma(#x)
+
+#define COMPILER_SUPRESS(flag)                     \
+    COMPILER_PRAGMA(GCC diagnostic push)           \
+    COMPILER_PRAGMA(GCC diagnostic ignored flag)
+
+#define COMPILER_RESTORE(flag) \
+    COMPILER_PRAGMA(GCC diagnostic pop) // flag
+
 #else
 
 #define ATTR_NONNULL_ALL
@@ -30,6 +39,10 @@
 #define ATTR_LIKELY(x) (x)
 #define ATTR_UNLIKELY(x) (x)
 
+#define COMPILER_PRAGMA(x)
+#define COMPILER_SUPRESS(flag)
+#define COMPILER_RESTORE(flag)
+
 #endif
 
 #define MARK_UNUSED(x) (void)(x)