Author: Florian Mayer
Date: 2026-02-06T12:55:11-08:00
New Revision: 29d374bf90de1cd28af5587724f7ba19b225b92e

URL: 
https://github.com/llvm/llvm-project/commit/29d374bf90de1cd28af5587724f7ba19b225b92e
DIFF: 
https://github.com/llvm/llvm-project/commit/29d374bf90de1cd28af5587724f7ba19b225b92e.diff

LOG: [NFC] [FlowSensitive] [StatusOr] Add tests for StatusOr ctors



Reviewers: jvoung

Reviewed By: jvoung

Pull Request: https://github.com/llvm/llvm-project/pull/180076

Added: 
    

Modified: 
    
clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp

Removed: 
    


################################################################################
diff  --git 
a/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
 
b/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
index 41505dd720ef7..c908a98d63af2 100644
--- 
a/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
+++ 
b/clang/unittests/Analysis/FlowSensitive/UncheckedStatusOrAccessModelTestFixture.cpp
@@ -1129,6 +1129,102 @@ TEST_P(UncheckedStatusOrAccessModelTest, BuiltinExpect) 
{
       )cc");
 }
 
+TEST_P(UncheckedStatusOrAccessModelTest, CopyConstructor) {
+  ExpectDiagnosticsFor(
+      R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+        void target() {
+          STATUSOR_INT sor1 = Make<STATUSOR_INT>();
+          auto sor2 = sor1;
+          auto sor3 = sor2;
+          if (sor1.ok()) {
+            sor1.value();
+
+            sor2.value();
+
+            sor3.value();
+          } else {
+            sor1.value();  // [[unsafe]]
+
+            sor2.value();  // [[unsafe]]
+
+            sor3.value();  // [[unsafe]]
+          }
+        }
+      )cc");
+  ExpectDiagnosticsFor(
+      R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+        void target() {
+          STATUSOR_INT sor1 = Make<STATUSOR_INT>();
+          auto sor2 = sor1;
+          auto sor3 = sor2;
+
+          STATUS s = sor1.status();
+          if (s.ok()) {
+            sor1.value();
+
+            sor2.value();
+
+            sor3.value();
+          } else {
+            sor1.value();  // [[unsafe]]
+
+            sor2.value();  // [[unsafe]]
+
+            sor3.value();  // [[unsafe]]
+          }
+        }
+      )cc");
+  ExpectDiagnosticsFor(
+      R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+        void target() {
+          STATUSOR_INT x = Make<STATUSOR_INT>();
+          if (!x.ok()) return;
+
+          STATUSOR_INT y = x;
+          y.value();
+        }
+      )cc");
+  ExpectDiagnosticsFor(
+      R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+        void target() {
+          STATUSOR_INT x = Make<STATUSOR_INT>();
+          if (x.ok()) {
+            STATUSOR_INT y = x;
+            y.value();
+          }
+        }
+      )cc");
+}
+
+TEST_P(UncheckedStatusOrAccessModelTest, MoveConstructor) {
+  ExpectDiagnosticsFor(R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+    void target() {
+      STATUSOR_INT sor1(42);
+      STATUSOR_INT sor2(std::move(sor1));
+      sor2.value();
+    }
+  )cc");
+  ExpectDiagnosticsFor(R"cc(
+#include "unchecked_statusor_access_test_defs.h"
+
+    void target() {
+      STATUSOR_INT sor1 = Make<STATUSOR_INT>();
+      STATUSOR_INT sor2(std::move(sor1));
+      sor2.value();  // [[unsafe]]
+    }
+  )cc");
+}
+
 TEST_P(UncheckedStatusOrAccessModelTest, CopyAssignment) {
   ExpectDiagnosticsFor(R"cc(
 #include "unchecked_statusor_access_test_defs.h"


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to