"Kewen.Lin" <li...@linux.ibm.com> writes: > Hi Segher, > > on 2020/8/7 锟斤拷锟斤拷10:42, Segher Boessenkool wrote: >> Hi! >> >> On Fri, Aug 07, 2020 at 10:44:10AM +0800, Kewen.Lin wrote: >>>> I think this makes a lot of sense. >>>> >>>>> btw, not sure whether it's a good idea to move target_option_override_hook >>>>> call into print_specific_help and use one function local static >>>>> variable to control it's called once for all kinds of help dumping >>>>> (possible combination), then can remove the calls in function >>>>> common_handle_option. >>>> >>>> I cannot easily imagine what that will look like... it could easily be >>>> worse than what you have here (callbacks aren't so nice, but there are >>>> worse things). >>>> >>> >>> I attached opts_alt2.diff to be more specific for this, both alt1 and alt2 >>> follow the existing callback scheme, alt2 aims to avoid possible multiple >>> times target_option_override_hook calls when we have several --help= or >>> similar, but I guess alt1 is also fine since the hook should be allowed to >>> be called more than once.
Yeah. I guess ideally (and independently of this patch) we'd have a flag_checking assert that override_options is idempotent, but that might be tricky to implement. It looks like there's a subtle (pre-existing) difference in what --help and --help= do. --help already calls target_option_override_hook, but does it at the point that the option occurs. --help= instead queues the help until we've finished processing other arguments, and would therefore take later options into account. I don't know that one is obviously better than the other though. > […] > *opts_alt1.diff* > > gcc/ChangeLog: > > * opts-global.c (decode_options): Adjust call to print_help. > * opts.c (print_help): Add one function point argument > target_option_override_hook and call it before print_specific_help. > * opts.h (print_help): Add one more argument to function declare. I think personally I'd prefer an option (3): call target_option_override_hook directly in decode_options, if help_option_arguments is nonempty. Like you say, decode_options appears to be the only caller of print_help. Thanks, Richard