[Bug 264730] clang++ -fmodules fails when using stdout from cstdio: error: declaration of '__stdoutp' must be imported from module 'std.iosfwd' before it is required
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 18 Jun 2022 15:09:41 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264730 --- Comment #3 from Michał Górny <mgorny@gentoo.org> --- Well, it wasn't my choice, really ;-). Apparently use of gmodules was enabled in LLDB's test suite on FreeBSD when the relevant tests were added — i.e. in 2016. Unless I'm missing something, we've been doing some testing with them since then. I'm guessing there were some recent changes to clang or libc++ that made them more strict. Ah, sorry, I don't think the 'wchar.h' part is actually the problem — I think it just blames the wrong header. The underlying problem is that the stdout/stderr/stdin macros aren't visible from <cstdio>. I know very little about modules myself but FWICS the purpose here is to avoid relying on indirect includes. I think textual header breaks that, i.e. the following test program should fail: ``` #include <cstdio> int main() { FILE *f; } ``` With the original header variant, it fails as expected (just blames the wrong header): ``` $ clang++ -fmodules test.cxx test.cxx:4:3: error: missing '#include <wchar.h>'; 'FILE' must be declared before it is used FILE *f; ^ /usr/include/wchar.h:109:24: note: declaration here is not visible typedef struct __sFILE FILE; ^ 1 error generated. ``` Changing `header` to `textual header` makes it build, so I think that goes against the intent. I suppose there must be a better way of solving stdout/stderr/stdin problem. -- You are receiving this mail because: You are the assignee for the bug.