xref: /aosp_15_r20/external/pigweed/third_party/fuchsia/pigweed_adaptations.patch (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Worker# DO NOT EDIT! This file is generated by generate_fuchsia_patch.py.
16*61c4878aSAndroid Build Coastguard Worker#
17*61c4878aSAndroid Build Coastguard Worker# To make changes, update and run ./generate_fuchsia_patch.py.
18*61c4878aSAndroid Build Coastguard Worker
19*61c4878aSAndroid Build Coastguard Worker# Patch the fit::function implementation for use in Pigweed:
20*61c4878aSAndroid Build Coastguard Worker#
21*61c4878aSAndroid Build Coastguard Worker#   - Use PW_ASSERT instead of __builtin_abort.
22*61c4878aSAndroid Build Coastguard Worker#   - Temporarily disable sanitizers when invoking a function for b/241567321.
23*61c4878aSAndroid Build Coastguard Worker#
24*61c4878aSAndroid Build Coastguard Workerdiff --git a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/function.h b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/function.h
25*61c4878aSAndroid Build Coastguard Worker--- a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/function.h
26*61c4878aSAndroid Build Coastguard Worker+++ b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/function.h
27*61c4878aSAndroid Build Coastguard Worker@@ -18,6 +18,8 @@
28*61c4878aSAndroid Build Coastguard Worker #include <utility>
29*61c4878aSAndroid Build Coastguard Worker
30*61c4878aSAndroid Build Coastguard Worker #include "../nullable.h"
31*61c4878aSAndroid Build Coastguard Worker+#include "pw_assert/assert.h"
32*61c4878aSAndroid Build Coastguard Worker+#include "pw_preprocessor/compiler.h"
33*61c4878aSAndroid Build Coastguard Worker
34*61c4878aSAndroid Build Coastguard Worker namespace fit {
35*61c4878aSAndroid Build Coastguard Worker namespace internal {
36*61c4878aSAndroid Build Coastguard Worker@@ -88,7 +90,7 @@ inline const void* unshared_target_type_id(void* /*bits*/, const void* impl_ops)
37*61c4878aSAndroid Build Coastguard Worker // elsewhere in the header as an inline variable.
38*61c4878aSAndroid Build Coastguard Worker template <typename Unused = void>
39*61c4878aSAndroid Build Coastguard Worker struct null_target {
40*61c4878aSAndroid Build Coastguard Worker-  static void invoke(void* /*bits*/) { __builtin_abort(); }
41*61c4878aSAndroid Build Coastguard Worker+  static void invoke(void* /*bits*/) { PW_ASSERT(false); }
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Worker   static const target_ops<void> ops;
44*61c4878aSAndroid Build Coastguard Worker
45*61c4878aSAndroid Build Coastguard Worker@@ -510,7 +512,8 @@ class function_base<inline_target_size, require_inline, Result(Args...), Allocat
46*61c4878aSAndroid Build Coastguard Worker   // Note that fit::callback will release the target immediately after
47*61c4878aSAndroid Build Coastguard Worker   // invoke() (also affecting any share()d copies).
48*61c4878aSAndroid Build Coastguard Worker   // Aborts if the function's target is empty.
49*61c4878aSAndroid Build Coastguard Worker-  Result invoke(Args... args) const {
50*61c4878aSAndroid Build Coastguard Worker+  // TODO: b/241567321 - Remove "no sanitize" after pw_protobuf is fixed.
51*61c4878aSAndroid Build Coastguard Worker+  Result invoke(Args... args) const PW_NO_SANITIZE("function") {
52*61c4878aSAndroid Build Coastguard Worker     // Down cast the ops to the derived type that this function was instantiated
53*61c4878aSAndroid Build Coastguard Worker     // with, which includes the invoke function.
54*61c4878aSAndroid Build Coastguard Worker     //
55*61c4878aSAndroid Build Coastguard Worker@@ -540,7 +543,7 @@ class function_base<inline_target_size, require_inline, Result(Args...), Allocat
56*61c4878aSAndroid Build Coastguard Worker   template <typename SharedFunction>
57*61c4878aSAndroid Build Coastguard Worker   void copy_shared_target_to(SharedFunction& copy) {
58*61c4878aSAndroid Build Coastguard Worker     copy.destroy_target();
59*61c4878aSAndroid Build Coastguard Worker-    assert(base::ops() == &shared_target_type<SharedFunction>::ops);
60*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(base::ops() == &shared_target_type<SharedFunction>::ops);
61*61c4878aSAndroid Build Coastguard Worker     shared_target_type<SharedFunction>::copy_shared_ptr(base::bits(), copy.bits());
62*61c4878aSAndroid Build Coastguard Worker     copy.set_ops(base::ops());
63*61c4878aSAndroid Build Coastguard Worker   }
64*61c4878aSAndroid Build Coastguard Worker@@ -570,7 +573,7 @@ class function_base<inline_target_size, require_inline, Result(Args...), Allocat
65*61c4878aSAndroid Build Coastguard Worker   void check_target_type() const {
66*61c4878aSAndroid Build Coastguard Worker     if (target_type<Callable>::ops.target_type_id(nullptr, &target_type<Callable>::ops) !=
67*61c4878aSAndroid Build Coastguard Worker         base::target_type_id()) {
68*61c4878aSAndroid Build Coastguard Worker-      __builtin_abort();
69*61c4878aSAndroid Build Coastguard Worker+      PW_ASSERT(false);
70*61c4878aSAndroid Build Coastguard Worker     }
71*61c4878aSAndroid Build Coastguard Worker   }
72*61c4878aSAndroid Build Coastguard Worker };
73*61c4878aSAndroid Build Coastguard Workerdiff --git a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/result.h b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/result.h
74*61c4878aSAndroid Build Coastguard Worker--- a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/result.h
75*61c4878aSAndroid Build Coastguard Worker+++ b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/internal/result.h
76*61c4878aSAndroid Build Coastguard Worker@@ -14,6 +14,11 @@
77*61c4878aSAndroid Build Coastguard Worker #include <type_traits>
78*61c4878aSAndroid Build Coastguard Worker #include <utility>
79*61c4878aSAndroid Build Coastguard Worker
80*61c4878aSAndroid Build Coastguard Worker+#include "pw_preprocessor/compiler.h"
81*61c4878aSAndroid Build Coastguard Worker+
82*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTICS_PUSH();
83*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTIC_CLANG(ignored, "-Wshadow-field-in-constructor");
84*61c4878aSAndroid Build Coastguard Worker+
85*61c4878aSAndroid Build Coastguard Worker namespace fit {
86*61c4878aSAndroid Build Coastguard Worker
87*61c4878aSAndroid Build Coastguard Worker // Forward declarations.
88*61c4878aSAndroid Build Coastguard Worker@@ -60,7 +65,7 @@ struct template_matcher {
89*61c4878aSAndroid Build Coastguard Worker };
90*61c4878aSAndroid Build Coastguard Worker
91*61c4878aSAndroid Build Coastguard Worker template <typename T, template <typename...> class U, typename = bool>
92*61c4878aSAndroid Build Coastguard Worker-struct is_match : decltype(template_matcher<U>::match(std::declval<T>())) {};
93*61c4878aSAndroid Build Coastguard Worker+struct is_match : decltype(template_matcher<U>::match(std::declval<T>())){};
94*61c4878aSAndroid Build Coastguard Worker
95*61c4878aSAndroid Build Coastguard Worker template <typename T, template <typename...> class U>
96*61c4878aSAndroid Build Coastguard Worker struct is_match<T, U, requires_conditions<std::is_void<T>>> : std::false_type {};
97*61c4878aSAndroid Build Coastguard Worker@@ -441,4 +446,6 @@ using storage = storage_type<storage_class_trait<E, Ts...>, E, Ts...>;
98*61c4878aSAndroid Build Coastguard Worker }  // namespace internal
99*61c4878aSAndroid Build Coastguard Worker }  // namespace fit
100*61c4878aSAndroid Build Coastguard Worker
101*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTICS_POP();
102*61c4878aSAndroid Build Coastguard Worker+
103*61c4878aSAndroid Build Coastguard Worker #endif  // LIB_FIT_INTERNAL_RESULT_H_
104*61c4878aSAndroid Build Coastguard Workerdiff --git a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/nullable.h b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/nullable.h
105*61c4878aSAndroid Build Coastguard Worker--- a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/nullable.h
106*61c4878aSAndroid Build Coastguard Worker+++ b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/nullable.h
107*61c4878aSAndroid Build Coastguard Worker@@ -11,6 +11,8 @@
108*61c4878aSAndroid Build Coastguard Worker #include <type_traits>
109*61c4878aSAndroid Build Coastguard Worker #include <utility>
110*61c4878aSAndroid Build Coastguard Worker
111*61c4878aSAndroid Build Coastguard Worker+#include "pw_assert/assert.h"
112*61c4878aSAndroid Build Coastguard Worker+
113*61c4878aSAndroid Build Coastguard Worker namespace fit {
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Worker // Determines whether a type can be compared with nullptr.
116*61c4878aSAndroid Build Coastguard Worker@@ -130,25 +132,25 @@ class nullable<T, true> final {
117*61c4878aSAndroid Build Coastguard Worker     if (has_value()) {
118*61c4878aSAndroid Build Coastguard Worker       return value_;
119*61c4878aSAndroid Build Coastguard Worker     }
120*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
121*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
122*61c4878aSAndroid Build Coastguard Worker   }
123*61c4878aSAndroid Build Coastguard Worker   constexpr const T& value() const& {
124*61c4878aSAndroid Build Coastguard Worker     if (has_value()) {
125*61c4878aSAndroid Build Coastguard Worker       return value_;
126*61c4878aSAndroid Build Coastguard Worker     }
127*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
128*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
129*61c4878aSAndroid Build Coastguard Worker   }
130*61c4878aSAndroid Build Coastguard Worker   constexpr T&& value() && {
131*61c4878aSAndroid Build Coastguard Worker     if (has_value()) {
132*61c4878aSAndroid Build Coastguard Worker       return std::move(value_);
133*61c4878aSAndroid Build Coastguard Worker     }
134*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
135*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
136*61c4878aSAndroid Build Coastguard Worker   }
137*61c4878aSAndroid Build Coastguard Worker   constexpr const T&& value() const&& {
138*61c4878aSAndroid Build Coastguard Worker     if (has_value()) {
139*61c4878aSAndroid Build Coastguard Worker       return std::move(value_);
140*61c4878aSAndroid Build Coastguard Worker     }
141*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
142*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
143*61c4878aSAndroid Build Coastguard Worker   }
144*61c4878aSAndroid Build Coastguard Worker
145*61c4878aSAndroid Build Coastguard Worker   template <typename U = T>
146*61c4878aSAndroid Build Coastguard Workerdiff --git a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/result.h b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/result.h
147*61c4878aSAndroid Build Coastguard Worker--- a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/result.h
148*61c4878aSAndroid Build Coastguard Worker+++ b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/result.h
149*61c4878aSAndroid Build Coastguard Worker@@ -55,6 +55,12 @@
150*61c4878aSAndroid Build Coastguard Worker //                               // fit::result with a different "success" vluae type (or
151*61c4878aSAndroid Build Coastguard Worker //                               // fit::result<E>).
152*61c4878aSAndroid Build Coastguard Worker
153*61c4878aSAndroid Build Coastguard Worker+#include "pw_assert/assert.h"
154*61c4878aSAndroid Build Coastguard Worker+#include "pw_preprocessor/compiler.h"
155*61c4878aSAndroid Build Coastguard Worker+
156*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTICS_PUSH();
157*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTIC_CLANG(ignored, "-Wshadow-field-in-constructor");
158*61c4878aSAndroid Build Coastguard Worker+
159*61c4878aSAndroid Build Coastguard Worker namespace fit {
160*61c4878aSAndroid Build Coastguard Worker
161*61c4878aSAndroid Build Coastguard Worker // Convenience type to indicate failure without elaboration.
162*61c4878aSAndroid Build Coastguard Worker@@ -286,25 +292,25 @@ class [[nodiscard]] result<E, T> {
163*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
164*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.error;
165*61c4878aSAndroid Build Coastguard Worker     }
166*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
167*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
168*61c4878aSAndroid Build Coastguard Worker   }
169*61c4878aSAndroid Build Coastguard Worker   constexpr const E& error_value() const& {
170*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
171*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.error;
172*61c4878aSAndroid Build Coastguard Worker     }
173*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
174*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
175*61c4878aSAndroid Build Coastguard Worker   }
176*61c4878aSAndroid Build Coastguard Worker   constexpr E&& error_value() && {
177*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
178*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.error);
179*61c4878aSAndroid Build Coastguard Worker     }
180*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
181*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
182*61c4878aSAndroid Build Coastguard Worker   }
183*61c4878aSAndroid Build Coastguard Worker   constexpr const E&& error_value() const&& {
184*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
185*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.error);
186*61c4878aSAndroid Build Coastguard Worker     }
187*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
188*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
189*61c4878aSAndroid Build Coastguard Worker   }
190*61c4878aSAndroid Build Coastguard Worker
191*61c4878aSAndroid Build Coastguard Worker   // Moves the underlying error and returns it as an instance of fit::error, simplifying
192*61c4878aSAndroid Build Coastguard Worker@@ -315,7 +321,7 @@ class [[nodiscard]] result<E, T> {
193*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
194*61c4878aSAndroid Build Coastguard Worker       return error<E>(std::move(storage_.error_or_value.error));
195*61c4878aSAndroid Build Coastguard Worker     }
196*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
197*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
198*61c4878aSAndroid Build Coastguard Worker   }
199*61c4878aSAndroid Build Coastguard Worker
200*61c4878aSAndroid Build Coastguard Worker   // Accessors for the underlying value.
201*61c4878aSAndroid Build Coastguard Worker@@ -325,25 +331,25 @@ class [[nodiscard]] result<E, T> {
202*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
203*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.value;
204*61c4878aSAndroid Build Coastguard Worker     }
205*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
206*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
207*61c4878aSAndroid Build Coastguard Worker   }
208*61c4878aSAndroid Build Coastguard Worker   constexpr const T& value() const& {
209*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
210*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.value;
211*61c4878aSAndroid Build Coastguard Worker     }
212*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
213*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
214*61c4878aSAndroid Build Coastguard Worker   }
215*61c4878aSAndroid Build Coastguard Worker   constexpr T&& value() && {
216*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
217*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.value);
218*61c4878aSAndroid Build Coastguard Worker     }
219*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
220*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
221*61c4878aSAndroid Build Coastguard Worker   }
222*61c4878aSAndroid Build Coastguard Worker   constexpr const T&& value() const&& {
223*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
224*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.value);
225*61c4878aSAndroid Build Coastguard Worker     }
226*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
227*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
228*61c4878aSAndroid Build Coastguard Worker   }
229*61c4878aSAndroid Build Coastguard Worker
230*61c4878aSAndroid Build Coastguard Worker   // Moves the underlying value and returns it as an instance of fit::success, simplifying
231*61c4878aSAndroid Build Coastguard Worker@@ -354,7 +360,7 @@ class [[nodiscard]] result<E, T> {
232*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
233*61c4878aSAndroid Build Coastguard Worker       return success<T>(std::move(storage_.error_or_value.value));
234*61c4878aSAndroid Build Coastguard Worker     }
235*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
236*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
237*61c4878aSAndroid Build Coastguard Worker   }
238*61c4878aSAndroid Build Coastguard Worker
239*61c4878aSAndroid Build Coastguard Worker   // Contingent accessors for the underlying value.
240*61c4878aSAndroid Build Coastguard Worker@@ -383,13 +389,13 @@ class [[nodiscard]] result<E, T> {
241*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
242*61c4878aSAndroid Build Coastguard Worker       return ::fit::internal::arrow_operator<T>::forward(storage_.error_or_value.value);
243*61c4878aSAndroid Build Coastguard Worker     }
244*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
245*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
246*61c4878aSAndroid Build Coastguard Worker   }
247*61c4878aSAndroid Build Coastguard Worker   constexpr decltype(auto) operator->() const {
248*61c4878aSAndroid Build Coastguard Worker     if (is_ok()) {
249*61c4878aSAndroid Build Coastguard Worker       return ::fit::internal::arrow_operator<T>::forward(storage_.error_or_value.value);
250*61c4878aSAndroid Build Coastguard Worker     }
251*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
252*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
253*61c4878aSAndroid Build Coastguard Worker   }
254*61c4878aSAndroid Build Coastguard Worker
255*61c4878aSAndroid Build Coastguard Worker   // Accessors for the underlying value. This is a syntax sugar for value().
256*61c4878aSAndroid Build Coastguard Worker@@ -412,7 +418,7 @@ class [[nodiscard]] result<E, T> {
257*61c4878aSAndroid Build Coastguard Worker       storage_.error_or_value.error += std::move(error.value_);
258*61c4878aSAndroid Build Coastguard Worker       return *this;
259*61c4878aSAndroid Build Coastguard Worker     }
260*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
261*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
262*61c4878aSAndroid Build Coastguard Worker   }
263*61c4878aSAndroid Build Coastguard Worker
264*61c4878aSAndroid Build Coastguard Worker   // Maps a result<E, T> to a result<E2, T> by transforming the error through
265*61c4878aSAndroid Build Coastguard Worker@@ -523,25 +529,25 @@ class [[nodiscard]] result<E> {
266*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
267*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.error;
268*61c4878aSAndroid Build Coastguard Worker     }
269*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
270*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
271*61c4878aSAndroid Build Coastguard Worker   }
272*61c4878aSAndroid Build Coastguard Worker   constexpr const E& error_value() const& {
273*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
274*61c4878aSAndroid Build Coastguard Worker       return storage_.error_or_value.error;
275*61c4878aSAndroid Build Coastguard Worker     }
276*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
277*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
278*61c4878aSAndroid Build Coastguard Worker   }
279*61c4878aSAndroid Build Coastguard Worker   constexpr E&& error_value() && {
280*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
281*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.error);
282*61c4878aSAndroid Build Coastguard Worker     }
283*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
284*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
285*61c4878aSAndroid Build Coastguard Worker   }
286*61c4878aSAndroid Build Coastguard Worker   constexpr const E&& error_value() const&& {
287*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
288*61c4878aSAndroid Build Coastguard Worker       return std::move(storage_.error_or_value.error);
289*61c4878aSAndroid Build Coastguard Worker     }
290*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
291*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
292*61c4878aSAndroid Build Coastguard Worker   }
293*61c4878aSAndroid Build Coastguard Worker
294*61c4878aSAndroid Build Coastguard Worker   // Moves the underlying error and returns it as an instance of fit::error, simplifying
295*61c4878aSAndroid Build Coastguard Worker@@ -552,7 +558,7 @@ class [[nodiscard]] result<E> {
296*61c4878aSAndroid Build Coastguard Worker     if (is_error()) {
297*61c4878aSAndroid Build Coastguard Worker       return error<E>(std::move(storage_.error_or_value.error));
298*61c4878aSAndroid Build Coastguard Worker     }
299*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
300*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
301*61c4878aSAndroid Build Coastguard Worker   }
302*61c4878aSAndroid Build Coastguard Worker
303*61c4878aSAndroid Build Coastguard Worker   // Augments the error value of the result with the given value. The operator E::operator+=(F) must
304*61c4878aSAndroid Build Coastguard Worker@@ -566,7 +572,7 @@ class [[nodiscard]] result<E> {
305*61c4878aSAndroid Build Coastguard Worker       storage_.error_or_value.error += std::move(error.value_);
306*61c4878aSAndroid Build Coastguard Worker       return *this;
307*61c4878aSAndroid Build Coastguard Worker     }
308*61c4878aSAndroid Build Coastguard Worker-    __builtin_abort();
309*61c4878aSAndroid Build Coastguard Worker+    PW_ASSERT(false);
310*61c4878aSAndroid Build Coastguard Worker   }
311*61c4878aSAndroid Build Coastguard Worker
312*61c4878aSAndroid Build Coastguard Worker   // Maps a result<E, T> to a result<E2, T> by transforming the error through
313*61c4878aSAndroid Build Coastguard Worker@@ -801,4 +807,6 @@ constexpr bool operator>=(const T& lhs, const result<F, U>& rhs) {
314*61c4878aSAndroid Build Coastguard Worker
315*61c4878aSAndroid Build Coastguard Worker }  // namespace fit
316*61c4878aSAndroid Build Coastguard Worker
317*61c4878aSAndroid Build Coastguard Worker+PW_MODIFY_DIAGNOSTICS_POP();
318*61c4878aSAndroid Build Coastguard Worker+
319*61c4878aSAndroid Build Coastguard Worker #endif  // LIB_FIT_RESULT_H_
320*61c4878aSAndroid Build Coastguard Workerdiff --git a/third_party/fuchsia/repo/sdk/lib/fit/test/function_tests.cc b/third_party/fuchsia/repo/sdk/lib/fit/test/function_tests.cc
321*61c4878aSAndroid Build Coastguard Worker--- a/third_party/fuchsia/repo/sdk/lib/fit/test/function_tests.cc
322*61c4878aSAndroid Build Coastguard Worker+++ b/third_party/fuchsia/repo/sdk/lib/fit/test/function_tests.cc
323*61c4878aSAndroid Build Coastguard Worker@@ -4,7 +4,6 @@
324*61c4878aSAndroid Build Coastguard Worker
325*61c4878aSAndroid Build Coastguard Worker #include <lib/fit/function.h>
326*61c4878aSAndroid Build Coastguard Worker #include <lib/stdcompat/bit.h>
327*61c4878aSAndroid Build Coastguard Worker-#include <zircon/compiler.h>
328*61c4878aSAndroid Build Coastguard Worker
329*61c4878aSAndroid Build Coastguard Worker #include <algorithm>
330*61c4878aSAndroid Build Coastguard Worker #include <array>
331*61c4878aSAndroid Build Coastguard Worker@@ -15,6 +14,8 @@
332*61c4878aSAndroid Build Coastguard Worker
333*61c4878aSAndroid Build Coastguard Worker #include <zxtest/zxtest.h>
334*61c4878aSAndroid Build Coastguard Worker
335*61c4878aSAndroid Build Coastguard Worker+#include "pw_polyfill/language_feature_macros.h"
336*61c4878aSAndroid Build Coastguard Worker+
337*61c4878aSAndroid Build Coastguard Worker namespace {
338*61c4878aSAndroid Build Coastguard Worker
339*61c4878aSAndroid Build Coastguard Worker using ::std::size_t;
340*61c4878aSAndroid Build Coastguard Worker@@ -1029,8 +1030,8 @@ TEST(FunctionTests, callback_with_custom_allocator) {
341*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(1, cbheapdestroy);
342*61c4878aSAndroid Build Coastguard Worker }
343*61c4878aSAndroid Build Coastguard Worker
344*61c4878aSAndroid Build Coastguard Worker-__CONSTINIT const fit::function<void()> kDefaultConstructed;
345*61c4878aSAndroid Build Coastguard Worker-__CONSTINIT const fit::function<void()> kNullptrConstructed(nullptr);
346*61c4878aSAndroid Build Coastguard Worker+PW_CONSTINIT const fit::function<void()> kDefaultConstructed;
347*61c4878aSAndroid Build Coastguard Worker+PW_CONSTINIT const fit::function<void()> kNullptrConstructed(nullptr);
348*61c4878aSAndroid Build Coastguard Worker
349*61c4878aSAndroid Build Coastguard Worker TEST(FunctionTests, null_constructors_are_constexpr) {
350*61c4878aSAndroid Build Coastguard Worker   EXPECT_EQ(kDefaultConstructed, nullptr);
351