@@ -1366,14 +1366,22 @@ static void
builtin_define_with_int_value (const char *macro, HOST_WIDE_INT value)
{
char *buf;
- size_t mlen = strlen (macro);
- size_t vlen = 18;
- size_t extra = 2; /* space for = and NUL. */
-
- buf = (char *) alloca (mlen + vlen + extra);
- memcpy (buf, macro, mlen);
- buf[mlen] = '=';
- sprintf (buf + mlen + 1, HOST_WIDE_INT_PRINT_DEC, value);
+ size_t vlen = 20; /* maximize value length: -9223372036854775807 */
+ size_t extra = 6; /* space for =, NUL, (, ), and L L. */
+
+ gcc_assert (wi::fits_to_tree_p (value, long_long_integer_type_node));
+
+ buf = (char *) alloca (strlen (macro) + vlen + extra);
+
+ sprintf (buf, "%s=%s" HOST_WIDE_INT_PRINT_DEC "%s%s",
+ macro,
+ value < 0 ? "(" : "",
+ value,
+ wi::fits_to_tree_p (value, integer_type_node)
+ ? ""
+ : wi::fits_to_tree_p (value, long_integer_type_node)
+ ? "L" : "LL",
+ value < 0 ? ")" : "");
cpp_define (parse_in, buf);
}