[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bug-gnulib] Re: size_max
From: |
Bruno Haible |
Subject: |
Re: [bug-gnulib] Re: size_max |
Date: |
Mon, 11 Jul 2005 13:27:28 +0200 |
User-agent: |
KMail/1.5 |
Paul Eggert wrote:
> Also, while we're on the subject of size_max.m4, I have a pedantic
> point: its use of ~(size_t)0 isn't portable in general. For example,
> if size_t is narrower than int, then ~(size_t)0 might evaluate to -1,
> which isn't correct.
Ah, right. I'm changing it to (size_t)~(size_t)0. Although I know that
(size_t)~0 and (size_t)-1 in theory yield the same value. I find it
more confusing to cast a negative number to an unsigned type, than to
use two casts.
2005-07-10 Bruno Haible <address@hidden>
* size_max.m4 (gl_SIZE_MAX): Cast ~(size_t)0 back to size_t.
Needed when size_t is smaller than 'unsigned int'.
Reported by Paul Eggert.
*** size_max.m4.bak 2005-01-18 13:58:29.000000000 +0100
--- size_max.m4 2005-07-10 14:58:24.000000000 +0200
***************
*** 1,5 ****
! # size_max.m4 serial 2
! dnl Copyright (C) 2003 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
--- 1,5 ----
! # size_max.m4 serial 3
! dnl Copyright (C) 2003, 2005 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
***************
*** 26,34 ****
dnl than the type 'unsigned long'.
dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
! _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
[#include <stddef.h>], result=?)
! _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
[#include <stddef.h>], result=?)
_AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
[#include <stddef.h>], result=?)
--- 26,34 ----
dnl than the type 'unsigned long'.
dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
! _AC_COMPUTE_INT([(size_t)~(size_t)0 / 10], res_hi,
[#include <stddef.h>], result=?)
! _AC_COMPUTE_INT([(size_t)~(size_t)0 % 10], res_lo,
[#include <stddef.h>], result=?)
_AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
[#include <stddef.h>], result=?)
***************
*** 48,54 ****
fi
else
dnl Shouldn't happen, but who knows...
! result='~(size_t)0'
fi
fi
AC_MSG_RESULT([$result])
--- 48,54 ----
fi
else
dnl Shouldn't happen, but who knows...
! result='((size_t)~(size_t)0)'
fi
fi
AC_MSG_RESULT([$result])
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [bug-gnulib] Re: size_max,
Bruno Haible <=