1#pragma once
2
3#if defined(__has_feature) && __has_feature(bounds_attributes)
4 #define __has_ptrcheck 1
5#else
6 #define __has_ptrcheck 0
7#endif
8
9#if __has_ptrcheck
10
11#define __single __attribute__((__single__))
12#define __unsafe_indexable __attribute__((__unsafe_indexable__))
13
14#else
15
16#define __single
17#define __unsafe_indexable
18#define __counted_by(N)
19#define __counted_by_or_null(N)
20#define __sized_by(N)
21#define __sized_by_or_null(N)
22#define __ended_by(E)
23
24#define __terminated_by(T)
25#define __null_terminated
26
27/* __ptrcheck_abi_assume_indexable and __ptrcheck_abi_assume_bidi_indexable intentionally not defined */
28#define __ptrcheck_abi_assume_single()
29#define __ptrcheck_abi_assume_unsafe_indexable()
30
31#define __unsafe_forge_bidi_indexable(T, P, S) ((T)(P))
32#define __unsafe_forge_single(T, P) ((T)(P))
33#define __unsafe_forge_terminated_by(T, P, E) ((T)(P))
34#define __unsafe_forge_null_terminated(T, P) ((T)(P))
35
36#define __terminated_by_to_indexable(P) (P)
37#define __unsafe_terminated_by_to_indexable(P) (P)
38#define __null_terminated_to_indexable(P) (P)
39#define __unsafe_null_terminated_to_indexable(P) (P)
40#define __unsafe_terminated_by_from_indexable(T, P, ...) (P)
41#define __unsafe_null_terminated_from_indexable(P, ...) (P)
42
43#define __array_decay_dicards_count_in_parameters
44
45#define __ptrcheck_unavailable
46#define __ptrcheck_unavailable_r(REPLACEMENT)
47
48
49#endif