We might as well take advantage of gcc's extensions for a safer MIN()/MAX() macro. Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> --- RFC because we could also try to fall back to older gcc's typeof(a)_a=(a) when the newer __auto_type _a=(a) is not present, and because I don't know how to properly probe for __auto_type and/or typeof support in clang (I know that clang added __auto_type in 2015, per https://reviews.llvm.org/D12686); I also don't know if we have officially stated that we require gcc/clang (because of attribute((cleanup)), which really cannot be emulated without extensions), or if we still try to allow compilation with other compilers; if we have, I don't know if we have declared a minimum compiler version that we demand (qemu has recently demanded gcc 4.8 or clang 3.4 [branded 5.1 on Apple]). src/util/virutil.h | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/util/virutil.h b/src/util/virutil.h index 908d8920ec..364e354bcb 100644 --- a/src/util/virutil.h +++ b/src/util/virutil.h @@ -28,10 +28,26 @@ # include <sys/types.h> # ifndef MIN -# define MIN(a, b) ((a) < (b) ? (a) : (b)) +# if __GNUC_PREREQ(4, 9) +# define MIN(a, b) ({ \ + __auto_type _a = (a); \ + __auto_type _b = (b); \ + _a < _b ? _a : _b; \ + }) +# else +# define MIN(a, b) ((a) < (b) ? (a) : (b)) +# endif # endif # ifndef MAX -# define MAX(a, b) ((a) > (b) ? (a) : (b)) +# if __GNUC_PREREQ(4, 9) +# define MAX(a, b) ({ \ + __auto_type _a = (a); \ + __auto_type _b = (b); \ + _a > _b ? _a : _b; \ + }) +# else +# define MAX(a, b) ((a) > (b) ? (a) : (b)) +# endif # endif -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list