https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79649
--- Comment #8 from rguenther at suse dot de <rguenther at suse dot de> --- On Tue, 21 Feb 2017, jakub at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79649 > > --- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- > typedef __SIZE_TYPE__ size_t; > struct A { int a; char b[1024]; }; > extern struct A __seg_gs a; > > void > f1 (size_t n) > { > for (size_t i = 0; i < n; ++i) > a.b[i] = 0; > } > > certainly compiles fine with my patch. Ok. So we have arg 0 <component_ref 0x7ffff69e3c60 type <array_type 0x7ffff69c11f8 type <integer_type 0x7ffff69c1150 char address-space-2> BLK size <integer_cst 0x7ffff69d4300 constant 8192> unit size <integer_cst 0x7ffff69d42d0 constant 1024> align 8 symtab 0 alias set -1 canonical type 0x7ffff69c11f8 domain <integer_type 0x7ffff69c1498>> arg 0 <var_decl 0x7ffff7feee10 a type <record_type 0x7ffff69c15e8 A address-space-2> addressable used public external BLK file t.c line 3 col 26 size <integer_cst 0x7ffff69d4318 constant 8224> unit size <integer_cst 0x7ffff69d4330 constant 1028> align 32 context <translation_unit_decl 0x7ffff68b02d0 t.c> chain <function_decl 0x7ffff69c4e00 f1>> arg 1 <field_decl 0x7ffff68ca558 b type <array_type 0x7ffff69c1540> the FIELD_DECL has a type in the generic address-space but the type of the COMPONENT_REF is in the appropriate address-space. I also see this is what set_mem_attributes_minus_bitpos does (just look at the type of the ref). So if your patch tests fine you can commit it.