This works around GCC 9, which didn't see that the following statement
cannot terminate normally, even though 0 is obviously a constant expression
and assert_failed is marked as __attribute__((__noreturn__)).
do {
if (!(0))
assert_failed(...);
} while (0)
The only thing these cases have in common is the name "label" and the
"reached = 1" assignment. That's not reason enough to combine
completely unrelated functions.
Splitting the code arbitrarily in separate phases made the code harder
to understand, both for humans as well as automated tools.
One of these tools, check-msgs.lua, couldn't check whether the comments
match the actual messages, and of course, the comments were wrong.
There was no good reason to deviate from the pattern followed by all the
rest of the code.
Fix based on patch provided by Kobayashi Takashi. This brings nl(1) further
in to POSIX compliance. Verified behavior with classic SysV nl(1) and GNU
nl(1). There could still be edge cases here not specified by POSIX.
This variable was intended to help the compilers produce efficient code
by avoiding a duplicate memory read. As it turned out, GCC 5.5 doesn't
need this help, and probably newer compilers don't need it either. Well
done, GCC, keeping track of the memory locations even if the pointer to
it changes in the middle.
After the previous clean up in for.c 1.123 from 2020-12-30, GCC 5.5 did
not inline the function SubstVarLong anymore since it was now called
from 2 places. GCC didn't notice that the function call was essentially
the same since in differed only in the end character.
By combining the cases for ${V} and $(V), the code becomes even shorter
than before, while still being understandable.
At this point, the number of iteration items is always a multiple of the
number of iteration variables, which makes any addition more complicated
than absolutely necessary.
The comma expression in ForReadMore may be a nice trick, but it's not as
easy to read as a simple if-then-else chain. Test for '{' before '('
since BSD makefiles use braces by convention.
This removes the redundancy of mentioning the function name in the error
message. This redundancy had been correct in all but 2 cases:
build_real_imag and tsize.