Using .macro argument in .error message?

Georg-Johann Lay avr@gjlay.de
Wed Jun 10 09:54:31 GMT 2026


Am 10.06.26 um 11:27 schrieb Jan Beulich:
> On 07.06.2026 21:16, Georg-Johann Lay via Binutils wrote:
>> Test case err.sx:
>>
>> .macro Test data
>>       .if \data < 0
>>           .error "value \data is negative"
>>       .endif
>> .endm
>>
>>       Test -1
>>
>>
>> $ avr-as err.sx -v
>> GNU assembler version 2.45.50 (avr) using BFD version (GNU Binutils)
>> 2.45.50.20250718
>> err.sx: Assembler messages:
>> err.sx: Warning: unknown escape '\d' in string; ignored
>> err.sx:3: Error: value -1 is negative
>> err.sx:7:  Info: macro invoked from here
>>
>> While the printed error message is as expected, there is a spurious
>> warning about using \d in the string.
>>
>> What am I missing?
>>
>> As far as I understand, the .error message /must/ be "-quoted.
> 
> Indeed. But AVR is one of the few targets which enable this extra
> warning. Why that is or whether it could be changed requires AVR
> knowledge, which I don#t have. There's also a surprising set of
> characters for which the warning would never appear. I don't know
> the history of that set, but it feels pretty arbitrary.
> 
> Jan

Okay, I didn't even notice that it's target specific... The only
related place I could find is in gas/config/tc-avr.h:

/* If you define this macro, GAS will warn about the use of
    nonstandard escape sequences in a string.  */
#define ONLY_STANDARD_ESCAPES

Though whatever the behavior wrt. fishy escapes is, resolution
of macro arguments shoud run prior to that, no?

At least if macro param resolution in strings is supported
to begin with; which appears to be the case.

Johann



More information about the Binutils mailing list