NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RE: port-hp300/50852: src/sys/arch/hp300/stand/common/ite.c:239: bad expression

Hello there,

> However, I did see someone say that i = ++i + 1 is well-defined
> starting in *C++* 11.

The code in question is C code. Let's leave what happens in C++ aside,
since it is only muddying the issue. 

Let's also leave aside what happens in various C language versions and concentrate 
on the language version the compiler uses for the netBSD code.

$ more feb27b.c

#define NITE 4

    int whichconsole = 0;
    whichconsole = ++whichconsole % (NITE+1);
    return 0;

First, with a recent version of clang, a well known C compiler.

$ ~/llvm/results/bin/clang -c -g -O2 -Wall -Wextra feb27b.c
feb27b.c:8:17: warning: multiple unsequenced modifications to 'whichconsole'
        whichconsole = ++whichconsole % (NITE+1);
                     ~ ^
1 warning generated.

Next a recent version of gcc.

$ ~/gcc/results/bin/gcc -c -g -O2 -Wall -Wextra feb27b.c
feb27b.c: In function ‘main’:
feb27b.c:8:15: warning: operation on ‘whichconsole’ may be undefined [-Wsequence-point]
  whichconsole = ++whichconsole % (NITE+1);

Two different compilers, in their default language standard, think the code falls
foul of the C sequence point rules. 

I think it is *much* more likely that the original code is wrong than two separate compilers
have the same bug in them.


David Binderman

Home | Main Index | Thread Index | Old Index