On 2/14/20 8:37 AM, Josh Poimboeuf wrote: > In the second loop of ingenic_pinconf_set(), it annotates the switch > default case as unreachable(). The annotation is technically correct, > because that same case would have resulted in an early return in the > previous loop. > > However, if a bug were to get introduced later, for example if an > additional case were added to the first loop without adjusting the > second loop, it would result in nasty undefined behavior: most likely > the function's generated code would fall through to the next function. > > Another issue is that, while objtool normally understands unreachable() > annotations, there's one special case where it doesn't: when the > annotation occurs immediately after a 'ret' instruction. That happens > to be the case here because unreachable() is immediately before the > return. > > So change the unreachable() to BUG() so that the unreachable code, if > ever executed, would panic instead of introducing undefined behavior. > This also makes objtool happy. > > This fixes the following objtool warning: > > drivers/pinctrl/pinctrl-ingenic.o: warning: objtool: ingenic_pinconf_set() falls through to next function ingenic_pinconf_group_set() > > Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> Acked-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> # build-tested Thanks. > --- > drivers/pinctrl/pinctrl-ingenic.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pinctrl/pinctrl-ingenic.c b/drivers/pinctrl/pinctrl-ingenic.c > index 96f04d121ebd..6b61ac6cd4d2 100644 > --- a/drivers/pinctrl/pinctrl-ingenic.c > +++ b/drivers/pinctrl/pinctrl-ingenic.c > @@ -2158,7 +2158,7 @@ static int ingenic_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin, > break; > > default: > - unreachable(); > + BUG(); > } > } > > -- ~Randy