File tree Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Expand file tree Collapse file tree 1 file changed +25
-0
lines changed Original file line number Diff line number Diff line change 113113#define unsigned_mult_overflows (a , b ) \
114114 ((a) && (b) > maximum_unsigned_value_of_type(a) / (a))
115115
116+ /*
117+ * Returns true if the left shift of "a" by "shift" bits will
118+ * overflow. The type of "a" must be unsigned.
119+ */
120+ #define unsigned_left_shift_overflows (a , shift ) \
121+ ((shift) < bitsizeof(a) && \
122+ (a) > maximum_unsigned_value_of_type(a) >> (shift))
123+
116124#ifdef __GNUC__
117125#define TYPEOF (x ) (__typeof__(x))
118126#else
@@ -859,6 +867,23 @@ static inline size_t st_sub(size_t a, size_t b)
859867 return a - b ;
860868}
861869
870+ static inline size_t st_left_shift (size_t a , unsigned shift )
871+ {
872+ if (unsigned_left_shift_overflows (a , shift ))
873+ die ("size_t overflow: %" PRIuMAX " << %u" ,
874+ (uintmax_t )a , shift );
875+ return a << shift ;
876+ }
877+
878+ static inline unsigned long cast_size_t_to_ulong (size_t a )
879+ {
880+ if (a != (unsigned long )a )
881+ die ("object too large to read on this platform: %"
882+ PRIuMAX " is cut off to %lu" ,
883+ (uintmax_t )a , (unsigned long )a );
884+ return (unsigned long )a ;
885+ }
886+
862887#ifdef HAVE_ALLOCA_H
863888# include <alloca.h>
864889# define xalloca (size ) (alloca(size))
You can’t perform that action at this time.
0 commit comments