diff options
| author | Douglas Gregor <dgregor@apple.com> | 2012-11-29 23:55:25 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2012-11-29 23:55:25 +0000 |
| commit | 7a626570ef4f457caab1302f238955aa1a2c7989 (patch) | |
| tree | 6c393a27c8319fd95dca2f69ccfe166d2f0e28c9 /clang/lib/Lex | |
| parent | 136d6746c58fe3ab431e2279289646769918a48f (diff) | |
| download | bcm5719-llvm-7a626570ef4f457caab1302f238955aa1a2c7989.tar.gz bcm5719-llvm-7a626570ef4f457caab1302f238955aa1a2c7989.zip | |
Keep track of modules that have failed to build. If we encounter an
import of that module elsewhere, don't try to build the module again:
it won't work, and the experience is quite dreadful. We track this
information somewhat globally, shared among all of the related
CompilerInvocations used to build modules on-the-fly, so that a
particular Clang instance will only try to build a given module once.
Fixes <rdar://problem/12552849>.
llvm-svn: 168961
Diffstat (limited to 'clang/lib/Lex')
| -rw-r--r-- | clang/lib/Lex/PPDirectives.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp index 50b161a1723..89490a3f232 100644 --- a/clang/lib/Lex/PPDirectives.cpp +++ b/clang/lib/Lex/PPDirectives.cpp @@ -1483,7 +1483,7 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, // If this was an #__include_macros directive, only make macros visible. Module::NameVisibilityKind Visibility = (IncludeKind == 3)? Module::MacrosVisible : Module::AllVisible; - Module *Imported + ModuleLoadResult Imported = TheModuleLoader.loadModule(IncludeTok.getLocation(), Path, Visibility, /*IsIncludeDirective=*/true); assert((Imported == 0 || Imported == SuggestedModule) && @@ -1498,6 +1498,13 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, } return; } + + // If we failed to find a submodule that we expected to find, we can + // continue. Otherwise, there's an error in the included file, so we + // don't want to include it. + if (!BuildingImportedModule && !Imported.isMissingExpected()) { + return; + } } if (Callbacks && SuggestedModule) { |

