[cfe-dev] help with modules

Thompson, John John_Thompson at playstation.sony.com
Fri Jan 10 07:40:26 PST 2014

Thanks Nico and Richard.  I'm working on fixing it.


From: Richard Smith [mailto:metafoo at gmail.com]
Sent: Wednesday, January 08, 2014 1:02 PM
To: Nico Weber; Thompson, John; cfe-dev at cs.uiuc.edu
Subject: Re: [cfe-dev] help with modules

This is a known bug.

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.

Patches to fix this would be welcome! =)

On Wed Jan 08 2014 at 10:01:00 AM, Nico Weber <thakis at chromium.org<mailto:thakis at chromium.org>> wrote:
It seems to work for me if I pass an absolute path to -I - does that help?

On Wed, Jan 8, 2014 at 8:18 AM, Thompson, John <John_Thompson at playstation.sony.com<mailto:John_Thompson at playstation.sony.com>> wrote:


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.)

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.

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?

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.

To reproduce, just run the makefile, which produces:



clang -cc1 -fmodules-cache-path=TestOutput -fmodules -IInputs\UndefinedFixIt1 UndefinedFixIt1.cpp

<module-includes>:1:10: fatal error: 'Inputs\UndefinedFixIt1\public1.h' file not found

#include "Inputs\UndefinedFixIt1\public1.h"


UndefinedFixIt1.cpp:4:10: fatal error: could not build module 'public1'

#include "public1.h"


2 errors generated.

make: *** [all] Error 1


It's probably something simple, but I can't see it.



cfe-dev mailing list
cfe-dev at cs.uiuc.edu<mailto:cfe-dev at cs.uiuc.edu>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140110/53d97d3c/attachment.html>

More information about the cfe-dev mailing list