On 4/16/2019 4:52 AM, Duy Nguyen wrote: > On Mon, Apr 15, 2019 at 9:06 PM Derrick Stolee <stolee@xxxxxxxxx> wrote: >> >> On 1/26/2019 7:35 PM, Nguyễn Thái Ngọc Duy wrote: >>> @@ -238,7 +249,10 @@ static enum parse_opt_result parse_short_opt(struct parse_opt_ctx_t *p, >>> len++; >>> arg = xmemdupz(p->opt, len); >>> p->opt = p->opt[len] ? p->opt + len : NULL; >>> - rc = (*numopt->callback)(numopt, arg, 0) ? (-1) : 0; >>> + if (numopt->callback) >>> + rc = (*numopt->callback)(numopt, arg, 0) ? (-1) : 0; >>> + else >>> + rc = (*numopt->ll_callback)(p, numopt, arg, 0); >>> free(arg); >>> return rc; >>> } >> >> Hi Duy, >> >> This "else" condition is unreachable. This block is only hit when we have a "-<n>" >> option, using OPT_NUMBER_CALLBACK, which is implemented by filling "callback", never >> "ll_callback". > > It does not mean ll_callback cannot be used in the future though. That's not a very good reason to add it now. YAGNI. > We > have three options > > 1. drop the else clause > 2. replace with "else BUG();" > 3. implement proper else clause > > Option #1 to me sounds wrong. If you don't support something, yell up. > Silently ignoring it only makes it harder to track down to this > unsupported location when it becomes reachable, however unlikely that > is. > > Which leaves options #2 and #3. If you think this one line is risky > enough, I'll send a patch to replace it with BUG(). It's not about risk, but the fact that it is pointless. The only way to get to this block is to create a 'struct option' with type OPTION_NUMBER manually (ignoring the OPT_NUMBER_CALLBACK macro), which _should_ be unsupported. If someone goes to the pain of adding a way to instantiate with a low-level callback, then they should add this 'if' statement. If you are going to add protection from an incorrect instantiation of 'callback' in a use of OPT_NUMBER_CALLBACK, then the proper place to do that is probably in parse_options_check(), where you were already doing callback-vs-ll_callback checks in the case of OPTION_CALLBACK and OPTION_LOWLEVEL_CALLBACK. However, the only places where the OPT_NUMBER_CALLBACK option appears are builtin/grep.c and t/helper/test-parse-options.c. I don't imagine a need to add low-level callbacks any time soon. >> I recommend reverting this diff segment, but please let me know if I'm missing something. I still think this is the easiest way to remove the dead code. I'll try to submit a patch later. I'm still not in full work mode, so I may be slow. Thanks, -Stolee