erichkeane wrote: > This diagnostic fires in the following code - > https://gcc.godbolt.org/z/G6sYcTnWc: > > ``` > extern void f(struct stat*); > #include <sys/stat.h> > void g() { > struct stat s; > f(&s); > } > ``` > > ``` > <source>:1:22: warning: declaration of 'struct stat' will not be visible > outside of this function [-Wvisibility] > 1 | extern void f(struct stat*); > | ^ > <source>:5:7: error: incompatible pointer types passing 'struct stat *' to > parameter of type 'struct stat *' [-Wincompatible-pointer-types] > 5 | f(&s); > | ^~ > <source>:1:27: note: passing argument to parameter here > 1 | extern void f(struct stat*); > | ^ > ``` > > Is this expected?
Yes. The prototype of `f` is using a `locally` defined struct (see the `Wvisibility` diagnostic). So that type is ONLY visible on line 1. The version of `stat` from the `stat` header is a DIFFERENT one of the same name. In reality, we chould probably identify when the names are the same and try to point via a note WHERE the first declaration of each type is (which might give a better hint here), but these are different types. IF this is your code, I'd suggest doing a forward-declaration of `struct stat` outside of a function prototype. https://github.com/llvm/llvm-project/pull/157364 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
