<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Jun 19, 2017 at 6:45 AM Boris Kolpackov via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am trying to use the Modules TS implementation in Clang 5.0.0-svn305177.<br>
My module interface file:<br>
<br>
#include <string><br>
<br>
export module hello;<br>
<br>
export namespace hello<br>
{<br>
  void say (const std::string& name);<br>
}<br>
<br>
Module implementation file:<br>
<br>
#include <string><br>
#include <iostream><br>
<br>
module hello;<br>
<br>
using namespace std;<br>
<br>
namespace hello<br>
{<br>
  void<br>
  say (const string& n)<br>
  {<br>
    cout << "Hello, " << n << '!' << endl;<br>
  }<br>
}<br>
<br>
The problems:<br>
<br>
1. It seems the .pcm file compiled from the interface file references<br>
   said interface file. If I remove it after generating .pcm, then I get<br>
   an error like this when compiling the implementation file:<br>
<br>
   clang++-5.0 -std=c++1z -D__cpp_modules=201704 -fmodules-ts -fmodule-file=hello.a.pcm -o hello.a.o -c -x c++ hello.a.o.ii<br>
   fatal error: malformed or corrupted AST file: 'could not find file '/home/boris/work/build2/hello/m/libmhello/libhello/hello.a.pcm.ii' referenced by AST file 'hello.a.pcm''<br>
<br>
   The .pcm is produced with this command line:<br>
<br>
   clang++-5.0 -std=c++1z -D__cpp_modules=201704 -fmodules-ts -o hello.a.pcm --precompile -Xclang -fmodules-codegen -Xclang -fmodules-debuginfo -x c++-module hello.a.pcm.ii<br></blockquote><div><br>This should be able to be addressed by using -Xclang -fmodules-embed-all-files (see <a href="https://reviews.llvm.org/rL253950">https://reviews.llvm.org/rL253950</a> for some more info).<br><br>Perhaps Richard'll have ideas on the rest.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">2. If I keep the source file, then I get errors along these lines (again,<br>
   when compiling the implementation file):<br>
<br>
   In file included from hello.cxx:3:<br>
   In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../../include/c++/6.2.0/string:39:<br>
   /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../../include/c++/6.2.0/bits/stringfwd.h:69:48: error: template parameter redefines default argument<br>
     template<typename _CharT, typename _Traits = char_traits<_CharT>,<br>
   /usr/bin/../lib/gcc/x86_64-linux-gnu/6.2.0/../../../../include/c++/6.2.0/bits/stringfwd.h:69:48: note: previous default template argument defined here<br>
     template<typename _CharT, typename _Traits = char_traits<_CharT>,<br>
<br>
   The same code compiles fine with VC 15u3.<br>
<br>
   If I get rid of the <string> inclusion from the interface file (and<br>
   use const char* to pass the name), everything compiles fine.<br>
<br>
Thanks,<br>
Boris<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div></div>