Dmitri Gribenko <griboz...@gmail.com> wrote on 06/02/2016 06:19:33 PM: > > Could you check if there are multiple definitions of off_t or mode_t > in different headers guarded by macros? Something like this, > duplicated across several headers: > > #if !defined(_OFF_T_DEFINED) > typedef __off_t off_t; > #define _OFF_T_DEFINED > #endif > > This is a frequent pattern used in C headers, but it is an antipattern > for modules. With modules, all headers that are included into the > module get #included into a single translation unit and compiled into > a module, so only one of those typedefs will get activated (let's say > in foo.h), and the other one will get hidden because it is seen second > in the translation unit (let's say the one in bar.h gets hidden). If > you then import just the submodule for bar.h, the off_t definition > won't be visible, because it was #ifdef'ed out. > > There are fragile solutions to this (like including a header that > happens to fix the build this time), but the only real fix is to make > sure that there is only one place where a declaration can be located > in a module, regardless of the set of headers. >
Thanks for the response Dmitri. Yes this is indeed the case. On my Ubuntu 15.10 system there are conditional typedefs of this flavor in 5 /usr/include/* header files for mode_t and in 6 header files for off_t. What do you recommend I should try to work around the messy state of the system headers? --dave
_______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev