Package: iwyu Version: 3.8-1 Severity: important
It was noticed that the upgrade from 3.7 to 3.8 introduced a regression. iwyu is now recommending includes for things which are nowhere used in a file. First problem was that this version is not depending on libclang-common-3.8-dev and thus didn't find some of the headers (see #722132). But it turns out that this is not the only problems E.g it wants me to now include #include <linux/compiler.h> // for __u, __read_once_size, __read_o... #include "linux/swab.h" // for __fswab16 But these things are nowhere used in the file. The only appearances are inside included headers. I've tried to create a preprocessed file but it seems that iwyu doesn't report any problems anymore when the file is already preprocessed. But I've created a small example which shows the problem and how it related to macros. The test.c file just uses the functionality from memops.h (this is the abstraction layer) + stdio.h. memops.h itself is using compiler.h. No functionality from compiler.h is used directly in test.c Compile with macros in memops.h: $ iwyu test.c -o test.o test.c should add these lines: #include "compiler.h" test.c should remove these lines: The full include-list for test.c: #include <stdio.h> // for printf #include "compiler.h" #include "memops.h" // for get_memory_pointer_once And now with the same functionality but implemented as static inline function: $ iwyu -DIWYU_INLINE_FUNCTION_TEST test.c -o test.o (test.c has correct #includes/fwd-decls) So my guess is that the handling of macros is currently broken in iwyu/clang. Marking it as important because it has major effects on the usability of the package. I would even go so far that it makes it unusable for many projects. --- System information. --- Architecture: amd64 Kernel: Linux 4.5.0-2-amd64 Debian Release: stretch/sid 500 unstable httpredir.debian.org
iwyu_braindead.tar.xz
Description: application/xz