http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57359
--- Comment #5 from Dara Hazeghi <dhazeghi at yahoo dot com> --- Sorry to ask again on this, but after re-reading, I'm not sure I understand the type-punning argument here: **ppll = ll; // write to u.ll *k = 0; // write to u.i j = *ppa; // u not touched ia[0][0] = *j; // u not touched printf("%d\n", u.i); // read from u.i >From what I can tell, this is in fact reading the last member written to (so not falling under the unspecified behaviors listed in annex J / 6.2.6.1). Perhaps there is an additional restriction I am missing?