On Thu, Jan 14, 2021 at 11:05:40AM +0100, Richard Biener wrote: > > > Could we print > > > t.u.b > > > if the TBAA type is compatible with the type of the reference and perhaps > > > *(int*)&t.u.b > > > if it is incompatible? > > > >From the aliasing perspective that is still different, but we don't print > > > the TBAA type anyway. > > True. As said we could simply add a GCC extension to write a MEM_REF > in source and print that syntax ... then it would be valid (GCC) C/C++.
But even if we do that unless people are familiar with that extension they wouldn't know what it means (and they didn't write it in that way in their source). > > There is another option I forgot about, but perhaps it is too verbose. > > Print > > *(int*)((char*)&t + offsetof (struct T, u.b)) > > or rather offsetof (struct T, u) to not single out a specific union > member? Sure, I can just get rid of the UNION_TYPE handling from the function, or use it only if the TBAA access type is compatible. Jakub