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