_mul_overflow and get_encoded_value

A sufficiently mad compiler optimiser can take undefined behaviour
according to the C standard as an opportunity to remove code.  Since
"data + size" might be seen to be past the end of an array,
calculating such an expression is UB.

_mul_overflow is infrastructure for later patches.

	* bucomm.h (_mul_overflow): Define.
	* dwarf.c (get_encoded_value): Avoid pointer UB.
This commit is contained in:
Alan Modra
2021-05-15 14:36:26 +09:30
parent 7c96e6120f
commit fc5e0925d4
3 changed files with 14 additions and 1 deletions

View File

@@ -80,4 +80,12 @@ void *xmalloc (size_t);
void *xrealloc (void *, size_t);
#if __GNUC__ >= 7
#define _mul_overflow(a, b, res) __builtin_mul_overflow (a, b, res)
#else
/* Assumes unsigned values. Careful! Args evaluated multiple times. */
#define _mul_overflow(a, b, res) \
((*res) = (a), (*res) *= (b), (b) != 0 && (*res) / (b) != (a))
#endif
#endif /* _BUCOMM_H */