> Compilers have became much more aggressive over the years. But they > are allowed to be so by the C standard. Specifically, in addition to > code-level re-ordering, plain accesses (loads/stores) are subject to > load/store fusing, tearing as well as invented loads/stores.
Then, honestly, it sounds to me as though "the latest revision of C" is no longer an appropriate language for writing kernels. I see no reason to twist the kernel code into a pretzel to work around latitude a new language gives to its compilers - and that's what C11 is, a new language, albeit one closely related to various previous languages. One of the prime considerations when choosing a language and/or compiler for building a kernel is that it produce relatively predictable code, for exactly this kind of reason. If the latest C and the latest gcc no longer do that, then IMO they are no longer appropriate for writing/compiling kernels. > While these primitives might be slightly verbose, they are in C11, > they fix real bugs, they definitely make code less error-prone and > they have other merits too (e.g. they accommodate static analysers > which find some real bugs). How many of those "real bugs" exist only because C11 gave compilers new latitude to produce unexpected code? /~\ The ASCII Mouse \ / Ribbon Campaign X Against HTML mo...@rodents-montreal.org / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B