Jenkins build is still unstable: FreeBSD_HEAD-tests2 #867

Dimitry Andric dim at FreeBSD.org
Sun Mar 22 21:36:18 UTC 2015


On 22 Mar 2015, at 22:32, Craig Rodrigues <rodrigc at FreeBSD.org> wrote:
> 
> On Sun, Mar 22, 2015 at 2:29 PM, Dimitry Andric <dim at freebsd.org> wrote:
> 
> Ah right, that was on i386, on amd64 it does result in -2^63.  It is indeed caused by reliance on signed integer wrapping.
> 
> This diff should fix it, without rewriting the utility:
> 
> Index: bin/expr/Makefile
> ===================================================================
> --- bin/expr/Makefile   (revision 280156)
> +++ bin/expr/Makefile   (working copy)
> @@ -6,6 +6,9 @@ PROG=   expr
>  SRCS=  expr.y
>  YFLAGS=
> 
> +# expr relies on signed integer wrapping
> +CFLAGS+= -fwrapv
> +
>  NO_WMISSING_VARIABLE_DECLARATIONS=
> 
>  .if ${MK_TESTS} != "no"
> 
> 
> Well, another alternative is to patch expr.y:
> 
> Index: expr.y
> ===================================================================
> --- expr.y      (revision 280353)
> +++ expr.y      (working copy)
> @@ -393,7 +393,7 @@
>  }
> 
>  void
> -assert_plus(intmax_t a, intmax_t b, intmax_t r)
> +assert_plus(intmax_t a, intmax_t b, volatile intmax_t r)
>  {
>         /*
>          * sum of two positive numbers must be positive,
> @@ -420,7 +420,7 @@
>  }
> 
>  void
> -assert_minus(intmax_t a, intmax_t b, intmax_t r)
> +assert_minus(intmax_t a, intmax_t b, volatile intmax_t r)
>  {
>         /* special case subtraction of INTMAX_MIN */
>         if (b == INTMAX_MIN && a < 0)
> 
> 
> There were already some patches previously done to this
> file to add "volatile", so maybe this would be OK to do.
> 
> What do you think?

Volatile is not the solution, it is completely orthogonal.  The correct
way would be to use unsigned integers, for which wrapping is defined,
then convert those back and forth when presenting the results to the
user.

-Dimitry

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.freebsd.org/pipermail/freebsd-testing/attachments/20150322/cff331cd/attachment.sig>


More information about the freebsd-testing mailing list