Can the "ATTRIBUTE_UNUSED" macro be removed if the paramter has being used in fact
Richard Sandiford
richard.sandiford@arm.com
Thu Sep 24 13:31:51 GMT 2020
"Hu, Jiangping" <hujiangping@cn.fujitsu.com> writes:
> Hi,
>
> I find there are many "ATTRIBUTE_UNUSED" macros in the function parameter lists,
> but some of the parameters are used in the function bodies in fact. E.g.
>
> @@gcc/final.c
> void
> output_operand (rtx x, int code ATTRIBUTE_UNUSED)
> {
> if (x && GET_CODE (x) == SUBREG)
> x = alter_subreg (&x, true);
>
> /* X must not be a pseudo reg. */
> if (!targetm.no_register_allocation)
> gcc_assert (!x || !REG_P (x) || REGNO (x) < FIRST_PSEUDO_REGISTER);
>
> targetm.asm_out.print_operand (asm_out_file, x, code);
>
> if (x == NULL_RTX)
> return;
>
> mark_symbol_refs_as_used (x);
> }
>
> I know there are no compile issues for the code above, and if we read the body,
> it will not cause too much trouble to readers.
Agreed.
> So I don't know if can I make a patch to remove that? If it is approved,
> can I just firstly change the files I encountered, because I think many files
> may have this situation, it's hard to address all of them in 1 patch.
Yeah, small numbers of changes per patch are better. There's certainly
no requirement to do everything at once, incremental improvements are
better.
Uses of ATTRIBUTE_UNUSED in code like the above come from cases where
a target hook (here asm_out.print_operand) was previously a target macro.
When it was a target macro, there was no requirement for the macro to use
every parameter, and so the ATTRIBUTE_UNUSEDs were added to suppress
warnings for the targets that didn't use particular parameters.
Since converting macros to hooks is a mostly mechanical (and boring)
process, it's natural to miss cases in which an ATTRIBUTE_UNUSED
is no longer required.
FWIW, there will probably still be uses of ATTRIBUTE_UNUSED for values that
are used in macro arguments, and those ATTRIBUTE_UNUSEDs are still needed.
Thanks,
Richard
More information about the Gcc
mailing list