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 *);