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