On 26 October 2007 16:51, Tomash Brechko wrote: > On Fri, Oct 26, 2007 at 08:32:07 -0700, Ian Lance Taylor wrote: >> The language standard does not forbid speculative stores to non-atomic >> objects.
> * Disallow speculative stores on potentially shared objects. > * Disallow reading and re-writing of unrelated objects. (For > instance, if you have struct S{ char a,b; }; it is not OK to > modify b by reading in the whole struct, bit-twiddling b, and > writing the whole struct because that would interfere with > another thread that is trying to write to a.) I don't see how that second one is possible in the most general case. Some cpus don't have all widths of access mode; and how could it possibly work for sub-world bitfields? (Or are those just to be considered 'related'?) > So, will "potentially shared objects" be marked as such explicitly by > the programmer, or is it a compiler job to identify them? Well, the compiler can certainly do some of that (cf. escape analysis), but it's always going to have to be vastly more conservative than it could be if the programmer directs it with annotations. As far as I can see, we'd either need some very thorough LTO, or we'd just have to treat /all/ globals this way indiscriminately. Aren't we about to reinvent -fvolatile, with all the hideous performance losses that that implies? cheers, DaveK -- Can't think of a witty .sigline today....