http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50489
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-09-25 12:13:44 UTC --- D.3059_11 = VIEW_CONVERT_EXPR<shared [8] struct foo[1] *>(D.3058); looks like bogus IL to me. You view D.3058, a struct of size 16, as a pointer (of size 8). I suppose you want to load D.3058.vaddr here? D.3060_12 = (shared [8] struct foo *) D.3059_11; D.3061_13 = VIEW_CONVERT_EXPR<struct upc_shared_ptr_t>(D.3060_12).phase; looks bogus IL to me. It views the pointer(!?) D.3060_12 as being a struct upc_shared_ptr_t and extracts a value that is not within that pointer. But maybe I'm missing something because I don't recognize that 'shared [8]' qualification. Do you want to dereference D.3060_12 (D.3058.vaddr) here? That said, I wonder why you don't trip over tree-cfg.c verification of VIEW_CONVERT_EXPR as TYPE_SIZE (TREE_TYPE (D.3060_12)) != TYPE_SIZE (struct upc_shared_ptr_t). Please try to avoid using VIEW_CONVERT_EXPRs completely unless you know exactly what you are doing.