Lewis Hyatt <lhy...@gmail.com> writes:
> On Tue, Mar 17, 2020 at 11:52:13AM +0000, Richard Sandiford wrote:
>> Lewis Hyatt <lhy...@gmail.com> writes:
>> > On Mon, Mar 16, 2020 at 06:11:08PM +0000, Richard Sandiford wrote:
>> >> Lewis Hyatt via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
>> > ...
>> >> > FWIW there are three other options currently affected by this change
>> >> > (-Wimplicit-fallthrough, -fcf-protection, and -flive-patching). The 
>> >> > change for
>> >> > -Wimplicit-fallthrough I think is particularly helpful:
>> >> >
>> >> > -Wimplicit-fallthrough      Same as -Wimplicit-fallthrough=.  Use the 
>> >> > latter option instead.
>> >> > becomes
>> >> > -Wimplicit-fallthrough      Same as -Wimplicit-fallthrough=3 (or, in 
>> >> > negated form, -Wimplicit-fallthrough=0).
>> >> 
>> >> I also see:
>> >> 
>> >> -  -ftail-call-workaround      Same as -ftail-call-workaround=.  Use the 
>> >> latter option instead.
>> >> +  -ftail-call-workaround      Same as -ftail-call-workaround=1 (or, in 
>> >> negated form, -ftail-call-workaround=0).
>> >>    -ftail-call-workaround=<0,2> Disallow tail call optimization when a 
>> >> calling routine may have omitted character lengths.
>> >> ...
>> >>    --imacros                   Same as -imacros.  Use the latter option 
>> >> instead.
>> >>    --imacros=                  Same as -imacros.  Use the latter option 
>> >> instead.
>> >>    --include                   Same as -include.  Use the latter option 
>> >> instead.
>> >> -  --include-barrier           Same as -I.  Use the latter option instead.
>> >> +  --include-barrier           Same as -I-.
>> >>    --include-directory         Same as -I.  Use the latter option instead.
>> >>    --include-directory-after   Same as -idirafter.  Use the latter option 
>> >> instead.
>> >>    --include-directory-after=  Same as -idirafter.  Use the latter option 
>> >> instead.
>> >> ...
>> >> -  -Wnormalized                Same as -Wnormalized=.  Use the latter 
>> >> option instead.
>> >> +  -Wnormalized                Same as -Wnormalized=nfc (or, in negated 
>> >> form, -Wnormalized=none).
>> >>    -Wnormalized=[none|id|nfc|nfkc] Warn about non-normalized Unicode 
>> >> strings.
>> >> 
>> >> I agree all of these look like improvements, especially the
>> >> --include-barrier one.  But I think the include ones also show
>> >> that the "Use the latter option instead." decision is independent
>> >> of whether the option is defined to be an alias.
>> 
>> Gah, I meant an Alias() with an argument here.
>> 
>> >> 
>> >> FWIW, there's also:
>> >> 
>> >> Wmissing-format-attribute
>> >> C ObjC C++ ObjC++ Warning Alias(Wsuggest-attribute=format)
>> >> ;
>> >> 
>> >> which still ends up as:
>> >> 
>> >>   -Wmissing-format-attribute  Same as -Wsuggest-attribute=format.  Use 
>> >> the latter option instead.
>> >> 
>> >> Not really my area though, so I don't have any specific suggestion
>> >> about how to separate the cases.
>> >> 
>> >
>> > Right, sorry, in my first email I only mentioned the options output by
>> > --help=common, but there were a few more as well. Thanks very much for 
>> > trying
>> > it out and for the feedback.
>> >
>> > The rule I implemented was to change the help output for all alias options
>> > with no documentation if they also specify the extra 2nd option (or 2nd and
>> > 3rd options) to the Alias directive. For example, -include-barrier is like 
>> > this:
>> >
>> > -include-barrier C ObjC C++ ObjC++ Alias(I, -)
>> >
>> > It serves to provide the argument '-' to the option '-I', so it is 
>> > eligible for
>> > the new text. The others are like this one:
>> >
>> > -include-directory-after C ObjC C++ ObjC++ Separate Alias(idirafter) 
>> > MissingArgError(missing path after %qs)
>> >
>> > Since that one doesn't pass the extra args to Alias, I interpreted it to
>> > mean this is the case for which the "Use the latter option" directive was
>> > intended to apply. (-idirafter has been designated as preferable to
>> > -include-directory-after).
>> 
>> Yeah, I get why you did it like this.  It's just that the end effect
>> is to make --include-barrier seem less disparaged than the other
>> --include-* options, but I'm not sure there's supposed to be any
>> difference between them in that respect.
>> 
>> Perhaps we should drop the "Use the latter option instead." thing
>> altogether for aliases.  I'm not sure that it really helps, and this
>> thread shows that adding it automatically can lead to some odd corner
>> cases.
>> 
>> In practice we shouldn't remove any of these aliases unless we're
>> also removing the option that they're an alias of.  And if we do that,
>> the options should go through the usual deprecation cycle, just like
>> options without aliases.
>> 
>> If there are specific options that we want to steer users away
>> from without deprecation, then we should probably have a specific
>> tag for that.
>
> Thanks, it makes sense to me. That would amount to changing just one line of
> the patch then, so it would look instead like the attached.
>
> -Lewis
>
> gcc/ChangeLog:
>
> 2020-03-19  Lewis Hyatt  <lhy...@gmail.com>
>
>       * opts.c (print_filtered_help): Improve the help text for alias
>       options.

LGTM, thanks.  OK if noone objects in 48 hrs.

Richard

>
> commit 7a74dd55098e2ec8c2b87dc172ac34f91eefc0c1
> Author: Lewis Hyatt <lhy...@gmail.com>
> Date:   Wed Feb 12 13:52:28 2020 -0500
>
>     driver: Improve the generated help text for alias options
>     
> diff --git a/gcc/opts.c b/gcc/opts.c
> index ac160ed8404..5dc7d65dedd 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -1315,14 +1315,31 @@ print_filtered_help (unsigned int include_flags,
>        if (option->alias_target < N_OPTS
>         && cl_options [option->alias_target].help)
>       {
> +       const struct cl_option *target = cl_options + option->alias_target;
>         if (option->help == NULL)
>           {
> -           /* For undocumented options that are aliases for other options
> -              that are documented, point the reader to the other option in
> -              preference of the former.  */
> -           snprintf (new_help, sizeof new_help,
> -                     _("Same as %s.  Use the latter option instead."),
> -                     cl_options [option->alias_target].opt_text);
> +           /* The option is undocumented but is an alias for an option that
> +              is documented.  If the option has alias arguments, then its
> +              purpose is to provide certain arguments to the other option, so
> +              inform the reader of this.  Otherwise, point the reader to the
> +              other option in preference to the former.  */
> +
> +           if (option->alias_arg)
> +             {
> +               if (option->neg_alias_arg)
> +                 snprintf (new_help, sizeof new_help,
> +                           _("Same as %s%s (or, in negated form, %s%s)."),
> +                           target->opt_text, option->alias_arg,
> +                           target->opt_text, option->neg_alias_arg);
> +               else
> +                 snprintf (new_help, sizeof new_help,
> +                           _("Same as %s%s."),
> +                           target->opt_text, option->alias_arg);
> +             }
> +           else
> +             snprintf (new_help, sizeof new_help,
> +                       _("Same as %s."),
> +                       target->opt_text);
>           }
>         else
>           {

Reply via email to