| // |
| // Copyright 2025 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| // unsafe_buffers.h: exempts code from unsafe buffers warnings. Based upon |
| // https://source.chromium.org/chromium/chromium/src/+/main:base/compiler_specific.h |
| |
| #ifndef COMMON_UNSAFE_BUFFERS_H_ |
| #define COMMON_UNSAFE_BUFFERS_H_ |
| |
| #if defined(__clang__) && defined(__has_attribute) |
| # if __has_attribute(unsafe_buffer_usage) |
| # define ANGLE_UNSAFE_BUFFER_USAGE [[clang::unsafe_buffer_usage]] |
| # endif |
| #endif |
| #if !defined(ANGLE_UNSAFE_BUFFER_USAGE) |
| # define ANGLE_UNSAFE_BUFFER_USAGE |
| #endif |
| |
| // Formatting is off so that we can put each _Pragma on its own line. |
| // clang-format off |
| #if defined(UNSAFE_BUFFERS_BUILD) |
| # define ANGLE_UNSAFE_BUFFERS(...) \ |
| _Pragma("clang unsafe_buffer_usage begin") \ |
| __VA_ARGS__ \ |
| _Pragma("clang unsafe_buffer_usage end") |
| #else |
| # define ANGLE_UNSAFE_BUFFERS(...) __VA_ARGS__ |
| #endif |
| // clang-format on |
| |
| // Like ANGLE_UNSAFE_BUFFERS(), but indicates there is a TODO() task. |
| #define ANGLE_UNSAFE_TODO(...) ANGLE_UNSAFE_BUFFERS(__VA_ARGS__) |
| |
| #endif // COMMON_UNSAFE_BUFFERS_H_ |