aboutsummaryrefslogtreecommitdiff
path: root/test/Modules
AgeCommit message (Collapse)Author
2011-11-30Introduce an opt-in warning indicating when the compiler is treatingDouglas Gregor
an #include/#import as a module import. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145500 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-30Add preprocessor-only test for submodule importsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145490 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-30When loading a module that involves submodules (e.g., std.vector),Douglas Gregor
check whether the named submodules themselves are actually valid, and drill down to the named submodule (although we don't do anything with it yet). Perform typo correction on the submodule names when possible. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145477 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-29Eliminate the -emit-module option, which emitted a module by parsing aDouglas Gregor
source file (e.g., a header). Immediately steal this useful option name for building modules from a module map file. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145444 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-29Teach the module import mechanism how to rebuild modules expressed viaDouglas Gregor
module map, rather than assuming that there is an umbrella header. This allows us to automatically build umbrella-less modules. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145415 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-17Add the notion of "framework" modules to module maps. FrameworkDouglas Gregor
modules (obviously) describe frameworks, and understand the header layout of frameworks. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144921 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-17When we're loading a framework header, first try to turn the frameworkDouglas Gregor
into a module. This module can either be loaded from a module map in the framework directory (which isn't quite working yet) or inferred from an umbrella header (which does work, and replaces the existing hack). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144877 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Add missing header for modules test.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144862 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16A module with an umbrella header assumes that all of the headers inDouglas Gregor
the umbrella header's directory and its subdirectories are part of the module (that's why it's an umbrella). Make sure that these headers are considered to be part of the module for lookup purposes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144859 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Implement (de-)serialization of the buffer contents for an overriddenDouglas Gregor
file in the source manager. This allows us to properly create and use modules described by module map files without umbrella headers (or with incompletely umbrella headers). More generally, we can actually build a PCH file that makes use of file -> buffer remappings, which could be useful in libclang in the future. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144830 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16When building a module from a module map that isn't simply an umbrellaDouglas Gregor
header, create our own in-memory buffer to parse all of the appropriate headers, and use that to build the module. This isn't end-to-end testable yet; that's coming next. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144797 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Switch the remaining modules tests over to -emit-module-from-map.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144795 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Migrate a few more modules tests over to -emit-module-from-map.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144779 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Switch some more of the modules tests over to "-emit-module-from-map",Douglas Gregor
and remove stray fprintf. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144742 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-16Add support for building a module from a module map to the -cc1Douglas Gregor
interface. This is currently limited to modules with umbrella headers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144736 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-12Tweak the module map file test slightly, by putting one of the headersDouglas Gregor
into a submodule. Submodules aren't actually supported anywhere else, but we do parse them, so this verifies that we're at least seeing through them properly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144436 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-12When searching for a module, speculatively load module maps to see ifDouglas Gregor
the module is described in one of the module maps in a search path or in a subdirectory off the search path that has the same name as the module we're looking for. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144433 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-11Teach the search for modules to consider modules described by a moduleDouglas Gregor
map, so long as they have an umbrella header. This makes it possible to introduce a module map + umbrella header for a given set of headers, to turn it into a module. There are two major deficiencies here: first, we don't go hunting for module map files when we just see a module import (so we won't know about the modules described therein). Second, we don't yet have a way to build modules that don't have umbrella headers, or have incomplete umbrella headers. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144424 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-11Wire up the mapping from header files mentioned in module maps over toDouglas Gregor
the corresponding (top-level) modules. This isn't actually useful yet, because we don't yet have a way to build modules out of module maps. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144410 91177308-0d34-0410-b5e6-96231b3b80d8
2011-11-11Introduce basic support for parsing module map files.Douglas Gregor
Module map files provide a way to map between headers and modules, so that we can layer a module system on top of existing headers without changing those headers at all. This commit introduces the module map file parser and the module map that it generates, and wires up the module map file parser so that we'll automatically find module map files as part of header search. Note that we don't yet use the information stored in the module map. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@144402 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-27Make the loading of information attached to an IdentifierInfo from anDouglas Gregor
AST file more lazy, so that we don't eagerly load that information for all known identifiers each time a new AST file is loaded. The eager reloading made some sense in the context of precompiled headers, since very few identifiers were defined before PCH load time. With modules, however, a huge amount of code can get parsed before we see an @import, so laziness becomes important here. The approach taken to make this information lazy is fairly simple: when we load a new AST file, we mark all of the existing identifiers as being out-of-date. Whenever we want to access information that may come from an AST (e.g., whether the identifier has a macro definition, or what top-level declarations have that name), we check the out-of-date bit and, if it's set, ask the AST reader to update the IdentifierInfo from the AST files. The update is a merge, and we now take care to merge declarations before/after imports with declarations from multiple imports. The results of this optimization are fairly dramatic. On a small application that brings in 14 non-trivial modules, this takes modules from being > 3x slower than a "perfect" PCH file down to 30% slower for a full rebuild. A partial rebuild (where the PCH file or modules can be re-used) is down to 7% slower. Making the PCH file just a little imperfect (e.g., adding two smallish modules used by a bunch of .m files that aren't in the PCH file) tips the scales in favor of the modules approach, with 24% faster partial rebuilds. This is just a first step; the lazy scheme could possibly be improved by adding versioning, so we don't search into modules we already searched. Moreover, we'll need similar lazy schemes for all of the other lookup data structures, such as DeclContexts. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@143100 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-17For modules, all macros that aren't include guards are implicitlyDouglas Gregor
public. Add a __private_macro__ directive to hide a macro, similar to the __module_private__ declaration specifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142188 91177308-0d34-0410-b5e6-96231b3b80d8
2011-10-17When building a module, use the macro definitions on the command lineDouglas Gregor
as part of the hash rather than ignoring them. This means we'll end up building more module variants (overall), but it allows configuration macros such as NDEBUG to work so long as they're specified via command line. More to come in this space. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142187 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-29Introduce an opt-in warning when a module is being implicitly builtDouglas Gregor
from sources. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@140746 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-17When we load header file information from the external source (i.e.,Douglas Gregor
the AST reader), merge that header file information with whatever header file information we already have. Otherwise, we might forget something we already knew (e.g., that the header was #import'd already). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139979 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-17With modules, we can end up loading a new module after we've seen anDouglas Gregor
arbitrary amount of code. This forces us to stage the AST writer more strictly, ensuring that we don't assign a declaration ID to a declaration until after we're certain that no more modules will get loaded. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139974 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-15Add an experimental flag -fauto-module-import that automatically turnsDouglas Gregor
#include or #import direcctives of framework headers into module imports of the corresponding framework module. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139860 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-15Add test case for mutually recursive modulesDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139838 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-15When we load the first module, make sure that we wire up the ASTConsumer to ↵Douglas Gregor
the newly-created ASTReader. This makes sure that CodeGen sees the declarations it is interested in git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139824 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-15Teach LangOptions::resetNonModularOptions to actually do what it says it doesDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139791 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-14Make -E work with module importsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139750 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-14Don't try to write a macro offset for an identifier that names a ↵Douglas Gregor
non-exported macro, for real this time git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139745 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-14Revert my exported-macro hackery. Something is amissDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139734 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-14Don't try to write a macro offset for an identifier that names a ↵Douglas Gregor
non-exported macro git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139728 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-14Add test for the driver's handling of modulesDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139727 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-13For modules, use a hash of the compiler version, language options, andDouglas Gregor
target triple to separate modules built under different conditions. The hash is used to create a subdirectory in the module cache path where other invocations of the compiler (with the same version, language options, etc.) can find the precompiled modules. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139662 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-13When building a module on-demand, clear out the "non-modular" languageDouglas Gregor
and preprocessor options (such as macro definitions) first. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139638 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-13Switch the serialization of LangOptions over to use the .def file. WeDouglas Gregor
should no longer have the serialization of LangOptions out of sync with the structure itself (yay). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139613 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-13Add a struct-size check for modules when dealing with module-private fieldsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139597 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12When an import statement fails to find a module in the module cache,Douglas Gregor
but there is a corresponding umbrella header in a framework, build the module on-the-fly so it can be immediately loaded at the import statement. This is very much proof-of-concept code, with details to be fleshed out over time. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139558 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12Introduce a cc1-level option to provide the path to the module cache,Douglas Gregor
where the compiler will look for module files. Eliminates the egregious hack where we looked into the header search paths for modules. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139538 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12Diagnose attempt to mark function-local declarations as __module_private__.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139519 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12Allow __module_private__ on fieldsDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139499 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-12Remove the restriction on module-private friends. Since the friendDouglas Gregor
declaration may be the first declaration, we want the ability to that declaration to be marked module-private. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139497 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-10Don't crash when we fail to load a module. It's unbecoming of aDouglas Gregor
well-bred compiler like Clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139442 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-09Friends cannot be declared module-privateDouglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139411 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-09Specializations cannot be module-hidden. Diagnose attempts to do so.Douglas Gregor
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139406 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-09__module_private__ is inherited by redeclarations of an entity, andDouglas Gregor
must also be present of the first declaration of that entity. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139384 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-09Propagate __module_private__ from previous declarations to laterDouglas Gregor
declarations. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139380 91177308-0d34-0410-b5e6-96231b3b80d8
2011-09-09Modules: introduce the __module_private__ declaration specifier, whichDouglas Gregor
indicates that a declaration is only visible within the module it is declared in. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139348 91177308-0d34-0410-b5e6-96231b3b80d8