[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] compiler bug?
From: |
Graham Davies |
Subject: |
Re: [avr-gcc-list] compiler bug? |
Date: |
Tue, 10 Feb 2009 09:08:59 -0500 |
Richard F wrote:
[in] rtc.time_element.tm_wday = (rtc.time_element.tm_wday < 6) ?
rtc.time_element.tm_wday++ : 0;
... the expression rtc.tm_wday++ doesn't appear to be evaluated.
If the conditional expression evaluates TRUE, the statement reduces to this:
rtc.time_element.tm_wday = rtc.time_element.tm_wday++;
The C language is defined such that the RHS will be evaluated completely
before assignment to the variable on the left. So what happens is that the
value of rtc.time_element.tm_wday is retrieved and stored,
rtc.time_element.tm_wday is then incremented and, finally, the stored value
(the original value of rtc.time_element.tm_wday) is assigned to
rtc.time_element.tm_wday (wiping out the increment). The compiler is at
liberty to optimize away the redundant increment (unless
rtc.time_element.tm_wday is declared volatile, in which case it would be
incremented and then put back where it was).
Graham.