blob: 6fe53d931631c6f396de4d8af307c8223a1e9c15 [file] [log] [blame]
Sean Silva3872b462012-12-12 23:44:55 +00001========================================
2Precompiled Header and Modules Internals
3========================================
4
5.. contents::
6 :local:
7
8This document describes the design and implementation of Clang's precompiled
9headers (PCH) and modules. If you are interested in the end-user view, please
Sean Silva159cc9e2013-01-02 13:07:47 +000010see the :ref:`User's Manual <usersmanual-precompiled-headers>`.
Sean Silva3872b462012-12-12 23:44:55 +000011
12Using Precompiled Headers with ``clang``
13----------------------------------------
14
15The Clang compiler frontend, ``clang -cc1``, supports two command line options
16for generating and using PCH files.
17
18To generate PCH files using ``clang -cc1``, use the option :option:`-emit-pch`:
19
20.. code-block:: bash
21
22 $ clang -cc1 test.h -emit-pch -o test.h.pch
23
24This option is transparently used by ``clang`` when generating PCH files. The
25resulting PCH file contains the serialized form of the compiler's internal
26representation after it has completed parsing and semantic analysis. The PCH
27file can then be used as a prefix header with the :option:`-include-pch`
28option:
29
30.. code-block:: bash
31
32 $ clang -cc1 -include-pch test.h.pch test.c -o test.s
33
34Design Philosophy
35-----------------
36
37Precompiled headers are meant to improve overall compile times for projects, so
38the design of precompiled headers is entirely driven by performance concerns.
39The use case for precompiled headers is relatively simple: when there is a
40common set of headers that is included in nearly every source file in the
41project, we *precompile* that bundle of headers into a single precompiled
42header (PCH file). Then, when compiling the source files in the project, we
43load the PCH file first (as a prefix header), which acts as a stand-in for that
44bundle of headers.
45
46A precompiled header implementation improves performance when:
47
48* Loading the PCH file is significantly faster than re-parsing the bundle of
49 headers stored within the PCH file. Thus, a precompiled header design
50 attempts to minimize the cost of reading the PCH file. Ideally, this cost
51 should not vary with the size of the precompiled header file.
52
53* The cost of generating the PCH file initially is not so large that it
54 counters the per-source-file performance improvement due to eliminating the
55 need to parse the bundled headers in the first place. This is particularly
56 important on multi-core systems, because PCH file generation serializes the
57 build when all compilations require the PCH file to be up-to-date.
58
59Modules, as implemented in Clang, use the same mechanisms as precompiled
60headers to save a serialized AST file (one per module) and use those AST
61modules. From an implementation standpoint, modules are a generalization of
62precompiled headers, lifting a number of restrictions placed on precompiled
63headers. In particular, there can only be one precompiled header and it must
64be included at the beginning of the translation unit. The extensions to the
65AST file format required for modules are discussed in the section on
66:ref:`modules <pchinternals-modules>`.
67
68Clang's AST files are designed with a compact on-disk representation, which
69minimizes both creation time and the time required to initially load the AST
70file. The AST file itself contains a serialized representation of Clang's
71abstract syntax trees and supporting data structures, stored using the same
72compressed bitstream as `LLVM's bitcode file format
73<http://llvm.org/docs/BitCodeFormat.html>`_.
74
75Clang's AST files are loaded "lazily" from disk. When an AST file is initially
76loaded, Clang reads only a small amount of data from the AST file to establish
77where certain important data structures are stored. The amount of data read in
78this initial load is independent of the size of the AST file, such that a
79larger AST file does not lead to longer AST load times. The actual header data
80in the AST file --- macros, functions, variables, types, etc. --- is loaded
81only when it is referenced from the user's code, at which point only that
82entity (and those entities it depends on) are deserialized from the AST file.
83With this approach, the cost of using an AST file for a translation unit is
84proportional to the amount of code actually used from the AST file, rather than
85being proportional to the size of the AST file itself.
86
87When given the :option:`-print-stats` option, Clang produces statistics
88describing how much of the AST file was actually loaded from disk. For a
89simple "Hello, World!" program that includes the Apple ``Cocoa.h`` header
90(which is built as a precompiled header), this option illustrates how little of
91the actual precompiled header is required:
92
93.. code-block:: none
94
95 *** PCH Statistics:
96 933 stat cache hits
97 4 stat cache misses
98 895/39981 source location entries read (2.238563%)
99 19/15315 types read (0.124061%)
100 20/82685 declarations read (0.024188%)
101 154/58070 identifiers read (0.265197%)
102 0/7260 selectors read (0.000000%)
103 0/30842 statements read (0.000000%)
104 4/8400 macros read (0.047619%)
105 1/4995 lexical declcontexts read (0.020020%)
106 0/4413 visible declcontexts read (0.000000%)
107 0/7230 method pool entries read (0.000000%)
108 0 method pool misses
109
110For this small program, only a tiny fraction of the source locations, types,
111declarations, identifiers, and macros were actually deserialized from the
112precompiled header. These statistics can be useful to determine whether the
113AST file implementation can be improved by making more of the implementation
114lazy.
115
116Precompiled headers can be chained. When you create a PCH while including an
117existing PCH, Clang can create the new PCH by referencing the original file and
118only writing the new data to the new file. For example, you could create a PCH
119out of all the headers that are very commonly used throughout your project, and
120then create a PCH for every single source file in the project that includes the
121code that is specific to that file, so that recompiling the file itself is very
122fast, without duplicating the data from the common headers for every file. The
123mechanisms behind chained precompiled headers are discussed in a :ref:`later
124section <pchinternals-chained>`.
125
126AST File Contents
127-----------------
128
129Clang's AST files are organized into several different blocks, each of which
130contains the serialized representation of a part of Clang's internal
131representation. Each of the blocks corresponds to either a block or a record
132within `LLVM's bitstream format <http://llvm.org/docs/BitCodeFormat.html>`_.
133The contents of each of these logical blocks are described below.
134
135.. image:: PCHLayout.png
136
137For a given AST file, the `llvm-bcanalyzer
138<http://llvm.org/docs/CommandGuide/llvm-bcanalyzer.html>`_ utility can be used
139to examine the actual structure of the bitstream for the AST file. This
140information can be used both to help understand the structure of the AST file
141and to isolate areas where AST files can still be optimized, e.g., through the
142introduction of abbreviations.
143
144Metadata Block
145^^^^^^^^^^^^^^
146
147The metadata block contains several records that provide information about how
148the AST file was built. This metadata is primarily used to validate the use of
149an AST file. For example, a precompiled header built for a 32-bit x86 target
150cannot be used when compiling for a 64-bit x86 target. The metadata block
151contains information about:
152
153Language options
154 Describes the particular language dialect used to compile the AST file,
155 including major options (e.g., Objective-C support) and more minor options
156 (e.g., support for "``//``" comments). The contents of this record correspond to
157 the ``LangOptions`` class.
158
159Target architecture
160 The target triple that describes the architecture, platform, and ABI for
161 which the AST file was generated, e.g., ``i386-apple-darwin9``.
162
163AST version
164 The major and minor version numbers of the AST file format. Changes in the
165 minor version number should not affect backward compatibility, while changes
166 in the major version number imply that a newer compiler cannot read an older
167 precompiled header (and vice-versa).
168
169Original file name
170 The full path of the header that was used to generate the AST file.
171
172Predefines buffer
173 Although not explicitly stored as part of the metadata, the predefines buffer
174 is used in the validation of the AST file. The predefines buffer itself
175 contains code generated by the compiler to initialize the preprocessor state
176 according to the current target, platform, and command-line options. For
177 example, the predefines buffer will contain "``#define __STDC__ 1``" when we
178 are compiling C without Microsoft extensions. The predefines buffer itself
179 is stored within the :ref:`pchinternals-sourcemgr`, but its contents are
180 verified along with the rest of the metadata.
181
182A chained PCH file (that is, one that references another PCH) and a module
183(which may import other modules) have additional metadata containing the list
184of all AST files that this AST file depends on. Each of those files will be
185loaded along with this AST file.
186
187For chained precompiled headers, the language options, target architecture and
188predefines buffer data is taken from the end of the chain, since they have to
189match anyway.
190
191.. _pchinternals-sourcemgr:
192
193Source Manager Block
194^^^^^^^^^^^^^^^^^^^^
195
196The source manager block contains the serialized representation of Clang's
Dmitri Gribenko5cc05802012-12-15 20:41:17 +0000197:ref:`SourceManager <SourceManager>` class, which handles the mapping from
198source locations (as represented in Clang's abstract syntax tree) into actual
199column/line positions within a source file or macro instantiation. The AST
200file's representation of the source manager also includes information about all
201of the headers that were (transitively) included when building the AST file.
Sean Silva3872b462012-12-12 23:44:55 +0000202
203The bulk of the source manager block is dedicated to information about the
204various files, buffers, and macro instantiations into which a source location
205can refer. Each of these is referenced by a numeric "file ID", which is a
206unique number (allocated starting at 1) stored in the source location. Clang
207serializes the information for each kind of file ID, along with an index that
208maps file IDs to the position within the AST file where the information about
209that file ID is stored. The data associated with a file ID is loaded only when
210required by the front end, e.g., to emit a diagnostic that includes a macro
211instantiation history inside the header itself.
212
213The source manager block also contains information about all of the headers
214that were included when building the AST file. This includes information about
215the controlling macro for the header (e.g., when the preprocessor identified
216that the contents of the header dependent on a macro like
217``LLVM_CLANG_SOURCEMANAGER_H``) along with a cached version of the results of
218the ``stat()`` system calls performed when building the AST file. The latter
219is particularly useful in reducing system time when searching for include
220files.
221
222.. _pchinternals-preprocessor:
223
224Preprocessor Block
225^^^^^^^^^^^^^^^^^^
226
227The preprocessor block contains the serialized representation of the
228preprocessor. Specifically, it contains all of the macros that have been
229defined by the end of the header used to build the AST file, along with the
230token sequences that comprise each macro. The macro definitions are only read
231from the AST file when the name of the macro first occurs in the program. This
232lazy loading of macro definitions is triggered by lookups into the
233:ref:`identifier table <pchinternals-ident-table>`.
234
235.. _pchinternals-types:
236
237Types Block
238^^^^^^^^^^^
239
240The types block contains the serialized representation of all of the types
241referenced in the translation unit. Each Clang type node (``PointerType``,
242``FunctionProtoType``, etc.) has a corresponding record type in the AST file.
243When types are deserialized from the AST file, the data within the record is
244used to reconstruct the appropriate type node using the AST context.
245
246Each type has a unique type ID, which is an integer that uniquely identifies
247that type. Type ID 0 represents the NULL type, type IDs less than
248``NUM_PREDEF_TYPE_IDS`` represent predefined types (``void``, ``float``, etc.),
249while other "user-defined" type IDs are assigned consecutively from
250``NUM_PREDEF_TYPE_IDS`` upward as the types are encountered. The AST file has
251an associated mapping from the user-defined types block to the location within
252the types block where the serialized representation of that type resides,
253enabling lazy deserialization of types. When a type is referenced from within
254the AST file, that reference is encoded using the type ID shifted left by 3
255bits. The lower three bits are used to represent the ``const``, ``volatile``,
Dmitri Gribenko5cc05802012-12-15 20:41:17 +0000256and ``restrict`` qualifiers, as in Clang's :ref:`QualType <QualType>` class.
Sean Silva3872b462012-12-12 23:44:55 +0000257
258.. _pchinternals-decls:
259
260Declarations Block
261^^^^^^^^^^^^^^^^^^
262
263The declarations block contains the serialized representation of all of the
264declarations referenced in the translation unit. Each Clang declaration node
265(``VarDecl``, ``FunctionDecl``, etc.) has a corresponding record type in the
266AST file. When declarations are deserialized from the AST file, the data
267within the record is used to build and populate a new instance of the
268corresponding ``Decl`` node. As with types, each declaration node has a
269numeric ID that is used to refer to that declaration within the AST file. In
270addition, a lookup table provides a mapping from that numeric ID to the offset
271within the precompiled header where that declaration is described.
272
273Declarations in Clang's abstract syntax trees are stored hierarchically. At
274the top of the hierarchy is the translation unit (``TranslationUnitDecl``),
275which contains all of the declarations in the translation unit but is not
276actually written as a specific declaration node. Its child declarations (such
277as functions or struct types) may also contain other declarations inside them,
Dmitri Gribenko5cc05802012-12-15 20:41:17 +0000278and so on. Within Clang, each declaration is stored within a :ref:`declaration
279context <DeclContext>`, as represented by the ``DeclContext`` class.
280Declaration contexts provide the mechanism to perform name lookup within a
281given declaration (e.g., find the member named ``x`` in a structure) and
282iterate over the declarations stored within a context (e.g., iterate over all
283of the fields of a structure for structure layout).
Sean Silva3872b462012-12-12 23:44:55 +0000284
285In Clang's AST file format, deserializing a declaration that is a
286``DeclContext`` is a separate operation from deserializing all of the
287declarations stored within that declaration context. Therefore, Clang will
288deserialize the translation unit declaration without deserializing the
289declarations within that translation unit. When required, the declarations
290stored within a declaration context will be deserialized. There are two
291representations of the declarations within a declaration context, which
292correspond to the name-lookup and iteration behavior described above:
293
294* When the front end performs name lookup to find a name ``x`` within a given
295 declaration context (for example, during semantic analysis of the expression
296 ``p->x``, where ``p``'s type is defined in the precompiled header), Clang
297 refers to an on-disk hash table that maps from the names within that
298 declaration context to the declaration IDs that represent each visible
299 declaration with that name. The actual declarations will then be
300 deserialized to provide the results of name lookup.
301* When the front end performs iteration over all of the declarations within a
302 declaration context, all of those declarations are immediately
303 de-serialized. For large declaration contexts (e.g., the translation unit),
304 this operation is expensive; however, large declaration contexts are not
305 traversed in normal compilation, since such a traversal is unnecessary.
306 However, it is common for the code generator and semantic analysis to
307 traverse declaration contexts for structs, classes, unions, and
308 enumerations, although those contexts contain relatively few declarations in
309 the common case.
310
311Statements and Expressions
312^^^^^^^^^^^^^^^^^^^^^^^^^^
313
314Statements and expressions are stored in the AST file in both the :ref:`types
315<pchinternals-types>` and the :ref:`declarations <pchinternals-decls>` blocks,
316because every statement or expression will be associated with either a type or
317declaration. The actual statement and expression records are stored
318immediately following the declaration or type that owns the statement or
319expression. For example, the statement representing the body of a function
320will be stored directly following the declaration of the function.
321
322As with types and declarations, each statement and expression kind in Clang's
323abstract syntax tree (``ForStmt``, ``CallExpr``, etc.) has a corresponding
324record type in the AST file, which contains the serialized representation of
325that statement or expression. Each substatement or subexpression within an
326expression is stored as a separate record (which keeps most records to a fixed
327size). Within the AST file, the subexpressions of an expression are stored, in
328reverse order, prior to the expression that owns those expression, using a form
329of `Reverse Polish Notation
330<http://en.wikipedia.org/wiki/Reverse_Polish_notation>`_. For example, an
331expression ``3 - 4 + 5`` would be represented as follows:
332
333+-----------------------+
334| ``IntegerLiteral(5)`` |
335+-----------------------+
336| ``IntegerLiteral(4)`` |
337+-----------------------+
338| ``IntegerLiteral(3)`` |
339+-----------------------+
340| ``IntegerLiteral(-)`` |
341+-----------------------+
342| ``IntegerLiteral(+)`` |
343+-----------------------+
344| ``STOP`` |
345+-----------------------+
346
347When reading this representation, Clang evaluates each expression record it
348encounters, builds the appropriate abstract syntax tree node, and then pushes
349that expression on to a stack. When a record contains *N* subexpressions ---
350``BinaryOperator`` has two of them --- those expressions are popped from the
351top of the stack. The special STOP code indicates that we have reached the end
352of a serialized expression or statement; other expression or statement records
353may follow, but they are part of a different expression.
354
355.. _pchinternals-ident-table:
356
357Identifier Table Block
358^^^^^^^^^^^^^^^^^^^^^^
359
360The identifier table block contains an on-disk hash table that maps each
361identifier mentioned within the AST file to the serialized representation of
362the identifier's information (e.g, the ``IdentifierInfo`` structure). The
363serialized representation contains:
364
365* The actual identifier string.
366* Flags that describe whether this identifier is the name of a built-in, a
367 poisoned identifier, an extension token, or a macro.
368* If the identifier names a macro, the offset of the macro definition within
369 the :ref:`pchinternals-preprocessor`.
370* If the identifier names one or more declarations visible from translation
371 unit scope, the :ref:`declaration IDs <pchinternals-decls>` of these
372 declarations.
373
374When an AST file is loaded, the AST file reader mechanism introduces itself
375into the identifier table as an external lookup source. Thus, when the user
376program refers to an identifier that has not yet been seen, Clang will perform
377a lookup into the identifier table. If an identifier is found, its contents
378(macro definitions, flags, top-level declarations, etc.) will be deserialized,
379at which point the corresponding ``IdentifierInfo`` structure will have the
380same contents it would have after parsing the headers in the AST file.
381
382Within the AST file, the identifiers used to name declarations are represented
383with an integral value. A separate table provides a mapping from this integral
384value (the identifier ID) to the location within the on-disk hash table where
385that identifier is stored. This mapping is used when deserializing the name of
386a declaration, the identifier of a token, or any other construct in the AST
387file that refers to a name.
388
389.. _pchinternals-method-pool:
390
391Method Pool Block
392^^^^^^^^^^^^^^^^^
393
394The method pool block is represented as an on-disk hash table that serves two
395purposes: it provides a mapping from the names of Objective-C selectors to the
396set of Objective-C instance and class methods that have that particular
397selector (which is required for semantic analysis in Objective-C) and also
398stores all of the selectors used by entities within the AST file. The design
399of the method pool is similar to that of the :ref:`identifier table
400<pchinternals-ident-table>`: the first time a particular selector is formed
401during the compilation of the program, Clang will search in the on-disk hash
402table of selectors; if found, Clang will read the Objective-C methods
403associated with that selector into the appropriate front-end data structure
404(``Sema::InstanceMethodPool`` and ``Sema::FactoryMethodPool`` for instance and
405class methods, respectively).
406
407As with identifiers, selectors are represented by numeric values within the AST
408file. A separate index maps these numeric selector values to the offset of the
409selector within the on-disk hash table, and will be used when de-serializing an
410Objective-C method declaration (or other Objective-C construct) that refers to
411the selector.
412
413AST Reader Integration Points
414-----------------------------
415
416The "lazy" deserialization behavior of AST files requires their integration
417into several completely different submodules of Clang. For example, lazily
418deserializing the declarations during name lookup requires that the name-lookup
419routines be able to query the AST file to find entities stored there.
420
421For each Clang data structure that requires direct interaction with the AST
422reader logic, there is an abstract class that provides the interface between
423the two modules. The ``ASTReader`` class, which handles the loading of an AST
424file, inherits from all of these abstract classes to provide lazy
425deserialization of Clang's data structures. ``ASTReader`` implements the
426following abstract classes:
427
428``StatSysCallCache``
429 This abstract interface is associated with the ``FileManager`` class, and is
430 used whenever the file manager is going to perform a ``stat()`` system call.
431
432``ExternalSLocEntrySource``
433 This abstract interface is associated with the ``SourceManager`` class, and
434 is used whenever the :ref:`source manager <pchinternals-sourcemgr>` needs to
435 load the details of a file, buffer, or macro instantiation.
436
437``IdentifierInfoLookup``
438 This abstract interface is associated with the ``IdentifierTable`` class, and
439 is used whenever the program source refers to an identifier that has not yet
440 been seen. In this case, the AST reader searches for this identifier within
441 its :ref:`identifier table <pchinternals-ident-table>` to load any top-level
442 declarations or macros associated with that identifier.
443
444``ExternalASTSource``
445 This abstract interface is associated with the ``ASTContext`` class, and is
446 used whenever the abstract syntax tree nodes need to loaded from the AST
447 file. It provides the ability to de-serialize declarations and types
448 identified by their numeric values, read the bodies of functions when
449 required, and read the declarations stored within a declaration context
450 (either for iteration or for name lookup).
451
452``ExternalSemaSource``
453 This abstract interface is associated with the ``Sema`` class, and is used
454 whenever semantic analysis needs to read information from the :ref:`global
455 method pool <pchinternals-method-pool>`.
456
457.. _pchinternals-chained:
458
459Chained precompiled headers
460---------------------------
461
462Chained precompiled headers were initially intended to improve the performance
463of IDE-centric operations such as syntax highlighting and code completion while
464a particular source file is being edited by the user. To minimize the amount
465of reparsing required after a change to the file, a form of precompiled header
466--- called a precompiled *preamble* --- is automatically generated by parsing
467all of the headers in the source file, up to and including the last
468``#include``. When only the source file changes (and none of the headers it
469depends on), reparsing of that source file can use the precompiled preamble and
470start parsing after the ``#include``\ s, so parsing time is proportional to the
471size of the source file (rather than all of its includes). However, the
472compilation of that translation unit may already use a precompiled header: in
473this case, Clang will create the precompiled preamble as a chained precompiled
474header that refers to the original precompiled header. This drastically
475reduces the time needed to serialize the precompiled preamble for use in
476reparsing.
477
478Chained precompiled headers get their name because each precompiled header can
479depend on one other precompiled header, forming a chain of dependencies. A
480translation unit will then include the precompiled header that starts the chain
481(i.e., nothing depends on it). This linearity of dependencies is important for
482the semantic model of chained precompiled headers, because the most-recent
483precompiled header can provide information that overrides the information
484provided by the precompiled headers it depends on, just like a header file
485``B.h`` that includes another header ``A.h`` can modify the state produced by
486parsing ``A.h``, e.g., by ``#undef``'ing a macro defined in ``A.h``.
487
488There are several ways in which chained precompiled headers generalize the AST
489file model:
490
491Numbering of IDs
492 Many different kinds of entities --- identifiers, declarations, types, etc.
493 --- have ID numbers that start at 1 or some other predefined constant and
494 grow upward. Each precompiled header records the maximum ID number it has
495 assigned in each category. Then, when a new precompiled header is generated
496 that depends on (chains to) another precompiled header, it will start
497 counting at the next available ID number. This way, one can determine, given
498 an ID number, which AST file actually contains the entity.
499
500Name lookup
501 When writing a chained precompiled header, Clang attempts to write only
502 information that has changed from the precompiled header on which it is
503 based. This changes the lookup algorithm for the various tables, such as the
504 :ref:`identifier table <pchinternals-ident-table>`: the search starts at the
505 most-recent precompiled header. If no entry is found, lookup then proceeds
506 to the identifier table in the precompiled header it depends on, and so one.
507 Once a lookup succeeds, that result is considered definitive, overriding any
508 results from earlier precompiled headers.
509
510Update records
511 There are various ways in which a later precompiled header can modify the
512 entities described in an earlier precompiled header. For example, later
513 precompiled headers can add entries into the various name-lookup tables for
514 the translation unit or namespaces, or add new categories to an Objective-C
515 class. Each of these updates is captured in an "update record" that is
516 stored in the chained precompiled header file and will be loaded along with
517 the original entity.
518
519.. _pchinternals-modules:
520
521Modules
522-------
523
524Modules generalize the chained precompiled header model yet further, from a
525linear chain of precompiled headers to an arbitrary directed acyclic graph
526(DAG) of AST files. All of the same techniques used to make chained
527precompiled headers work --- ID number, name lookup, update records --- are
528shared with modules. However, the DAG nature of modules introduce a number of
529additional complications to the model:
530
531Numbering of IDs
532 The simple, linear numbering scheme used in chained precompiled headers falls
533 apart with the module DAG, because different modules may end up with
534 different numbering schemes for entities they imported from common shared
535 modules. To account for this, each module file provides information about
536 which modules it depends on and which ID numbers it assigned to the entities
537 in those modules, as well as which ID numbers it took for its own new
538 entities. The AST reader then maps these "local" ID numbers into a "global"
539 ID number space for the current translation unit, providing a 1-1 mapping
540 between entities (in whatever AST file they inhabit) and global ID numbers.
541 If that translation unit is then serialized into an AST file, this mapping
542 will be stored for use when the AST file is imported.
543
544Declaration merging
545 It is possible for a given entity (from the language's perspective) to be
546 declared multiple times in different places. For example, two different
547 headers can have the declaration of ``printf`` or could forward-declare
548 ``struct stat``. If each of those headers is included in a module, and some
549 third party imports both of those modules, there is a potentially serious
550 problem: name lookup for ``printf`` or ``struct stat`` will find both
551 declarations, but the AST nodes are unrelated. This would result in a
552 compilation error, due to an ambiguity in name lookup. Therefore, the AST
553 reader performs declaration merging according to the appropriate language
554 semantics, ensuring that the two disjoint declarations are merged into a
555 single redeclaration chain (with a common canonical declaration), so that it
556 is as if one of the headers had been included before the other.
557
558Name Visibility
559 Modules allow certain names that occur during module creation to be "hidden",
560 so that they are not part of the public interface of the module and are not
561 visible to its clients. The AST reader maintains a "visible" bit on various
562 AST nodes (declarations, macros, etc.) to indicate whether that particular
563 AST node is currently visible; the various name lookup mechanisms in Clang
564 inspect the visible bit to determine whether that entity, which is still in
565 the AST (because other, visible AST nodes may depend on it), can actually be
566 found by name lookup. When a new (sub)module is imported, it may make
567 existing, non-visible, already-deserialized AST nodes visible; it is the
568 responsibility of the AST reader to find and update these AST nodes when it
569 is notified of the import.
570