annotate gcc/testsuite/gcc.dg/range.h @ 131:84e7813d76e9

gcc-8.2
author mir3636
date Thu, 25 Oct 2018 07:37:49 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 #ifndef RANGE_H
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 /* Definitions of helper functions and macros to create expressions
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4 in a specified range. Not all the symbols declared here are
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 defined. */
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 #define SIZE_MAX __SIZE_MAX__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8 #define DIFF_MAX __PTRDIFF_MAX__
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 #define DIFF_MIN (-DIFF_MAX - 1)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 typedef __INT32_TYPE__ int32_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 typedef __PTRDIFF_TYPE__ ptrdiff_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 typedef __SIZE_TYPE__ size_t;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15 static inline ptrdiff_t signed_value (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 extern volatile ptrdiff_t signed_value_source;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 return signed_value_source;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 static inline size_t unsigned_value (void)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 extern volatile size_t unsigned_value_source;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24 return unsigned_value_source;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 static inline ptrdiff_t signed_range (ptrdiff_t min, ptrdiff_t max)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 ptrdiff_t val = signed_value ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 return val < min || max < val ? min : val;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33 static inline ptrdiff_t signed_anti_range (ptrdiff_t min, ptrdiff_t max)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 ptrdiff_t val = signed_value ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 return min <= val && val <= max ? min == DIFF_MIN ? max + 1 : min - 1 : val;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 static inline size_t unsigned_range (size_t min, size_t max)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 size_t val = unsigned_value ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 return val < min || max < val ? min : val;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 static inline size_t unsigned_anti_range (size_t min, size_t max)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 {
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 size_t val = unsigned_value ();
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48 return min <= val && val <= max ? min == 0 ? max + 1 : min - 1 : val;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 }
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 #define SR(min, max) signed_range ((min), (max))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 #define UR(min, max) unsigned_range ((min), (max))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 #define SAR(min, max) signed_anti_range ((min), (max))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 #define UAR(min, max) unsigned_anti_range ((min), (max))
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 #endif /* RANGE_H */