void main(void) { unsigned short v1, v2, e1; v1 = 6; v2 = 8;
if ( v1 - v2 < 2 ) { /* this is not the expected behaviour */ e1 = v1 - v2; } } I would expect that v1-v2 in the if statement is 65534. It seems to be that v1-v2 in the if statement gets (-2) and so the condition is true. Compiling: V:/tmp/compiler-fehler/src/main.c cd V:/tmp/compiler-fehler/makeout/obj; \ V:/Programme/MinGW/bin/gcc -v -c -g -std=gnu99 -IV:/tmp/com piler-fehler/src -DPROJECT_H="<project.h>" -DSTDTYPE_H="<stdtype.h>" -D__AVR_ATm ega32__=1 -fno-common -fverbose-asm -O0 -Wall -Wbad-function-cast -Wcast-align - Winline -Wmissing-declarations -Wmissing-noreturn -Wmissing-prototypes -Wnested- externs -Wno-comment -Wno-unused-function -Wpacked -Wpointer-arith -Wstrict-prot otypes -Wp,-M,-MP,-MT,V:/tmp/compiler-fehler/makeout/obj/main.o,-MF,V:/tmp/comp iler-fehler/makeout/dep/main.d V:/tmp/compiler-fehler/src/main.c -o main.o; Reading specs from v:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.2/specs Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host= mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable -languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz ation --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.2 (mingw-special) v:/Programme/MinGW/bin/../libexec/gcc/mingw32/3.4.2/cc1.exe -quiet -v -IV:/tmp/ compiler-fehler/src -iprefix v:\Programme\MinGW\bin\../lib/gcc/mingw32/3.4.2/ -D PROJECT_H=<project.h> -DSTDTYPE_H=<stdtype.h> -D__AVR_ATmega32__=1 -M -MP -MT V: /tmp/compiler-fehler/makeout/obj/main.o -MF V:/tmp/compiler-fehler/makeout/dep/m ain.d V:/tmp/compiler-fehler/src/main.c -quiet -dumpbase main.c -auxbase-strip m ain.o -g -O0 -Wall -Wbad-function-cast -Wcast-align -Winline -Wmissing-declarati ons -Wmissing-noreturn -Wmissing-prototypes -Wnested-externs -Wno-comment -Wno-u nused-function -Wpacked -Wpointer-arith -Wstrict-prototypes -std=gnu99 -version -fno-common -fverbose-asm -o c:\TEMP/ccwzaaaa.s ignoring nonexistent directory "v:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.2/ ../../../../mingw32/include" ignoring nonexistent directory "/mingw/include" ignoring nonexistent directory "/mingw/include" ignoring nonexistent directory "/mingw/lib/gcc/mingw32/3.4.2/include" ignoring nonexistent directory "/mingw/mingw32/include" ignoring nonexistent directory "/mingw/include" #include "..." search starts here: #include <...> search starts here: V:/tmp/compiler-fehler/src v:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../include v:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.2/include End of search list. GNU C version 3.4.2 (mingw-special) (mingw32) compiled by GNU C version 3.4.2 (mingw-special). GGC heuristics: --param ggc-min-expand=99 --param ggc-min-heapsize=131001 V:/tmp/compiler-fehler/src/main.c:2: warning: return type of 'main' is not `int' v:/Programme/MinGW/bin/../lib/gcc/mingw32/3.4.2/../../../../mingw32/bin/as.exe -o main.o c:\TEMP/ccwzaaaa.s -- Summary: behavour by expression with unsigned variables in if- statement is not like expected Product: gcc Version: 3.4.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: tobias dot leutwein at bosch dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-mingw32 GCC host triplet: i686-pc-mingw32 GCC target triplet: i686-pc-mingw32 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23544