ash: less hackish implementation of evaltreenr()
authorDenys Vlasenko <vda.linux@googlemail.com>
Fri, 28 Jul 2017 13:28:33 +0000 (15:28 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Fri, 28 Jul 2017 13:28:33 +0000 (15:28 +0200)
commit619d9b5e6848a72350126ea9c1e413fd133181e3
tree1fe4ab734bd3b917ec4e9ef35d2c1e700a850605
parent46f3f16b587ce781ab43a7b17698e1e565b2acf7
ash: less hackish implementation of evaltreenr()

Defining a function alias with __attribute__ ((alias("evaltree"),__noreturn__))
is not that usual, and clang had a bug which made it misunderstand
this construct.

Switch to:
ALWAYS_INLINE NORETURN evaltreenr() { evaltree(); unreachable(); }

Older gcc's do not know unreachable(), on them we pay the price of having
a few extra calls to abort():

function                                             old     new   delta
evalsubshell                                         151     156      +5
evalpipe                                             357     362      +5
argstr                                              1141    1144      +3

On newer gcc, code size does not change.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
include/platform.h
shell/ash.c