diff --git a/Basic/SourceManager.cpp b/Basic/SourceManager.cpp
index d05da5d..be8eeee 100644
--- a/Basic/SourceManager.cpp
+++ b/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);
 }
 
diff --git a/include/clang/Basic/SourceLocation.h b/include/clang/Basic/SourceLocation.h
index f0dd026..6ba17b0 100644
--- a/include/clang/Basic/SourceLocation.h
+++ b/include/clang/Basic/SourceLocation.h
@@ -28,9 +28,9 @@
     FileIDBits  = 14,
     FilePosBits = 32-1-FileIDBits,
     
-    MacroIDBits       = 19,
+    MacroIDBits       = 20,
     MacroPhysOffsBits = 9,
-    MacroLogOffBits   = 3
+    MacroLogOffBits   = 2
   };
 
   SourceLocation() : ID(0) {}  // 0 is an invalid FileID.
@@ -56,16 +56,24 @@
     return L;
   }
   
-  static SourceLocation getMacroLoc(unsigned MacroID, unsigned PhysOffs,
+  static bool isValidMacroPhysOffs(int Val) {
+    if (Val >= 0)
+      return Val < (1 << (MacroPhysOffsBits-1));
+    return -Val < (1 << (MacroPhysOffsBits-1));
+  }
+  
+  static SourceLocation getMacroLoc(unsigned MacroID, int PhysOffs,
                                     unsigned LogOffs) {
-    SourceLocation L;
-    
     assert(MacroID < (1 << MacroIDBits) && "Too many macros!");
-    assert(PhysOffs < (1 << MacroPhysOffsBits) && "Physoffs too large!");
+    assert(isValidMacroPhysOffs(PhysOffs) && "Physoffs too large!");
     assert(LogOffs  < (1 << MacroLogOffBits) && "Logical offs too large!");
     
+    PhysOffs &= (1 << MacroPhysOffsBits)-1;
+    
+    SourceLocation L;
     L.ID = (1 << 31) | (MacroID << (MacroPhysOffsBits+MacroLogOffBits)) |
-           (PhysOffs << MacroLogOffBits) | LogOffs;
+           (PhysOffs << MacroLogOffBits) |
+           LogOffs;
     return L;
   }
   
@@ -99,9 +107,12 @@
     return (ID >> (MacroPhysOffsBits+MacroLogOffBits)) & ((1 << MacroIDBits)-1);
   }
   
-  unsigned getMacroPhysOffs() const {
+  int getMacroPhysOffs() const {
     assert(isMacroID() && "Is not a macro id!");
-    return (ID >> MacroLogOffBits) & ((1 << MacroPhysOffsBits)-1);
+    int Val = (ID >> MacroLogOffBits) & ((1 << MacroPhysOffsBits)-1);
+    // Sign extend it properly.
+    unsigned ShAmt = sizeof(int)*8 - MacroPhysOffsBits;
+    return (Val << ShAmt) >> ShAmt;
   }
   
   unsigned getMacroLogOffs() const {
@@ -111,7 +122,7 @@
   
   /// getFileLocWithOffset - Return a source location with the specified offset
   /// from this file SourceLocation.
-  SourceLocation getFileLocWithOffset(unsigned Offset) const {
+  SourceLocation getFileLocWithOffset(int Offset) const {
     return getFileLoc(getFileID(), getRawFilePos()+Offset);
   }
   
