llvm-project/clang
Douglas Gregor 5a4649b034 Deserialize macro history when we deserialize an identifier that has
macro history.

When deserializing macro history, we arrange history such that the
macros that have definitions (that haven't been #undef'd) and are
visible come at the beginning of the list, which is what the
preprocessor and other clients of Preprocessor::getMacroInfo()
expect. If additional macro definitions become visible later, they'll
be moved toward the front of the list. Note that it's possible to have
ambiguities, but we don't diagnose them yet.

There is a partially-implemented design decision here that, if a
particular identifier has been defined or #undef'd within the
translation unit, that definition (or #undef) hides any macro
definitions that come from imported modules. There's still a little
work to do to ensure that the right #undef'ing happens.

Additionally, we'll need to scope the update records for #undefs, so
they only kick in when the submodule containing that update record
becomes visible.

llvm-svn: 165682
2012-10-11 00:46:49 +00:00
..
INPUTS Revert 'Fix a typo 'iff' => 'if''. iff is an abreviation of if and only if. See: http://en.wikipedia.org/wiki/If_and_only_if Commit 164766 2012-09-27 10:16:10 +00:00
bindings Python bindings: fix typo. 2012-10-07 11:51:45 +00:00
docs PR14004: Fix typo in documentation. 2012-10-03 21:02:25 +00:00
examples Split library clangRewrite into clangRewriteCore and clangRewriteFrontend. 2012-09-01 05:09:24 +00:00
include Deserialize macro history when we deserialize an identifier that has 2012-10-11 00:46:49 +00:00
lib Deserialize macro history when we deserialize an identifier that has 2012-10-11 00:46:49 +00:00
runtime Fixup for r165097: build 32-bit ASan compiler-rt library on 64-bit Linux only if just-built clang can build simple 32-bit executables 2012-10-09 16:03:52 +00:00
test Deserialize macro history when we deserialize an identifier that has 2012-10-11 00:46:49 +00:00
tools Teach set-xcode-analyzer that the new default value for ExecPath is CLANG_ANALYZER_EXEC. 2012-10-11 00:40:41 +00:00
unittests [Doc parsing] This patch searches overridden objc/c++ 2012-10-10 18:34:52 +00:00
utils tblgen: Build clang-tblgen without RTTI. 2012-10-10 20:25:45 +00:00
www List of potential checkers: smart pointer checker: actually, unique_ptr<T[]> 2012-10-06 17:23:59 +00:00
.gitignore Add extra vim swap file pattern 2012-10-09 23:48:58 +00:00
CMakeLists.txt Fix capitalization of LibXml2 for CMake on case-sensitive file systems 2012-08-07 20:42:31 +00:00
INSTALL.txt
LICENSE.TXT
Makefile The top-level clang Makefile is #included into other Makefiles. (sigh) So we 2012-10-03 08:39:19 +00:00
ModuleInfo.txt
NOTES.txt Add a note about a missing optimization in the case of virtual 2012-03-30 04:25:03 +00:00
README.txt commit access verified, revert change 2012-03-06 22:55:51 +00:00

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/