Add support for reusing macroid's with negative physical loc deltas. This
keeps the MacroInfo table more compact.

llvm-svn: 40281
diff --git a/clang/Basic/SourceManager.cpp b/clang/Basic/SourceManager.cpp
index d05da5d..be8eeee 100644
--- a/clang/Basic/SourceManager.cpp
+++ b/clang/Basic/SourceManager.cpp
@@ -180,20 +180,19 @@
   // reuse it.  This implements a single-entry cache.
   if (!MacroIDs.empty()) {
     MacroIDInfo &LastOne = MacroIDs.back();
+    
     if (LastOne.getInstantiationLoc() == InstantLoc &&
         LastOne.getPhysicalLoc().getFileID() == PhysLoc.getFileID()) {
       
       int PhysDelta = PhysLoc.getRawFilePos() -
                       LastOne.getPhysicalLoc().getRawFilePos();
-      if (unsigned(PhysDelta) < (1 << SourceLocation::MacroPhysOffsBits))
-        return SourceLocation::getMacroLoc(MacroIDs.size()-1,
-                                           (unsigned)PhysDelta, 0);
+      if (SourceLocation::isValidMacroPhysOffs(PhysDelta))
+        return SourceLocation::getMacroLoc(MacroIDs.size()-1, PhysDelta, 0);
     }
   }
   
  
   MacroIDs.push_back(MacroIDInfo::get(InstantLoc, PhysLoc));
-  
   return SourceLocation::getMacroLoc(MacroIDs.size()-1, 0, 0);
 }