llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Florian Mayer (fmayer)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/200306.diff


2 Files Affected:

- (modified) clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp (+64-1) 
- (modified) 
clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
 (+13) 


``````````diff
diff --git a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp 
b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp
index c5ad8ea4dcb1f..c43c1e6999693 100644
--- a/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp
+++ b/clang/unittests/Analysis/FlowSensitive/MockHeaders.cpp
@@ -465,6 +465,9 @@ struct in_place_t {};
 
 constexpr in_place_t in_place;
 
+template<class T> struct remove_const { typedef T type; };
+template<class T> struct remove_const<const T> { typedef T type; };
+
 } // namespace std
 
 #endif // STD_TYPE_TRAITS_H
@@ -1739,7 +1742,8 @@ ReturnIfErrorAdaptor MacroAdaptor(const absl::Status& s,
                                          absl::SourceLocation loc);
 ReturnIfErrorAdaptor MacroAdaptor(absl::Status&& s,
                                          absl::SourceLocation loc);
-}
+
+}  // namespace status_macro_internal
 
 } // namespace absl
 
@@ -1760,6 +1764,65 @@ ReturnIfErrorAdaptor MacroAdaptor(absl::Status&& s,
 #define ABSL_RETURN_IF_ERROR(expr) \
   ABSL_INTERNAL_STATUS_MACROS_RETURN_IF_ERROR_IMPL_(return, expr)
 
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_INNER_(x, y) x##y
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_(x, y) \
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_INNER_(x, y)
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_UNPARENTHESIZE_IF_PARENTHESIZED(...) \
+  __VA_ARGS__
+
+#define ABSL_ASSIGN_OR_RETURN(...) \
+  ABSL_INTERNAL_STATUS_MACROS_ASSIGN_OR_RETURN_IMPL_(return, __VA_ARGS__)
+
+#define ABSL_INTERNAL_STATUS_MACROS_ASSIGN_OR_RETURN_IMPL_(return_keyword, \
+                                                           ...)            \
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_GET_VARIADIC_(                          \
+      (return_keyword, __VA_ARGS__,                                        \
+       ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_3_,               \
+       ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_2_))              \
+  (return_keyword, __VA_ARGS__)
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_GET_VARIADIC_HELPER_(_1, _2, _3, _4, \
+                                                              NAME, ...)      \
+  NAME
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_GET_VARIADIC_(args) \
+  /* NOLINTNEXTLINE(clang-diagnostic-pre-c++20-compat) */    \
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_GET_VARIADIC_HELPER_ args
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_2_(return_keyword,   
\
+                                                             lhs, rexpr)       
\
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(                          
\
+      ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_(_status_or_value, __LINE__),    
\
+      lhs, rexpr,                                                              
\
+      return_keyword absl::Status(                                             
\
+          std::move(ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_(_status_or_value, 
\
+                                                             __LINE__))        
\
+              .status(),                                                       
\
+          absl::SourceLocation::current()))
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_3_(                  
\
+    return_keyword, lhs, rexpr, error_expression)                              
\
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(                          
\
+      ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_(_status_or_value, __LINE__),    
\
+      lhs, rexpr, /* NOLINTNEXTLINE(misc-const-correctness) */                 
\
+      absl::StatusBuilder _(                                                   
\
+          std::move(ABSL_INTERNAL_STATUS_MACROS_IMPL_CONCAT_(_status_or_value, 
\
+                                                             __LINE__))        
\
+              .status(),                                                       
\
+          absl::SourceLocation::current());                                    
\
+      (void)_; /* error_expression is allowed to not use this variable */      
\
+      return_keyword(error_expression))
+
+#define ABSL_INTERNAL_STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(                 \
+    statusor, lhs, rexpr, error_expression)                                 \
+  auto statusor = (rexpr);                                                  \
+  if (!statusor.ok()) {                                                     \
+    error_expression;                                                       \
+  }                                                                         \
+  ABSL_INTERNAL_STATUS_MACROS_IMPL_UNPARENTHESIZE_IF_PARENTHESIZED(lhs) =   \
+      (*std::move(statusor))
+
 #endif // STATUSOR_H_
 )cc";
 
diff --git 
a/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
 
b/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
index 3c72d1ec13c8e..7d4eae222b99f 100644
--- 
a/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
+++ 
b/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
@@ -4585,6 +4585,19 @@ TEST_P(UncheckedStatusOrAccessModelTest, ReturnIfError) {
   )cc");
 }
 
+TEST_P(UncheckedStatusOrAccessModelTest, AssignOrReturn) {
+  ExpectDiagnosticsFor(R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+#include "task.h"
+
+  absl::Status target(STATUSOR_INT sor) {
+    ABSL_ASSIGN_OR_RETURN(int x, sor);
+    *sor;
+    return {};
+  }
+  )cc");
+}
+
 } // namespace
 
 std::string

``````````

</details>


https://github.com/llvm/llvm-project/pull/200306
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to