Index: src/core/SkMSAN.h |
diff --git a/src/core/SkMSAN.h b/src/core/SkMSAN.h |
index 7e544778d7655cbb2ee6de19565054c7a4cae579..1f32e5356c6f34d9b852635d8f0258eaeea7cbd8 100644 |
--- a/src/core/SkMSAN.h |
+++ b/src/core/SkMSAN.h |
@@ -8,11 +8,12 @@ |
#ifndef SkMSAN_DEFINED |
#define SkMSAN_DEFINED |
-#include <stddef.h> // size_t |
+#include "SkTypes.h" |
// Typically declared in LLVM's msan_interface.h. Easier for us to just re-declare. |
extern "C" { |
void __msan_check_mem_is_initialized(const volatile void*, size_t); |
+ void __msan_unpoison (const volatile void*, size_t); |
} |
// Code that requires initialized inputs can call this to make it clear that |
@@ -25,4 +26,15 @@ static inline void sk_msan_assert_initialized(const void* begin, const void* end |
#endif |
} |
+// Lie to MSAN that this range of memory is initialized. |
+// This can hide serious problems if overused. Every use of this should refer to a bug. |
+static inline void sk_msan_mark_initialized(const void* begin, const void* end, const char* skbug) { |
+ SkASSERT(skbug && 0 != strcmp(skbug, "")); |
+#if defined(__has_feature) |
+ #if __has_feature(memory_sanitizer) |
+ __msan_unpoison(begin, (const char*)end - (const char*)begin); |
+ #endif |
+#endif |
+} |
+ |
#endif//SkMSAN_DEFINED |