http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52244
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-14 13:25:10 UTC --- Index: gcc/tree-sra.c =================================================================== --- gcc/tree-sra.c (revision 184203) +++ gcc/tree-sra.c (working copy) @@ -2172,11 +2172,16 @@ analyze_access_subtree (struct access *r && (root->grp_scalar_write || root->grp_assignment_write)))) { bool new_integer_type; - if (TREE_CODE (root->type) == ENUMERAL_TYPE) + if (INTEGRAL_TYPE_P (root->type) + && (TREE_CODE (root->type) != INTEGER_TYPE + || TYPE_PRECISION (root->type) != root->size)) { tree rt = root->type; - root->type = build_nonstandard_integer_type (TYPE_PRECISION (rt), + root->type = build_nonstandard_integer_type (root->size, TYPE_UNSIGNED (rt)); + root->expr = build_ref_for_offset (UNKNOWN_LOCATION, + root->base, root->offset, + root->type, NULL, false); new_integer_type = true; } else that is.