http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50284

--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-09-03 
20:52:49 UTC ---
struct Value {
  struct jsval data;
};
...
    struct jsval y = t3.array[i];
    struct Value *z = (struct Value*)&y;
    if (z->data.tag == 0xFFFFFF85) {

that's invalid in GCCs reading of 6.5 p7. jsval is a subset of Value's
alias-set
but not the other way around.  GCC reads z->data.tag as an access to an
object of type Value which is invalid.

The contorted reasoning is that the pointer conversion invokes undefined
behavior.  Definitely an interesting blog post ;)

Reply via email to