# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# Patch the fit::function implementation for use in Pigweed:
#
#   - Use PW_ASSERT instead of __builtin_abort.
#   - Temporarily disable sanitizers when invoking a function for b/241567321.
#
diff --git a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/function_internal.h b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/function_internal.h
--- a/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/function_internal.h
+++ b/third_party/fuchsia/repo/sdk/lib/fit/include/lib/fit/function_internal.h
@@ -16,6 +16,8 @@
 #include <utility>

 #include "nullable.h"
+#include "pw_assert/assert.h"
+#include "pw_preprocessor/compiler.h"

 namespace fit {
 namespace internal {
@@ -79,7 +81,7 @@ inline const void* unshared_target_type_id(void* /*bits*/, const void* impl_ops)
 // vtable for nullptr functions. This avoids generating unnecessary identical
 // vtables, which reduces code size.
 struct null_target {
-  static void invoke(void* /*bits*/) { __builtin_abort(); }
+  static void invoke(void* /*bits*/) { PW_ASSERT(false); }

   static const target_ops<void> ops;
 };
@@ -398,7 +400,8 @@ class function_base<inline_target_size, require_inline, Result(Args...)> {
   // Note that fit::callback will release the target immediately after
   // invoke() (also affecting any share()d copies).
   // Aborts if the function's target is empty.
-  Result invoke(Args... args) const {
+  // TODO(b/241567321): Remove "no sanitize" after pw_protobuf is fixed.
+  Result invoke(Args... args) const PW_NO_SANITIZE("function") {
     // Down cast the ops to the derived type that this function was instantiated
     // with, which includes the invoke function.
     //
@@ -472,7 +475,7 @@ class function_base<inline_target_size, require_inline, Result(Args...)> {
   template <typename SharedFunction>
   void copy_shared_target_to(SharedFunction& copy) {
     copy.destroy_target();
-    assert(storage_.ops == &shared_target_type<SharedFunction>::ops);
+    PW_ASSERT(storage_.ops == &shared_target_type<SharedFunction>::ops);
     shared_target_type<SharedFunction>::copy_shared_ptr(&storage_.bits, &copy.storage_.bits);
     copy.storage_.ops = storage_.ops;
   }
@@ -516,7 +519,7 @@ class function_base<inline_target_size, require_inline, Result(Args...)> {
   void check_target_type() const {
     if (target_type<Callable>::ops.target_type_id(nullptr, &target_type<Callable>::ops) !=
         target_type_id()) {
-      __builtin_abort();
+      PW_ASSERT(false);
     }
   }

diff --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
--- 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
@@ -11,6 +11,8 @@
 #include <type_traits>
 #include <utility>

+#include "pw_assert/assert.h"
+
 namespace fit {

 // Determines whether a type can be compared with nullptr.
@@ -130,28 +132,28 @@ class nullable<T, true> final {
     if (has_value()) {
       return value_;
     } else {
-      __builtin_abort();
+      PW_ASSERT(false);
     }
   }
   constexpr const T& value() const& {
     if (has_value()) {
       return value_;
     } else {
-      __builtin_abort();
+      PW_ASSERT(false);
     }
   }
   constexpr T&& value() && {
     if (has_value()) {
       return std::move(value_);
     } else {
-      __builtin_abort();
+      PW_ASSERT(false);
     }
   }
   constexpr const T&& value() const&& {
     if (has_value()) {
       return std::move(value_);
     } else {
-      __builtin_abort();
+      PW_ASSERT(false);
     }
   }

