https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102281
--- Comment #7 from qinzhao at gcc dot gnu.org ---
(In reply to Jakub Jelinek from comment #2)
> __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.
I agree that the above additional check is necessary.
one question here is, can I use the routine "bool
clear_padding_type_may_have_padding_p (tree type)" in gimple-fold.c instead of
the above new function for this purpose?