http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49807

--- Comment #3 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2011-07-21 
20:34:14 UTC ---
> (In reply to comment #2)
> That's not quite correct. In avr-libc the header file sfr_defs.h will define a
> register as this:
> 
> #define SPDR (*((volatile char *) 0x2c))

(volatile char *) is the same as (char volatile *). Don't confuse it with (char
* volatile) etc.

> Is your intent to change the address AND remove the volatile keyword?

I changed to different addresses in the non-volatile example because otherwise
just the last store will survive.

> Overall, though, I think you're on the right track. Most users would like to 
> be
> able to do the shift-and-assign pattern in C and have it compile to storing 
> the
> individual byte without a shift in the assembly. Right now, the only way to do
> a workaround to achieve that result is through the use of a union with a 
> struct
> and an integer type (like a long). If this issue can be fixed then I think 
> that
> this has a chance to reduce a lot of code size problems.

I don't know the exact rationale why volatile_ok is false in combine.
It' obviously about volatile correctnet, but I don't see what would break here.

Reply via email to