[clang] bce360b - Detect source location overflow due includes

Diogo Sampaio via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 24 15:56:54 PST 2020


Author: Diogo Sampaio
Date: 2020-01-24T23:56:47Z
New Revision: bce360b7048cc6306c9d04faf27b71eec8762041

URL: https://github.com/llvm/llvm-project/commit/bce360b7048cc6306c9d04faf27b71eec8762041
DIFF: https://github.com/llvm/llvm-project/commit/bce360b7048cc6306c9d04faf27b71eec8762041.diff

LOG: Detect source location overflow due includes

Summary:
As discussed in http://lists.llvm.org/pipermail/cfe-dev/2019-October/063459.html
the overflow of the souce locations (limited to 2^31 chars) can generate all sorts of
weird things (bogus warnings, hangs, crashes, miscompilation and correct compilation).
In debug mode this assert would fail. So it might be a good start, as in PR42301,
to detect the failure and exit with a proper error message.

Reviewers: rsmith, thakis, miyuki

Reviewed By: miyuki

Subscribers: cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D70183

Added: 
    clang/test/Lexer/Inputs/inc1.h
    clang/test/Lexer/Inputs/inc2.h
    clang/test/Lexer/SourceLocationsOverflow.c

Modified: 
    clang/include/clang/Basic/DiagnosticCommonKinds.td
    clang/include/clang/Lex/Preprocessor.h
    clang/lib/Basic/SourceManager.cpp
    clang/lib/Lex/PPDirectives.cpp
    clang/lib/Lex/Preprocessor.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticCommonKinds.td b/clang/include/clang/Basic/DiagnosticCommonKinds.td
index d6281f157eea..20b49605eb6f 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 9716196b95c2..91f294b1d9b3 100644
--- a/clang/include/clang/Lex/Preprocessor.h
+++ b/clang/include/clang/Lex/Preprocessor.h
@@ -2203,12 +2203,14 @@ class Preprocessor {
       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 73f2ae96d4a3..187c33ab9020 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 e433b2cf1b95..660c4a5e089d 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 0e9be3923630..a18dc4af4226 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 000000000000..f7fd716d54c9
--- /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 000000000000..a827dc7fc0d0
--- /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 000000000000..d2313ea4324d
--- /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"


        


More information about the cfe-commits mailing list