teemperor abandoned this revision.
teemperor added a comment.

So, the idea of going back to the headers and see if we can potentially remove 
mm_malloc from the modulemap didn't work out (mostly because a lot of headers 
include it indirectly).

However, when going back to the original issue i noticed that the stdlib.h 
that's at fault is the one from stdlibc++, not the glibc one. In fact, the 
issue becomes more clear when re-adding cstdlib to my stl modulemap:

  . 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/stdlib.h
  While building module 'stl11' imported from 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/stdlib.h:36:
  While building module '_Builtin_intrinsics' imported from 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/x86_64-pc-linux-gnu/bits/opt_random.h:34:
  In file included from <module-includes>:2:
  In file included from /usr/lib/clang/7.0.1/include/immintrin.h:32:
  In file included from /usr/lib/clang/7.0.1/include/xmmintrin.h:39:
  In file included from /usr/lib/clang/7.0.1/include/mm_malloc.h:27:
  
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/stdlib.h:36:11:
 fatal error: cyclic dependency in module 'stl11': stl11 -> _Builtin_intrinsics
        -> stl11
  # include <cstdlib>
            ^
  While building module 'stl11' imported from 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/stdlib.h:36:
  In file included from <module-includes>:52:
  In file included from 
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/random:50:
  
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/x86_64-pc-linux-gnu/bits/opt_random.h:34:10:
 fatal error: could not build module
        '_Builtin_intrinsics'
  #include <pmmintrin.h>
   ~~~~~~~~^
  In file included from test.cpp:2:
  
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/stdlib.h:36:11:
 fatal error: could not build module 'stl11'
  # include <cstdlib>
    ~~~~~~~~^
  3 errors generated.

So to summarize: including stdlib.h (or cstdlib) is triggering our stl module 
to build, which in turn causes our `random` module to trigger which includes 
mm_malloc indirectly. If we move cstdlib and stdlib.h in their own modules we 
break the cyclic dependency. It's not optimal but I think it's less hacky than 
this patch or any of the other workarounds we came up with so far.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D43871/new/

https://reviews.llvm.org/D43871



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to