https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102281
--- Comment #3 from rguenther at suse dot de <rguenther at suse dot de> --- On Mon, 13 Sep 2021, jakub at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102281 > > --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- > __builtin_clear_padding when folded emits a series of memory stores rather > than > BIT_INSERT_EXPR etc., so that wouldn't work. > But, IMNSHO, -ftrivial-auto-var-init* shouldn't be adding > __builtin_clear_padding calls at all for objects of types that can't have any > padding. > Currently one can do e.g. what my > r12-3455-g8122fbff770bcff183a9c3c72e8092c0ca32150b does for OpenMP atomics, > + bool clear_padding = false; > > + if (BITS_PER_UNIT == 8 && CHAR_BIT == 8) > > + { > > + HOST_WIDE_INT sz = int_size_in_bytes (cmptype), i; > > + gcc_assert (sz > 0); > > + unsigned char *buf = XALLOCAVEC (unsigned char, sz); > > + memset (buf, ~0, sz); > > + clear_type_padding_in_mask (cmptype, buf); > > + for (i = 0; i < sz; i++) > > + if (buf[i] != (unsigned char) ~0) > > + { > > + clear_padding = true; > > + break; > > + } > > + } > > so that when nothing needs to be padded (the usual case for non-struct/union > types unless they have extended long double), the builtin isn't added at all. > I doubt we support vectors of long double, so it is mainly whether returning > of > long double or _Complex long double works fine. for this specific issue it might be enough to not bother initializing padding of is_gimple_reg_type types, I doubt we have any of those that have padding (and if we'd have then the issue would re-surface)