On 26 October 2007 15:59, Ian Lance Taylor wrote: > Andreas Schwab <[EMAIL PROTECTED]> writes: > >> Ian Lance Taylor <[EMAIL PROTECTED]> writes: >> >>> The above code happens to use pthread_mutex_trylock, but there is no >>> need for that. >> >> pthread_mutex_trylock is special, because POSIX says it is a memory >> synchronisation point (see section 4.10 Memory Synchronization). > > Sure. But the argument that gcc is doing something wrong stands up > just fine even we just test a global variable. The argument that gcc > is doing something wrong does not rely on the fact that the function > called is pthread_mutex_trylock.
Indeed; as I understand it, what the argument that gcc is doing something wrong relies on is the incorrect assumption that *all* variables ought to behave like volatile ones, i.e. have an exact one-to-one relationship between loads and stores as written in the HLL and actual machine load/store operations. I could describe that another way: what the argument that gcc is doing something wrong relies on is the misapprehension that C is still just a glorified assembler language - which it hasn't been since the '80s, as far as I know. cheers, DaveK -- Can't think of a witty .sigline today....