[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.