> > struct foo {int a: 32; int b: 32; }; > > struct bar {int c: 32; int d: 32; }; > > > > you have the fields A and C conflicting, which is wrong. > > With the current scheme you have fields a and b conflict > and c and d conflicting > > Both of which are wrong
But nothing is changing that! This is true whether or not the fields are addressable and for all proposals given so far. The only way to change this would be to make a new unique alias set for each nonaddressable field in a record and mark each as a subset of the record. This would be optimal, but is expensive for large records (e.g., ones with thousands of fields) and there's no good place to store such an alias set. However, you don't really NEED to deconflict such fields using alias sets since there are already mechanisms at both the tree and RTL level to know that such accesses can't conflict (being different FIELD_DECLs).