Bug 306039
| Summary: | REGRESSION (273395@main): Missing WTF::move() in Expected<T,E>::operator*() && causes inconsistent move semantics | ||
|---|---|---|---|
| Product: | WebKit | Reporter: | David Kilzer (:ddkilzer) <ddkilzer> |
| Component: | Web Template Framework | Assignee: | David Kilzer (:ddkilzer) <ddkilzer> |
| Status: | RESOLVED FIXED | ||
| Severity: | Normal | CC: | webkit-bug-importer |
| Priority: | P2 | Keywords: | EasyFix, InRadar |
| Version: | WebKit Nightly Build | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Bug Depends on: | 267956 | ||
| Bug Blocks: | |||
David Kilzer (:ddkilzer)
The non-const rvalue-qualified operator*() method in Expected<T,E> is missing WTF::move(), making it inconsistent with other rvalue-qualified methods in the same class.
Current inconsistent behavior:
```cpp
// Line 329 - CORRECT (has WTF::move)
constexpr const value_type&& operator*() const && LIFETIME_BOUND { return WTF::move(std::get<0>(base::s)); }
// Line 330 - INCORRECT (missing WTF::move)
constexpr value_type&& operator*() && LIFETIME_BOUND { return std::get<0>(base::s); }
// Lines 335-336 - CORRECT (both have WTF::move)
constexpr const value_type&& value() const && LIFETIME_BOUND { return WTF::move(std::get<0>(base::s)); }
constexpr value_type&& value() && LIFETIME_BOUND { return WTF::move(std::get<0>(base::s)); }
// Lines 339-340 - CORRECT (both have WTF::move)
constexpr error_type&& error() && LIFETIME_BOUND { return WTF::move(std::get<1>(base::s)); }
constexpr const error_type&& error() const && LIFETIME_BOUND { return WTF::move(std::get<1>(base::s)); }
```
The missing WTF::move() in line 330 means operator*() behaves differently from value() when called on rvalue Expected objects, which is unexpected since both should have move semantics when called on temporaries.
| Attachments | ||
|---|---|---|
| Add attachment proposed patch, testcase, etc. |
David Kilzer (:ddkilzer)
The fix is to add back WTF::move() that was dropped by accident in commit 273395@main:
```cpp
constexpr value_type&& operator*() && LIFETIME_BOUND { return WTF::move(std::get<0>(base::s)); }
```
Radar WebKit Bug Importer
<rdar://problem/168682753>
David Kilzer (:ddkilzer)
Pull request: https://github.com/WebKit/WebKit/pull/57054
EWS
Committed 306031@main (d4e6d3cf133a): <https://commits.webkit.org/306031@main>
Reviewed commits have been landed. Closing PR #57054 and removing active labels.