llvm-project/clang
Manuel Klimek 1f76c4e810 Use the same SourceManager for ModuleMaps and compilations.
This allows using virtual file mappings on the original SourceManager to
map in virtual module.map files. Without this patch, the ModuleMap
search will find a module.map file (as the FileEntry exists in the
FileManager), but will be unable to get the content from the
SourceManager (as ModuleMap previously created its own SourceManager).

Two problems needed to be fixed which this patch exposed:

1. Storing the inferred module map
When writing out a module, the ASTWriter stores the names of the files
in the main source manager; when loading the AST again, the ASTReader
errs out if such a file is found missing, unless it is overridden.
Previously CompilerInstance's compileModule method would store the
inferred module map to a temporary file; the problem with this approach
is that now that the module map is handled by the main source manager,
the ASTWriter stores the name of the temporary module map as source to
the compilation; later, when the module is loaded, the temporary file
has already been deleted, which leads to a compilation error. This patch
changes the inferred module map to instead inject a virtual file into
the source manager. This both saves some disk IO, and works with how the
ASTWriter/ASTReader handle overridden source files.

2. Changing test input in test/Modules/Inputs/*
Now that the module map file is handled by the main source manager, the
VerifyDiagnosticConsumer will not ignore diagnostics created while
parsing the module map file. The module test test/Modules/renamed.m uses
-I test/Modules/Inputs and triggers recursive loading of all module maps
in test/Modules/Inputs, some of which had conflicting names, thus
leading errors while parsing the module maps. Those diagnostics already
occur on trunk, but before this patch they would not break the test, as
they were ignored by the VerifyDiagnosticConsumer. This patch thus
changes the module maps that have been recently introduced which broke
the invariant of compatible modules maps in test/Modules/Inputs.

llvm-svn: 193314
2013-10-24 07:51:24 +00:00
..
INPUTS
bindings [libclang] Introduce clang_Type_getCXXRefQualifier whichexposes ref-qualifier information of function type. 2013-10-11 19:58:38 +00:00
docs Undoing accidental change to docs/LanguageExtensions.rst in my previous 2013-10-24 00:59:24 +00:00
examples Add irreader to the component list, because ParseIR is called. 2013-10-19 08:33:11 +00:00
include Use the same SourceManager for ModuleMaps and compilations. 2013-10-24 07:51:24 +00:00
lib Use the same SourceManager for ModuleMaps and compilations. 2013-10-24 07:51:24 +00:00
runtime [LSan] Add support for building standalone LSan runtime to Make build (clang part) 2013-08-20 14:49:36 +00:00
test Use the same SourceManager for ModuleMaps and compilations. 2013-10-24 07:51:24 +00:00
tools [analyzer] scan-build: Handle -m* option wildcard after compiler/linker flags. 2013-10-22 18:55:18 +00:00
unittests Use the same SourceManager for ModuleMaps and compilations. 2013-10-24 07:51:24 +00:00
utils PR17666: Instead of allowing an initial identifier argument in any attribute 2013-10-24 01:07:54 +00:00
www Implement C++1y sized deallocation (n3778). This is not enabled by -std=c++1y; 2013-09-29 04:40:38 +00:00
.arcconfig
.clang-format Switch the default mode for clang-format to '-file'. Make 'LLVM' the 2013-09-02 07:42:02 +00:00
.gitignore
CMakeLists.txt Revert commits r190613, r190560 and r190557. 2013-10-01 17:31:40 +00:00
CODE_OWNERS.TXT Revert r185557 as it was a bit (a lot) premature. 2013-07-03 20:37:50 +00:00
INSTALL.txt Reverting test commit 2013-06-07 05:33:21 +00:00
LICENSE.TXT
Makefile
ModuleInfo.txt
NOTES.txt
README.txt

README.txt

//===----------------------------------------------------------------------===//
// C Language Family Front-end
//===----------------------------------------------------------------------===//

Welcome to Clang.  This is a compiler front-end for the C family of languages
(C, C++, Objective-C, and Objective-C++) which is built as part of the LLVM
compiler infrastructure project.

Unlike many other compiler frontends, Clang is useful for a number of things
beyond just compiling code: we intend for Clang to be host to a number of
different source level tools.  One example of this is the Clang Static Analyzer.

If you're interested in more (including how to build Clang) it is best to read
the relevant web sites.  Here are some pointers:

Information on Clang:              http://clang.llvm.org/
Building and using Clang:          http://clang.llvm.org/get_started.html
Clang Static Analyzer:             http://clang-analyzer.llvm.org/
Information on the LLVM project:   http://llvm.org/

If you have questions or comments about Clang, a great place to discuss them is
on the Clang development mailing list:
  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

If you find a bug in Clang, please file it in the LLVM bug tracker:
  http://llvm.org/bugs/