| /* | |
| * Copyright 2026 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkOnlyStackAllocatable_DEFINED | |
| #define SkOnlyStackAllocatable_DEFINED | |
| #include <stddef.h> | |
| /** | |
| * SK_ONLY_STACK_ALLOCATABLE is a macro that bans heap allocation for a class or struct | |
| * and serves as a marker for Clang static analysis tools (like the MiraclePtr rewriter). | |
| * | |
| * In Chromium, Clang plugins enforce that: | |
| * 1. StackAllocated structs are only embedded inside other StackAllocated structs. | |
| * 2. Pointers to StackAllocated structs are not rewritten to raw_ptr. | |
| * | |
| * Place this macro inside your class/struct definition (typically at the top): | |
| * SK_ONLY_STACK_ALLOCATABLE; | |
| */ | |
| #define SK_ONLY_STACK_ALLOCATABLE \ | |
| using IsStackAllocatedTypeMarker [[maybe_unused]] = int; \ | |
| void* operator new(size_t) = delete; \ | |
| void* operator new[](size_t) = delete | |
| #endif |