Page MenuHomePhabricator

No OneTemporary

File Metadata

Created
Fri, Jan 24, 3:59 PM
diff --git a/clang/include/clang/Basic/DiagnosticCommonKinds.td b/clang/include/clang/Basic/DiagnosticCommonKinds.td
index d6281f1..20b4960 100644
--- a/clang/include/clang/Basic/DiagnosticCommonKinds.td
+++ b/clang/include/clang/Basic/DiagnosticCommonKinds.td
@@ -282,6 +282,9 @@ def err_file_modified : Error<
"file '%0' modified since it was first processed">, DefaultFatal;
def err_file_too_large : Error<
"sorry, unsupported: file '%0' is too large for Clang to process">;
+def err_include_too_large : Error<
+ "sorry, this include generates a translation unit too large for"
+ " Clang to process.">, DefaultFatal;
def err_unsupported_bom : Error<"%0 byte order mark detected in '%1', but "
"encoding is not supported">, DefaultFatal;
def err_unable_to_rename_temp : Error<
diff --git a/clang/include/clang/Lex/Preprocessor.h b/clang/include/clang/Lex/Preprocessor.h
index 9716196..91f294b 100644
--- a/clang/include/clang/Lex/Preprocessor.h
+++ b/clang/include/clang/Lex/Preprocessor.h
@@ -2203,12 +2203,14 @@ private:
ModuleBegin,
ModuleImport,
SkippedModuleImport,
+ Failure,
} Kind;
Module *ModuleForHeader = nullptr;
ImportAction(ActionKind AK, Module *Mod = nullptr)
: Kind(AK), ModuleForHeader(Mod) {
- assert((AK == None || Mod) && "no module for module action");
+ assert((AK == None || Mod || AK == Failure) &&
+ "no module for module action");
}
};
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index 73f2ae9..187c33a 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -577,13 +577,15 @@ FileID SourceManager::createFileID(const ContentCache *File, StringRef Filename,
SLocEntryLoaded[Index] = true;
return FileID::get(LoadedID);
}
+ unsigned FileSize = File->getSize();
+ if (!(NextLocalOffset + FileSize + 1 > NextLocalOffset &&
+ NextLocalOffset + FileSize + 1 <= CurrentLoadedOffset)) {
+ Diag.Report(IncludePos, diag::err_include_too_large);
+ return FileID();
+ }
LocalSLocEntryTable.push_back(
SLocEntry::get(NextLocalOffset,
FileInfo::get(IncludePos, File, FileCharacter, Filename)));
- unsigned FileSize = File->getSize();
- assert(NextLocalOffset + FileSize + 1 > NextLocalOffset &&
- NextLocalOffset + FileSize + 1 <= CurrentLoadedOffset &&
- "Ran out of source locations!");
// We do a +1 here because we want a SourceLocation that means "the end of the
// file", e.g. for the "no newline at the end of the file" diagnostic.
NextLocalOffset += FileSize + 1;
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index e433b2c..660c4a5 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -1708,6 +1708,13 @@ void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc,
EnterAnnotationToken(SourceRange(HashLoc, EndLoc),
tok::annot_module_include, Action.ModuleForHeader);
break;
+ case ImportAction::Failure:
+ assert(TheModuleLoader.HadFatalFailure &&
+ "This should be an early exit only to a fatal error");
+ TheModuleLoader.HadFatalFailure = true;
+ IncludeTok.setKind(tok::eof);
+ CurLexer->cutOffLexing();
+ return;
}
}
@@ -2165,7 +2172,10 @@ Preprocessor::ImportAction Preprocessor::HandleHeaderIncludeOrImport(
if (IncludePos.isMacroID())
IncludePos = SourceMgr.getExpansionRange(IncludePos).getEnd();
FileID FID = SourceMgr.createFileID(*File, IncludePos, FileCharacter);
- assert(FID.isValid() && "Expected valid file ID");
+ if (!FID.isValid()) {
+ TheModuleLoader.HadFatalFailure = true;
+ return ImportAction::Failure;
+ }
// If all is good, enter the new file!
if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation()))
diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp
index 0e9be39..a18dc4a 100644
--- a/clang/lib/Lex/Preprocessor.cpp
+++ b/clang/lib/Lex/Preprocessor.cpp
@@ -906,6 +906,9 @@ void Preprocessor::Lex(Token &Result) {
}
} while (!ReturnedToken);
+ if (Result.is(tok::unknown) && TheModuleLoader.HadFatalFailure)
+ return;
+
if (Result.is(tok::code_completion) && Result.getIdentifierInfo()) {
// Remember the identifier before code completion token.
setCodeCompletionIdentifierInfo(Result.getIdentifierInfo());
@@ -1200,6 +1203,13 @@ bool Preprocessor::LexAfterModuleImport(Token &Result) {
Suffix[0].setAnnotationValue(Action.ModuleForHeader);
// FIXME: Call the moduleImport callback?
break;
+ case ImportAction::Failure:
+ assert(TheModuleLoader.HadFatalFailure &&
+ "This should be an early exit only to a fatal error");
+ Result.setKind(tok::eof);
+ CurLexer->cutOffLexing();
+ EnterTokens(Suffix);
+ return true;
}
EnterTokens(Suffix);
diff --git a/clang/test/Lexer/Inputs/inc1.h b/clang/test/Lexer/Inputs/inc1.h
new file mode 100644
index 0000000..f7fd716
--- /dev/null
+++ b/clang/test/Lexer/Inputs/inc1.h
@@ -0,0 +1,1470 @@
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
+#include "inc2.h"
diff --git a/clang/test/Lexer/Inputs/inc2.h b/clang/test/Lexer/Inputs/inc2.h
new file mode 100644
index 0000000..a827dc7
--- /dev/null
+++ b/clang/test/Lexer/Inputs/inc2.h
@@ -0,0 +1,1000 @@
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
+/*...............................................................................................*/
diff --git a/clang/test/Lexer/SourceLocationsOverflow.c b/clang/test/Lexer/SourceLocationsOverflow.c
new file mode 100644
index 0000000..d2313ea
--- /dev/null
+++ b/clang/test/Lexer/SourceLocationsOverflow.c
@@ -0,0 +1,25 @@
+// RUN: not %clang %s -S -o - 2>&1 | FileCheck %s
+// CHECK: In file included from {{.*}}SourceLocationsOverflow.c
+// CHECK-NEXT: inc1.h{{.*}}: fatal error: sorry, this include generates a translation unit too large for Clang to process.
+// CHECK-NEXT: #include "inc2.h"
+// CHECK-NEXT: ^
+// CHECK-NEXT: 1 error generated.
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"
+#include "Inputs/inc1.h"

Event Timeline