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
