diff options
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 3f17de9..c5939f1 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -1235,12 +1235,18 @@ gimple_fold_builtin_memset (gimple_stmt_iterator *gsi, tree c, tree len) length = tree_to_uhwi (len); if (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (etype)) != length + || (GET_MODE_PRECISION (SCALAR_INT_TYPE_MODE (etype)) + != GET_MODE_BITSIZE (SCALAR_INT_TYPE_MODE (etype))) || get_pointer_alignment (dest) / BITS_PER_UNIT < length) return NULL_TREE; if (length > HOST_BITS_PER_WIDE_INT / BITS_PER_UNIT) return NULL_TREE; + if (!type_has_mode_precision_p (etype)) + etype = lang_hooks.types.type_for_mode (SCALAR_INT_TYPE_MODE (etype), + TYPE_UNSIGNED (etype)); + if (integer_zerop (c)) cval = 0; else |