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

I. Introduction:
 
 clang: noun
    1. A loud, resonant, metallic sound.
    2. The strident call of a crane or goose.
    3. C-language family front-end toolkit.

 The world needs better compiler tools, tools which are built as libraries. This
 design point allows reuse of the tools in new and novel ways. However, building
 the tools as libraries isn't enough: they must have clean APIs, be as
 decoupled from each other as possible, and be easy to modify/extend.  This
 requires clean layering, decent design, and avoiding tying the libraries to a
 specific use.  Oh yeah, did I mention that we want the resultant libraries to
 be as fast as possible? :)

 This front-end is built as a component of the LLVM toolkit that can be used
 with the LLVM backend or independently of it.  In this spirit, the API has been
 carefully designed as the following components:
 
   libsupport  - Basic support library, reused from LLVM.

   libsystem   - System abstraction library, reused from LLVM.
   
   libbasic    - Diagnostics, SourceLocations, SourceBuffer abstraction,
                 file system caching for input source files.  This depends on
                 libsupport and libsystem.

   libast      - Provides classes to represent the C AST, the C type system,
                 builtin functions, and various helpers for analyzing and
                 manipulating the AST (visitors, pretty printers, etc).  This
                 library depends on libbasic.


   liblex      - C/C++/ObjC lexing and preprocessing, identifier hash table,
                 pragma handling, tokens, and macros.  This depends on libbasic.

   libparse    - C (for now) parsing and local semantic analysis. This library
                 invokes coarse-grained 'Actions' provided by the client to do
                 stuff (e.g. libsema builds ASTs).  This depends on liblex.

   libsema     - Provides a set of parser actions to build a standardized AST
                 for programs.  AST's are 'streamed' out a top-level declaration
                 at a time, allowing clients to use decl-at-a-time processing,
                 build up entire translation units, or even build 'whole
                 program' ASTs depending on how they use the APIs.  This depends
                 on libast and libparse.

   librewrite  - Fast, scalable rewriting of source code.  This operates on
                 the raw syntactic text of source code, allowing a client
                 to insert and delete text in very large source files using
                 the same source location information embedded in ASTs.  This
                 is intended to be a low-level API that is useful for
                 higher-level clients and libraries such as code refactoring.

   libanalysis - Source-level dataflow analysis useful for performing analyses
                 such as computing live variables.  It also includes a
                 path-sensitive "graph-reachability" engine for writing
                 analyses that reason about different possible paths of
                 execution through source code.  This is currently being
                 employed to write a set of checks for finding bugs in software.

   libcodegen  - Lower the AST to LLVM IR for optimization & codegen.  Depends
                 on libast.
                 
   clang       - An example driver, client of the libraries at various levels.
                 This depends on all these libraries, and on LLVM VMCore.

 This front-end has been intentionally built as a DAG of libraries, making it
 easy to  reuse individual parts or replace pieces if desired. For example, to
 build a preprocessor, you take the Basic and Lexer libraries. If you want an
 indexer, you take those plus the Parser library and provide some actions for
 indexing.  If you want a refactoring, static analysis, or source-to-source
 compiler tool, it makes sense to take those plus the AST building and semantic
 analyzer library.  Finally, if you want to use this with the LLVM backend,
 you'd take these components plus the AST to LLVM lowering code.
 
 In the future I hope this toolkit will grow to include new and interesting
 components, including a C++ front-end, ObjC support, and a whole lot of other
 things.

 Finally, it should be pointed out that the goal here is to build something that
 is high-quality and industrial-strength: all the obnoxious features of the C
 family must be correctly supported (trigraphs, preprocessor arcana, K&R-style
 prototypes, GCC/MS extensions, etc).  It cannot be used if it is not 'real'.


II. Usage of clang driver:

 * Basic Command-Line Options:
   - Help: clang --help
   - Standard GCC options accepted: -E, -I*, -i*, -pedantic, -std=c90, etc.
   - To make diagnostics more gcc-like: -fno-caret-diagnostics -fno-show-column
   - Enable metric printing: -stats

 * -fsyntax-only is currently the default mode.

 * -E mode works the same way as GCC.

 * -Eonly mode does all preprocessing, but does not print the output,
     useful for timing the preprocessor.
 
 * -fsyntax-only is currently partially implemented, lacking some
     semantic analysis (some errors and warnings are not produced).

 * -parse-noop parses code without building an AST.  This is useful
     for timing the cost of the parser without including AST building
     time.
 
 * -parse-ast builds ASTs, but doesn't print them.  This is most
     useful for timing AST building vs -parse-noop.
 
 * -parse-ast-print pretty prints most expression and statements nodes.

 * -parse-ast-check checks that diagnostic messages that are expected
     are reported and that those which are reported are expected.

 * -dump-cfg builds ASTs and then CFGs.  CFGs are then pretty-printed.

 * -view-cfg builds ASTs and then CFGs.  CFGs are then visualized by
     invoking Graphviz.

     For more information on getting Graphviz to work with clang/LLVM,
     see: http://llvm.org/docs/ProgrammersManual.html#ViewGraph


III. Current advantages over GCC:

 * Column numbers are fully tracked (no 256 col limit, no GCC-style pruning).
 * All diagnostics have column numbers, includes 'caret diagnostics', and they
   highlight regions of interesting code (e.g. the LHS and RHS of a binop).
 * Full diagnostic customization by client (can format diagnostics however they
   like, e.g. in an IDE or refactoring tool) through DiagnosticClient interface.
 * Built as a framework, can be reused by multiple tools.
 * All languages supported linked into same library (no cc1,cc1obj, ...).
 * mmap's code in read-only, does not dirty the pages like GCC (mem footprint).
 * LLVM License, can be linked into non-GPL projects.
 * Full diagnostic control, per diagnostic.  Diagnostics are identified by ID.
 * Significantly faster than GCC at semantic analysis, parsing, preprocessing
   and lexing.
 * Defers exposing platform-specific stuff to as late as possible, tracks use of
   platform-specific features (e.g. #ifdef PPC) to allow 'portable bytecodes'.
 * The lexer doesn't rely on the "lexer hack": it has no notion of scope and
   does not categorize identifiers as types or variables -- this is up to the
   parser to decide.

Potential Future Features:

 * Fine grained diag control within the source (#pragma enable/disable warning).
 * Better token tracking within macros?  (Token came from this line, which is
   a macro argument instantiated here, recursively instantiated here).
 * Fast #import with a module system.
 * Dependency tracking: change to header file doesn't recompile every function
   that texually depends on it: recompile only those functions that need it.
   This is aka 'incremental parsing'.


IV. Missing Functionality / Improvements

Lexer:
 * Source character mapping.  GCC supports ASCII and UTF-8.
   See GCC options: -ftarget-charset and -ftarget-wide-charset.
 * Universal character support.  Experimental in GCC, enabled with
   -fextended-identifiers.
 * -fpreprocessed mode.

Preprocessor:
 * #assert/#unassert
 * MSExtension: "L#param" stringizes to a wide string literal.
 * Add support for -M*

Traditional Preprocessor:
 * Currently, we have none. :)

