On 22 Mar 2015, at 22:23, Dimitry Andric <dim_at_FreeBSD.org> wrote: > > On 22 Mar 2015, at 22:02, Craig Rodrigues <rodrigc_at_FreeBSD.org> wrote: >> >> On Sun, Mar 22, 2015 at 11:26 AM, <jenkins-admin_at_freebsd.org> wrote: >> >>> See <https://jenkins.freebsd.org/job/FreeBSD_HEAD-tests2/867/> >>> >> >> Can someone with toolchain expertise look at this? >> After the clang 3.6.1 import, /bin/expr behaves differently. >> >> With clang 3.5.0: >> >> # expr 4611686018427387904 + 4611686018427387904 >> expr: overflow >> >> With clang 3.6.1: >> >> # expr 4611686018427387904 + 4611686018427387904 >> -9223372036854775808 > > It works fine for me: > > $ /usr/obj/usr/src/bin/expr/expr 4611686018427387904 + 4611686018427387904 > expr: overflow 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) _at__at_ -6,6 +6,9 _at__at_ PROG= expr SRCS= expr.y YFLAGS= +# expr relies on signed integer wrapping +CFLAGS+= -fwrapv + NO_WMISSING_VARIABLE_DECLARATIONS= .if ${MK_TESTS} != "no" -Dimitry
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:56 UTC