diff --git a/gcc/c-family/c-omp.c b/gcc/c-family/c-omp.c index d8b98552fb9e31daa365589b0591ec2d6684d70b..b9024cb15a9123533dbd29c15a26774076e17a6a 100644 --- a/gcc/c-family/c-omp.c +++ b/gcc/c-family/c-omp.c @@ -381,7 +381,9 @@ c_finish_omp_atomic (location_t loc, enum tree_code code, bool clear_padding = false; HOST_WIDE_INT non_padding_start = 0; HOST_WIDE_INT non_padding_end = 0; - if (BITS_PER_UNIT == 8 && CHAR_BIT == 8) + if (BITS_PER_UNIT == 8 + && CHAR_BIT == 8 + && clear_padding_type_may_have_padding_p (cmptype)) { HOST_WIDE_INT sz = int_size_in_bytes (cmptype), i; gcc_assert (sz > 0); diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 474d0f44375522cab9767a2570d08979d4e0231b..7fcfef41f7229f92830201c350cf82b861cbbcac 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -4632,7 +4632,7 @@ clear_padding_real_needs_padding_p (tree type) /* Return true if TYPE might contain any padding bits. */ -static bool +bool clear_padding_type_may_have_padding_p (tree type) { switch (TREE_CODE (type)) diff --git a/gcc/gimple-fold.h b/gcc/gimple-fold.h index 2401646c48454d1f51a85c48973a278063e5949d..397f4aeb7cfe5c87176ec9f3dd32fea611595e81 100644 --- a/gcc/gimple-fold.h +++ b/gcc/gimple-fold.h @@ -36,6 +36,7 @@ extern tree maybe_fold_and_comparisons (tree, enum tree_code, tree, tree, enum tree_code, tree, tree); extern tree maybe_fold_or_comparisons (tree, enum tree_code, tree, tree, enum tree_code, tree, tree); +extern bool clear_padding_type_may_have_padding_p (tree); extern void clear_type_padding_in_mask (tree, unsigned char *); extern bool optimize_atomic_compare_exchange_p (gimple *); extern void fold_builtin_atomic_compare_exchange (gimple_stmt_iterator *);