Up to [cvs.NetBSD.org] / src / tests / usr.bin / xlint / lint1
Request diff between arbitrary revisions
Keyword substitution: kv
Default branch: MAIN
tests/lint: remove .exp files, as they have become redundant Now that each lint1 test lists all generated diagnostics as 'expect' comments, the information from the .exp files is no longer needed. The only information that gets lost is the order of the diagnostics, which is mostly relevant for paired messages like 'inconsistent definition' + 'previous definition was here'.
tests/lint: expect complete messages in feature tests Previously, the tests contained many comments like /* expect: 123 */, which were useless to a casual reader since nobody is expected to learn lint's message IDs by heart. Replace these with the complete diagnostics, to show what lint is complaining about. The tests named msg_*.c have been left unmodified since they mention the full message text in their header comment. No functional change.
lint: quote placeholders in messages for unused variables
lint: rewrite handling of initializations, fixing several bugs The previous implementation had a wrong model of how initialization happens in C99, its assertions failed in all kind of edge cases and it was not possible to fix the remaining bugs one at a time without running into even more obscure assertion failures. The debug logging was detailed but did not help to clarify the situation. After about 20 failed attempts at fixing the small details I decided to start all over and rewrite the initialization code from scratch. I left the low-level parts of handling designators, the code that is independent of brace_level and the high-level parts of how the parser calls into this module. Everything else is completely new. The concept of a brace level stays since that is how C99 describes initialization. The previous code could not handle multi-level designations (see d_init_pop_member.c). There are no more assertion failures in the initialization code. Some TODO comments have been left in the tests to keep the line numbers the same in this commit. These will be cleaned up in a follow-up commit. The new implementation does not handle initialization with "missing" braces. This is an edge case that both GCC and Clang warn about, so it is not widely used. If necessary, it may be added later. The new implementation does not use any global variables in the vast majority of the functions, to make all dependencies and possible modifications obvious.
lint: prefix error messages with 'error:' This makes it easier to find these errors in the build logs.
tests/lint: add comma to struct initialization This places the error marker one line up, where it is expected.
lint: add common header for all tests For those tests that didn't use GCC-style line markers such as "# 2", the line numbers of the diagnostics stay the same. This is purely conincidental. Before, the 3 lines came from lint's built-in definitions (see 'builtins' in main1.c), and line number counting continued as if nothing had happened, making the first line of the actual file line 4. These 3 built-in lines are now replaced with 3 lines of file header.
lint: fix wrong warning about bitfield in C99 structure initialization The variable namemem is supposed to be a circular list, which is "documented" implicitly in push_member. The implementation was buggy though. In pop_member, the circular list was destroyed though. Given the list (capital, major, favorite_color, green), removing capital made major point to itself in the forward direction, even though it should not have been modified at all. In the test, I had been too optimistic to quickly understand the code around variable initialization. I was wrong though, so I had to adjust the comments there to reality.
lint: demonstrate bug in handling of nested C9X struct initializers