https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14319
--- Comment #18 from James Kuyper Jr. <jameskuyper at alumni dot caltech.edu> --- (In reply to Vincent Lefèvre from comment #17) > (In reply to Tim Rentsch from comment #10) > > Four: Despite the last observation, the "one special guarantee" clause > > (and hence also DR 257) is clearly not germane to this problem. The > > reason for this is that the "one special guarantee" clause is concerned > > with read access ("inspect" is the word used in the Standard), > [...] > > In any case, the aliasing rule is only about read access: "An object shall > have its stored value accessed only by [...]" (6.5#7). If you are accessing > a stored value, this means that you are reading it. Thus the "yp->y = 1;" > does not imply undefined behavior, in case this is what you were thinking > about. Agreed, the aliasing rule only produces undefined behavior for a read access, not a write access. As Tim pointed out, when the "one special guarantee" applies, it overrides the aliasing rules to give defined behavior for such a read, and isn't relevant to the write. However, as I pointed out in comment 11 (and as was conceded by Tim in comment 13 and comment 14), the issue is not the write access in yp->y = 1; it's the read access in return xp->x; The guarantee does apply to that read (though others have disagreed about that), and therefore gives that read well-defined behavior, behavior that is inconsistent with the actual behavior reported by Jeff Sturm.