Hi, I think you have a problem with nasal demons: $ gcc-4.9.2 -fsanitize=undefined -O3 -Wall -pedantic -Wextra minus.cpp $ ./a.out minus.cpp:6:17: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself
On Fri, Feb 20, 2015 at 9:33 PM, Artem Alimarin <artem.alima...@gmail.com> wrote: > Hi, > > Moving to CLANG toolset we bumped in a problem illustrated by the following > small reproducer. Reproducible with clang34, clang35, clang36 on FreeBSD 9.3 > x64. It is reproducible only with -O3. The program works as expected on GCC > and MSVC. > > #include <stdio.h> > #include <stdint.h> > > bool test_fp_lt(int64_t x) { > // Take care of -0 > return (-x) > 0; > } > > void test_lt(int64_t x, bool res) { > bool r = test_fp_lt(x); > if(r != res) { > printf("test_lt failed for %016lx: expected %d, got %d\n", x, res, > r); > } > } > > int main() { > test_lt(0x0000000000000000ul, false); > test_lt(0x8000000000000000ul, false); > test_lt(0x4000000000000000ul, false); > test_lt(0x8000000000000001ul, true); > test_lt(0xFFFFFFFFFFFFFFF0ul, true); > return 0; > } > > The program should not print anything. It fails for 0x8000000000000000ul, > though. > > The geneated code for test_fp_lt is: > shr rdi, 63 > mov al, dil > > whereas the expected working code (from GCC) is > neg rdi > test rdi, rdi > setg al > > As far as I understand the compiler co,piler optimizes (-x) > 0 into x < 0. > What is wrong here? > > Best regards, > Artem > > _______________________________________________ > cfe-users mailing list > cfe-users@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users > -- GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++ The Tao of math: The numbers you can count are not the real numbers. Life is complex, with real and imaginary parts. "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds "People disagree with me. I just ignore them." -- Linus Torvalds _______________________________________________ cfe-users mailing list cfe-users@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-users