Hi, On August 31, 2020 11:08:49 AM PDT, Ranier Vilela <ranier...@gmail.com> wrote: >Em seg., 31 de ago. de 2020 às 14:43, Ranier Vilela ><ranier...@gmail.com> >escreveu: > >> Em seg., 31 de ago. de 2020 às 14:00, Alvaro Herrera < >> alvhe...@2ndquadrant.com> escreveu: >> >>> On 2020-Aug-31, Ranier Vilela wrote: >>> >>> > More troubles with undefined-behavior. >>> > >>> > This type of code can leaves overflow: >>> > var = (cast) (expression); >>> > diff = (int32) (id1 - id2); >>> > >>> > See: >>> > diff64 = ((long int) d1 - (long int) d2); >>> > diff64=-4294901760 >>> >>> Did you compile this with gcc -fwrapv? >>> >> gcc 10.2 -O2 -fwrapv >> bool test1() >> { >> unsigned int d1 = 3; >> unsigned int d2 = 4294901763; >> long int diff64 = 0; >> >> diff64 = ((long int) d1 - (long int) d2); >> >> return (diff64 < 0); >> } >> >> output: >> mov eax, 1 >> ret >> >> What is a workaround for msvc 2019 (64 bits) and clang 64 bits >(linux)? >> transam.c:311:22: runtime error: unsigned integer overflow: 3 - >4294901763 >> cannot be represented in type 'unsigned int'
Unsigned integer overflow is well defined in the standard. So I don't understand what this is purporting to warn about. Andres Regards, Andres -- Sent from my Android device with K-9 Mail. Please excuse my brevity.