Hi Richard, this commit appears to break the module self-host on Darwin.
When compiling the following program generated by clang’s own cmake script: > #undef NDEBUG > #include <cassert> > #define NDEBUG > #include <cassert> > int main() { assert(this code is not compiled); } with clang++ -std=c++11 -fmodules -fcxx-modules test.cpp I get > While building module 'std' imported from > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/cassert:20: > While building module 'Darwin' imported from > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/cstddef:39: > In file included from <module-includes>:98: > In file included from > /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/wchar.h:92: > In file included from > /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/_wctype.h:57: > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/ctype.h:33:10: > fatal error: cyclic dependency in module 'std': std -> Darwin -> std > #include <__config> > ^ > While building module 'std' imported from > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/cassert:20: > In file included from <module-includes>:1: > In file included from > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/algorithm:624: > In file included from > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/initializer_list:47: > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/cstddef:39:10: > fatal error: could not build module 'Darwin' > #include <stddef.h> > ~~~~~~~~^ > In file included from test.cpp:2: > /Users/buildslave/adrian/llvm.org/_build.ninja.release/bin/../include/c++/v1/cassert:20:10: > fatal error: could not build module 'std' > #include <__config> > ~~~~~~~~^ > 3 errors generated. Let me know how I can help in diagnosing what’s going on here. Once this works, I’d like to to set up a green dragon bot that builds clang with LLVM_ENABLE_MODULES to catch similar problems earlier. -- adrian > On Oct 8, 2015, at 1:36 PM, Richard Smith via cfe-commits > <cfe-commits@lists.llvm.org> wrote: > > Author: rsmith > Date: Thu Oct 8 15:36:30 2015 > New Revision: 249738 > > URL: http://llvm.org/viewvc/llvm-project?rev=249738&view=rev > Log: > Split <ctype.h> out of <cctype>. > > Added: > libcxx/trunk/include/ctype.h > - copied, changed from r249736, libcxx/trunk/include/cctype > Modified: > libcxx/trunk/include/cctype > libcxx/trunk/test/std/strings/c.strings/cctype.pass.cpp > > Modified: libcxx/trunk/include/cctype > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/cctype?rev=249738&r1=249737&r2=249738&view=diff > ============================================================================== > --- libcxx/trunk/include/cctype (original) > +++ libcxx/trunk/include/cctype Thu Oct 8 15:36:30 2015 > @@ -37,10 +37,6 @@ int toupper(int c); > > #include <__config> > #include <ctype.h> > -#if defined(_LIBCPP_MSVCRT) > -#include "support/win32/support.h" > -#include "support/win32/locale_win32.h" > -#endif // _LIBCPP_MSVCRT > > #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) > #pragma GCC system_header > @@ -48,33 +44,19 @@ int toupper(int c); > > _LIBCPP_BEGIN_NAMESPACE_STD > > -#undef isalnum > using ::isalnum; > -#undef isalpha > using ::isalpha; > -#undef isblank > using ::isblank; > -#undef iscntrl > using ::iscntrl; > -#undef isdigit > using ::isdigit; > -#undef isgraph > using ::isgraph; > -#undef islower > using ::islower; > -#undef isprint > using ::isprint; > -#undef ispunct > using ::ispunct; > -#undef isspace > using ::isspace; > -#undef isupper > using ::isupper; > -#undef isxdigit > using ::isxdigit; > -#undef tolower > using ::tolower; > -#undef toupper > using ::toupper; > > _LIBCPP_END_NAMESPACE_STD > > Copied: libcxx/trunk/include/ctype.h (from r249736, > libcxx/trunk/include/cctype) > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/ctype.h?p2=libcxx/trunk/include/ctype.h&p1=libcxx/trunk/include/cctype&r1=249736&r2=249738&rev=249738&view=diff > ============================================================================== > --- libcxx/trunk/include/cctype (original) > +++ libcxx/trunk/include/ctype.h Thu Oct 8 15:36:30 2015 > @@ -1,5 +1,5 @@ > // -*- C++ -*- > -//===---------------------------- cctype > ----------------------------------===// > +//===---------------------------- ctype.h > ---------------------------------===// > // > // The LLVM Compiler Infrastructure > // > @@ -8,14 +8,11 @@ > // > //===----------------------------------------------------------------------===// > > -#ifndef _LIBCPP_CCTYPE > -#define _LIBCPP_CCTYPE > +#ifndef _LIBCPP_CTYPE_H > +#define _LIBCPP_CTYPE_H > > /* > - cctype synopsis > - > -namespace std > -{ > + ctype.h synopsis > > int isalnum(int c); > int isalpha(int c); > @@ -31,52 +28,41 @@ int isupper(int c); > int isxdigit(int c); > int tolower(int c); > int toupper(int c); > - > -} // std > */ > > #include <__config> > -#include <ctype.h> > -#if defined(_LIBCPP_MSVCRT) > -#include "support/win32/support.h" > -#include "support/win32/locale_win32.h" > -#endif // _LIBCPP_MSVCRT > +#include_next <ctype.h> > > #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) > #pragma GCC system_header > #endif > > -_LIBCPP_BEGIN_NAMESPACE_STD > +#ifdef __cplusplus > + > +#if defined(_LIBCPP_MSVCRT) > +// We support including .h headers inside 'extern "C"' contexts, so switch > +// back to C++ linkage before including these C++ headers. > +extern "C++" { > + #include "support/win32/support.h" > + #include "support/win32/locale_win32.h" > +} > +#endif // _LIBCPP_MSVCRT > > #undef isalnum > -using ::isalnum; > #undef isalpha > -using ::isalpha; > #undef isblank > -using ::isblank; > #undef iscntrl > -using ::iscntrl; > #undef isdigit > -using ::isdigit; > #undef isgraph > -using ::isgraph; > #undef islower > -using ::islower; > #undef isprint > -using ::isprint; > #undef ispunct > -using ::ispunct; > #undef isspace > -using ::isspace; > #undef isupper > -using ::isupper; > #undef isxdigit > -using ::isxdigit; > #undef tolower > -using ::tolower; > #undef toupper > -using ::toupper; > > -_LIBCPP_END_NAMESPACE_STD > +#endif > > -#endif // _LIBCPP_CCTYPE > +#endif // _LIBCPP_CTYPE_H > > Modified: libcxx/trunk/test/std/strings/c.strings/cctype.pass.cpp > URL: > http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/strings/c.strings/cctype.pass.cpp?rev=249738&r1=249737&r2=249738&view=diff > ============================================================================== > --- libcxx/trunk/test/std/strings/c.strings/cctype.pass.cpp (original) > +++ libcxx/trunk/test/std/strings/c.strings/cctype.pass.cpp Thu Oct 8 > 15:36:30 2015 > @@ -86,18 +86,18 @@ int main() > static_assert((std::is_same<decltype(std::tolower(0)), int>::value), ""); > static_assert((std::is_same<decltype(std::toupper(0)), int>::value), ""); > > - assert(isalnum('a')); > - assert(isalpha('a')); > - assert(isblank(' ')); > - assert(!iscntrl(' ')); > - assert(!isdigit('a')); > - assert(isgraph('a')); > - assert(islower('a')); > - assert(isprint('a')); > - assert(!ispunct('a')); > - assert(!isspace('a')); > - assert(!isupper('a')); > - assert(isxdigit('a')); > - assert(tolower('A') == 'a'); > - assert(toupper('a') == 'A'); > + assert(std::isalnum('a')); > + assert(std::isalpha('a')); > + assert(std::isblank(' ')); > + assert(!std::iscntrl(' ')); > + assert(!std::isdigit('a')); > + assert(std::isgraph('a')); > + assert(std::islower('a')); > + assert(std::isprint('a')); > + assert(!std::ispunct('a')); > + assert(!std::isspace('a')); > + assert(!std::isupper('a')); > + assert(std::isxdigit('a')); > + assert(std::tolower('A') == 'a'); > + assert(std::toupper('a') == 'A'); > } > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits