We can't use temporaries to guess loop dimensions, as temporaries' bounds are calculated from loop dimensions. In the union: union { struct { ... } scalar; struct { ... } temp; struct gfc_ss_info info } data; We are currently accessing data.struct.info even in the GFC_SS_TEMP case where it is not defined. However, the aliasing and the code interact in such a way that the temporary is never chosen to get loop bounds; so it works. This patch prevents accessing gfc_ss::data::info in cases it has invalid content, so that we can update gfc_ss_info without caring about aliasing problems. OK?