This is a known bug.<div><br></div><div>The problem is that when we go to build the module in "Inputs/UndefinedFixIt1", we build some synthetic #includes for the contents of the module (relative to the current directory), then change into the "Inputs/UndefinedFixIt1" directory to perform the build of the module, where the includes we synthesized obviously don't work. The workaround is to use absolute -I paths for any directory containing a module.<div>
<br></div><div>Patches to fix this would be welcome! =)<br></div></div><br><div>On Wed Jan 08 2014 at 10:01:00 AM, Nico Weber <<a href="mailto:thakis@chromium.org">thakis@chromium.org</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">It seems to work for me if I pass an absolute path to -I – does that help?</div><div><br><br><div></div></div><div><div>On Wed, Jan 8, 2014 at 8:18 AM, Thompson, John <span dir="ltr"><<a href="mailto:John_Thompson@playstation.sony.com" target="_blank">John_Thompson@playstation.sony.com</a>></span> wrote:<br>

</div></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>





<div lang="EN-US" link="blue" vlink="purple">
<div>
<p>Hi,<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>Could someone help me understand what is wrong with the enclosed build module example?  (It’s kind of in the form of a test, but ignore the comment for running the test, as it’s just a source file here.)<u></u><u></u></p>


<p><u></u> <u></u></p>
<p>I’m trying to gear up to add a fixit message for undefined types which can be found in a module, but I can’t get this simple scenario to work.  The idea is that if I later remove the #include, I’ll get an error on the undefined type, which
 nonetheless could be found in a module, allowing me to add a fixit.<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>In looking at other modules tests, it seems that if I put the module.map file in a subdirectory and use a -I option, clang can find the module map there and load it, right?<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>In looking at this in a debugger, in the HandleIncludeDirective function, the lookupFile call at line 1452 loads the module map.  But then at line 1655 a loadModule call loads the module map again, but fails.<u></u><u></u></p>


<p><u></u> <u></u></p>
<p>To reproduce, just run the makefile, which produces:<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>***<u></u><u></u></p>
<p>d:\Clang\bugs\modules>make<u></u><u></u></p>
<p>clang -cc1 -fmodules-cache-path=TestOutput -fmodules -IInputs\UndefinedFixIt1 UndefinedFixIt1.cpp<u></u><u></u></p>
<p><module-includes>:1:10: fatal error: 'Inputs\UndefinedFixIt1\public1.h' file not found<u></u><u></u></p>
<p>#include "Inputs\UndefinedFixIt1\public1.h"<u></u><u></u></p>
<p>         ^<u></u><u></u></p>
<p>UndefinedFixIt1.cpp:4:10: fatal error: could not build module 'public1'<u></u><u></u></p>
<p>#include "public1.h"<u></u><u></u></p>
<p>~~~~~~~~^~~~~~~~~~~<u></u><u></u></p>
<p>2 errors generated.<u></u><u></u></p>
<p>make: *** [all] Error 1<u></u><u></u></p>
<p>***<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>It’s probably something simple, but I can’t see it.<u></u><u></u></p>
<p><u></u> <u></u></p>
<p>Thanks.<span><font color="#888888"><u></u><u></u></font></span></p><span><font color="#888888">
<p><u></u> <u></u></p>
<p>-John<u></u><u></u></p>
<p><u></u> <u></u></p>
<p><u></u> <u></u></p>
</font></span></div>
</div>

<br></div></div></blockquote><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu" target="_blank">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></div></div></blockquote><br>
</blockquote>