Using .macro argument in .error message?

Georg-Johann Lay avr@gjlay.de
Thu Jun 11 13:42:43 GMT 2026


Am 11.06.26 um 15:22 schrieb Jan Beulich:
> On 10.06.2026 11:54, Georg-Johann Lay wrote:
>> 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
> 
> This is it, yes.
> 
>> Though whatever the behavior wrt. fishy escapes is, resolution
>> of macro arguments shoud run prior to that, no?
> 
> No. Macros are processed after the scrubber (aka "pre-processor") has
> done its work.
> 
> Jan

Whatever the technical limitations are; such a warning makes just no sense.

Johann



More information about the Binutils mailing list