I don't have a confident answer, but based on the Reference I believe a negative integer could be used in the expression portion of the attribute or parsed from a string literal.
The attribute consists of a path to the attribute, followed by an optional delimited token tree whose interpretation is defined by the attribute. Attributes other than macro attributes also allow the input to be an equals sign ( = ) followed by an expression.
I am fairly certain that things have changed significantly since that RFC. Inside of the parentheses in your example, any arbitrary token stream is allowed. e.g.
// These are all valid
#[attribute(something_negative = -1)]
#[attribute(something_missing =)]
#[attribute(something::pathy)]
#[attribute(gobbledy * gook())]
On that page you might notice a PATH = TOKEN_TREE code snippet, however this is referring specifically to #[attribute = thing] without any inner parentheses. At first, I thought that this might not allow a negative integer in this limited location due to "not being a single token tree," but I get a somewhat different error from what I expected: