forked from OSchip/llvm-project
[Modules] Early-exit if ReadOptionsBlock fails to avoid crashing
If we didn't tell ReadOptionsBlock to allow failures then we can't assume that the stream is not in the middle of a block if it returns out-of-date. This was causing a crash when we tried to continue reading. Also, it's just generally a good idea to early-exit if we're doing implicit module builds, since we will want to immediately rebuild this module anyway and there's no reason to waste time continuing after failure. rdar://problem/24114938 llvm-svn: 260563
This commit is contained in:
parent
74d7d2f00b
commit
9b1e442e67
clang
|
@ -2269,9 +2269,10 @@ ASTReader::ReadControlBlock(ModuleFile &F,
|
|||
(AllowConfigurationMismatch && Result == ConfigurationMismatch))
|
||||
Result = Success;
|
||||
|
||||
// If we've diagnosed a problem, we're done.
|
||||
if (Result != Success &&
|
||||
isDiagnosedResult(Result, ClientLoadCapabilities))
|
||||
// If we can't load the module, exit early since we likely
|
||||
// will rebuild the module anyway. The stream may be in the
|
||||
// middle of a block.
|
||||
if (Result != Success)
|
||||
return Result;
|
||||
} else if (Stream.SkipBlock()) {
|
||||
Error("malformed block record in AST file");
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
// RUN: rm -rf %t
|
||||
// Use -DA=0 so that there is at least one preprocessor option serialized after the diagnostic options.
|
||||
// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs %s -DA=0 -Rmodule-build -verify
|
||||
// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -fimplicit-module-maps -I %S/Inputs %s -DA=0 -Werror -Rmodule-build -verify
|
||||
|
||||
@import category_top; // expected-remark {{building module}} expected-remark {{finished building}}
|
Loading…
Reference in New Issue