Browse Source

AK: Ignore -Wshadow in TRY() and MUST()

This makes the warning in CLion disappear when nesting them.
Linus Groh 2 years ago
parent
commit
5103e08b77
1 changed files with 17 additions and 11 deletions
  1. 17 11
      AK/Try.h

+ 17 - 11
AK/Try.h

@@ -6,6 +6,8 @@
 
 #pragma once
 
+#include <AK/Diagnostics.h>
+
 // NOTE: This macro works with any result type that has the expected APIs.
 //       It's designed with AK::Result and AK::Error in mind.
 //
@@ -14,17 +16,21 @@
 //       by at least clang and gcc.
 //       [1] https://gcc.gnu.org/onlinedocs/gcc/Statement-Exprs.html
 
-#define TRY(expression)                                \
-    ({                                                 \
-        auto _temporary_result = (expression);         \
-        if (_temporary_result.is_error()) [[unlikely]] \
-            return _temporary_result.release_error();  \
-        _temporary_result.release_value();             \
+#define TRY(expression)                                   \
+    ({                                                    \
+        /* Ignore -Wshadow to allow nesting the macro. */ \
+        AK_IGNORE_DIAGNOSTIC("-Wshadow",                  \
+            auto _temporary_result = (expression));       \
+        if (_temporary_result.is_error()) [[unlikely]]    \
+            return _temporary_result.release_error();     \
+        _temporary_result.release_value();                \
     })
 
-#define MUST(expression)                       \
-    ({                                         \
-        auto _temporary_result = (expression); \
-        VERIFY(!_temporary_result.is_error()); \
-        _temporary_result.release_value();     \
+#define MUST(expression)                                  \
+    ({                                                    \
+        /* Ignore -Wshadow to allow nesting the macro. */ \
+        AK_IGNORE_DIAGNOSTIC("-Wshadow",                  \
+            auto _temporary_result = (expression));       \
+        VERIFY(!_temporary_result.is_error());            \
+        _temporary_result.release_value();                \
     })