<div dir="ltr">Recently I encountered a problem of "(virtually mapped)header not found" while I was using runToolOnCodeWithArgs for unittesting(I posted this issue to mailing list about three days before. Thank Manuel Klimek for his help).<div><br><div>Today I do a brief tracing on related functions. I suspect there may be a problem in Preprocessor::LookupFile function.</div></div><div><br></div><div>Details:</div><div><br></div><div>For a virtually mapped header file which is past to runToolOnCodeWithArgs,</div><div>its content will be registered to PreprocessorOptions at the end of ToolInvocation::run function(in the Tooling.cpp):</div><div><br></div><div><div>for (const auto &It : MappedFileContents) {</div><div>    // Inject the code as the given file name into the preprocessor options.</div><div>    std::unique_ptr<llvm::MemoryBuffer> Input =</div><div>        llvm::MemoryBuffer::getMemBuffer(It.getValue());</div><div>    Invocation->getPreprocessorOpts().addRemappedFile(It.getKey(),</div><div>                                                      Input.release());</div><div>  }</div></div><div><br></div><div><br></div><div>And later, all of the headers are going to be looked up in Preprocessor::LookupFile function(in the PPDirectives.cpp).</div><div>I noticed that this function does not look up headers in PreprocessorOptions(member PPOpts in Preprocessor class),</div><div>thus therefore any virtually mapped headers cannot be found.</div><div><br></div><div>I searched in clang source tree for any spot involves PreprocessorOptions::addRemappedFile.</div><div>But I do not see any one include headers in their virtual source code.</div><div>So first I want to ask whether it is a good idea to use headers in runToolOnCodeWithArgs?</div><div>If it is, is this problem a bug in Preprocessor::LookupFile?</div><div><br></div><div>Thank you.</div><div>--------------------</div><div><br></div><div>clang revision: 79f7453146b517c0c1a8cf466399e5bed2e6d83f</div><div>Compiler: Visual C++ 2013</div></div>