diff --git a/lib/Support/Allocator.cpp b/lib/Support/Allocator.cpp
index 4b6f9ff..ba6a393 100644
--- a/lib/Support/Allocator.cpp
+++ b/lib/Support/Allocator.cpp
@@ -45,7 +45,7 @@
   
   /// Allocate - Allocate and return at least the specified number of bytes.
   ///
-  void *Allocate(unsigned AllocSize, unsigned Alignment, MemRegion **RegPtr) {
+  void *Allocate(size_t AllocSize, size_t Alignment, MemRegion **RegPtr) {
     
     char* Result = (char*) (((uintptr_t) (NextPtr+Alignment-1)) 
                             & ~((uintptr_t) Alignment-1));
@@ -113,7 +113,7 @@
   TheMemory = MRP;
 }
 
-void *BumpPtrAllocator::Allocate(unsigned Size, unsigned Align) {
+void *BumpPtrAllocator::Allocate(size_t Size, size_t Align) {
   MemRegion *MRP = (MemRegion*)TheMemory;
   void *Ptr = MRP->Allocate(Size, Align, &MRP);
   TheMemory = MRP;
diff --git a/lib/Support/CommandLine.cpp b/lib/Support/CommandLine.cpp
index f459461..412dcb6 100644
--- a/lib/Support/CommandLine.cpp
+++ b/lib/Support/CommandLine.cpp
@@ -115,7 +115,7 @@
       OptionNames.push_back(O->ArgStr);
 
     // Handle named options.
-    for (unsigned i = 0, e = OptionNames.size(); i != e; ++i) {
+    for (size_t i = 0, e = OptionNames.size(); i != e; ++i) {
       // Add argument to the argument map!
       if (!OptionsMap.insert(std::pair<std::string,Option*>(OptionNames[i],
                                                             O)).second) {
@@ -223,7 +223,7 @@
 // see if there options that satisfy the predicate.  If we find one, return it,
 // otherwise return null.
 //
-static Option *getOptionPred(std::string Name, unsigned &Length,
+static Option *getOptionPred(std::string Name, size_t &Length,
                              bool (*Pred)(const Option*),
                              std::map<std::string, Option*> &OptionsMap) {
 
@@ -329,7 +329,7 @@
   // Parse the value of the environment variable into a "command line"
   // and hand it off to ParseCommandLineOptions().
   ParseCStringVector(newArgv, envValue);
-  int newArgc = newArgv.size();
+  int newArgc = static_cast<int>(newArgv.size());
   ParseCommandLineOptions(newArgc, &newArgv[0], Overview, ReadResponseFiles);
 
   // Free all the strdup()ed strings.
@@ -391,7 +391,7 @@
     newArgv.push_back(strdup(argv[0]));
     ExpandResponseFiles(argc, argv, newArgv);
     argv = &newArgv[0];
-    argc = newArgv.size();
+    argc = static_cast<int>(newArgv.size());
   }
 
   sys::Path progname(argv[0]);
@@ -420,7 +420,7 @@
 
     // Calculate how many positional values are _required_.
     bool UnboundedFound = false;
-    for (unsigned i = ConsumeAfterOpt != 0, e = PositionalOpts.size();
+    for (size_t i = ConsumeAfterOpt != 0, e = PositionalOpts.size();
          i != e; ++i) {
       Option *Opt = PositionalOpts[i];
       if (RequiresValue(Opt))
@@ -525,7 +525,7 @@
       if (Handler == 0) {
         std::string RealName(ArgName);
         if (RealName.size() > 1) {
-          unsigned Length = 0;
+          size_t Length = 0;
           Option *PGOpt = getOptionPred(RealName, Length, isPrefixedOrGrouping,
                                         Opts);
 
@@ -627,8 +627,8 @@
 
   } else if (ConsumeAfterOpt == 0) {
     // Positional args have already been handled if ConsumeAfter is specified...
-    unsigned ValNo = 0, NumVals = PositionalVals.size();
-    for (unsigned i = 0, e = PositionalOpts.size(); i != e; ++i) {
+    unsigned ValNo = 0, NumVals = static_cast<unsigned>(PositionalVals.size());
+    for (size_t i = 0, e = PositionalOpts.size(); i != e; ++i) {
       if (RequiresValue(PositionalOpts[i])) {
         ProvidePositionalOption(PositionalOpts[i], PositionalVals[ValNo].first,
                                 PositionalVals[ValNo].second);
@@ -662,7 +662,7 @@
   } else {
     assert(ConsumeAfterOpt && NumPositionalRequired <= PositionalVals.size());
     unsigned ValNo = 0;
-    for (unsigned j = 1, e = PositionalOpts.size(); j != e; ++j)
+    for (size_t j = 1, e = PositionalOpts.size(); j != e; ++j)
       if (RequiresValue(PositionalOpts[j])) {
         ErrorParsing |= ProvidePositionalOption(PositionalOpts[j],
                                                 PositionalVals[ValNo].first,
@@ -775,13 +775,13 @@
 //
 
 // Return the width of the option tag for printing...
-unsigned alias::getOptionWidth() const {
+size_t alias::getOptionWidth() const {
   return std::strlen(ArgStr)+6;
 }
 
 // Print out the option for the alias.
-void alias::printOptionInfo(unsigned GlobalWidth) const {
-  unsigned L = std::strlen(ArgStr);
+void alias::printOptionInfo(size_t GlobalWidth) const {
+  size_t L = std::strlen(ArgStr);
   cout << "  -" << ArgStr << std::string(GlobalWidth-L-6, ' ') << " - "
        << HelpStr << "\n";
 }
@@ -796,8 +796,8 @@
 //
 
 // Return the width of the option tag for printing...
-unsigned basic_parser_impl::getOptionWidth(const Option &O) const {
-  unsigned Len = std::strlen(O.ArgStr);
+size_t basic_parser_impl::getOptionWidth(const Option &O) const {
+  size_t Len = std::strlen(O.ArgStr);
   if (const char *ValName = getValueName())
     Len += std::strlen(getValueStr(O, ValName))+3;
 
@@ -808,7 +808,7 @@
 // to-be-maintained width is specified.
 //
 void basic_parser_impl::printOptionInfo(const Option &O,
-                                        unsigned GlobalWidth) const {
+                                        size_t GlobalWidth) const {
   cout << "  -" << O.ArgStr;
 
   if (const char *ValName = getValueName())
@@ -926,16 +926,16 @@
 
 
 // Return the width of the option tag for printing...
-unsigned generic_parser_base::getOptionWidth(const Option &O) const {
+size_t generic_parser_base::getOptionWidth(const Option &O) const {
   if (O.hasArgStr()) {
-    unsigned Size = std::strlen(O.ArgStr)+6;
+    size_t Size = std::strlen(O.ArgStr)+6;
     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
-      Size = std::max(Size, (unsigned)std::strlen(getOption(i))+8);
+      Size = std::max(Size, std::strlen(getOption(i))+8);
     return Size;
   } else {
-    unsigned BaseSize = 0;
+    size_t BaseSize = 0;
     for (unsigned i = 0, e = getNumOptions(); i != e; ++i)
-      BaseSize = std::max(BaseSize, (unsigned)std::strlen(getOption(i))+8);
+      BaseSize = std::max(BaseSize, std::strlen(getOption(i))+8);
     return BaseSize;
   }
 }
@@ -944,14 +944,14 @@
 // to-be-maintained width is specified.
 //
 void generic_parser_base::printOptionInfo(const Option &O,
-                                          unsigned GlobalWidth) const {
+                                          size_t GlobalWidth) const {
   if (O.hasArgStr()) {
-    unsigned L = std::strlen(O.ArgStr);
+    size_t L = std::strlen(O.ArgStr);
     cout << "  -" << O.ArgStr << std::string(GlobalWidth-L-6, ' ')
          << " - " << O.HelpStr << "\n";
 
     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
-      unsigned NumSpaces = GlobalWidth-strlen(getOption(i))-8;
+      size_t NumSpaces = GlobalWidth-strlen(getOption(i))-8;
       cout << "    =" << getOption(i) << std::string(NumSpaces, ' ')
            << " - " << getDescription(i) << "\n";
     }
@@ -959,7 +959,7 @@
     if (O.HelpStr[0])
       cout << "  " << O.HelpStr << "\n";
     for (unsigned i = 0, e = getNumOptions(); i != e; ++i) {
-      unsigned L = std::strlen(getOption(i));
+      size_t L = std::strlen(getOption(i));
       cout << "    -" << getOption(i) << std::string(GlobalWidth-L-8, ' ')
            << " - " << getDescription(i) << "\n";
     }
@@ -974,7 +974,7 @@
 namespace {
 
 class HelpPrinter {
-  unsigned MaxArgLen;
+  size_t MaxArgLen;
   const Option *EmptyArg;
   const bool ShowHidden;
 
@@ -1030,7 +1030,7 @@
         PositionalOpts[0]->getNumOccurrencesFlag() == ConsumeAfter)
       CAOpt = PositionalOpts[0];
 
-    for (unsigned i = CAOpt != 0, e = PositionalOpts.size(); i != e; ++i) {
+    for (size_t i = CAOpt != 0, e = PositionalOpts.size(); i != e; ++i) {
       if (PositionalOpts[i]->ArgStr[0])
         cout << " --" << PositionalOpts[i]->ArgStr;
       cout << " " << PositionalOpts[i]->HelpStr;
@@ -1043,11 +1043,11 @@
 
     // Compute the maximum argument length...
     MaxArgLen = 0;
-    for (unsigned i = 0, e = Opts.size(); i != e; ++i)
+    for (size_t i = 0, e = Opts.size(); i != e; ++i)
       MaxArgLen = std::max(MaxArgLen, Opts[i].second->getOptionWidth());
 
     cout << "OPTIONS:\n";
-    for (unsigned i = 0, e = Opts.size(); i != e; ++i)
+    for (size_t i = 0, e = Opts.size(); i != e; ++i)
       Opts[i].second->printOptionInfo(MaxArgLen);
 
     // Print any extra help the user has declared.
diff --git a/lib/Support/FileUtilities.cpp b/lib/Support/FileUtilities.cpp
index 3340e8b..21080b6 100644
--- a/lib/Support/FileUtilities.cpp
+++ b/lib/Support/FileUtilities.cpp
@@ -98,7 +98,8 @@
     if (*F1NumEnd == 'D' || *F1NumEnd == 'd') {
       // Copy string into tmp buffer to replace the 'D' with an 'e'.
       SmallString<200> StrTmp(F1P, EndOfNumber(F1NumEnd)+1);
-      StrTmp[F1NumEnd-F1P] = 'e';  // Strange exponential notation!
+      // Strange exponential notation!
+      StrTmp[static_cast<unsigned>(F1NumEnd-F1P)] = 'e';
       
       V1 = strtod(&StrTmp[0], const_cast<char**>(&F1NumEnd));
       F1NumEnd = F1P + (F1NumEnd-&StrTmp[0]);
@@ -107,7 +108,8 @@
     if (*F2NumEnd == 'D' || *F2NumEnd == 'd') {
       // Copy string into tmp buffer to replace the 'D' with an 'e'.
       SmallString<200> StrTmp(F2P, EndOfNumber(F2NumEnd)+1);
-      StrTmp[F2NumEnd-F2P] = 'e';  // Strange exponential notation!
+      // Strange exponential notation!
+      StrTmp[static_cast<unsigned>(F2NumEnd-F2P)] = 'e';
       
       V2 = strtod(&StrTmp[0], const_cast<char**>(&F2NumEnd));
       F2NumEnd = F2P + (F2NumEnd-&StrTmp[0]);
diff --git a/lib/Support/FoldingSet.cpp b/lib/Support/FoldingSet.cpp
index bf50ed4..6daa157 100644
--- a/lib/Support/FoldingSet.cpp
+++ b/lib/Support/FoldingSet.cpp
@@ -58,7 +58,7 @@
  AddInteger(DoubleToBits(D));
 }
 void FoldingSetNodeID::AddString(const std::string &String) {
-  unsigned Size = String.size();
+  unsigned Size = static_cast<unsigned>(String.size());
   Bits.push_back(Size);
   if (!Size) return;
 
@@ -98,7 +98,7 @@
 /// lookup the node in the FoldingSetImpl.
 unsigned FoldingSetNodeID::ComputeHash() const {
   // This is adapted from SuperFastHash by Paul Hsieh.
-  unsigned Hash = Bits.size();
+  unsigned Hash = static_cast<unsigned>(Bits.size());
   for (const unsigned *BP = &Bits[0], *E = BP+Bits.size(); BP != E; ++BP) {
     unsigned Data = *BP;
     Hash         += Data & 0xFFFF;
diff --git a/lib/Support/MemoryBuffer.cpp b/lib/Support/MemoryBuffer.cpp
index 9c2eb42..83f1494 100644
--- a/lib/Support/MemoryBuffer.cpp
+++ b/lib/Support/MemoryBuffer.cpp
@@ -106,7 +106,7 @@
 /// that is completely initialized to zeros.  Note that the caller should
 /// initialize the memory allocated by this method.  The memory is owned by
 /// the MemoryBuffer object.
-MemoryBuffer *MemoryBuffer::getNewUninitMemBuffer(unsigned Size,
+MemoryBuffer *MemoryBuffer::getNewUninitMemBuffer(size_t Size,
                                                   const char *BufferName) {
   char *Buf = new char[Size+1];
   Buf[Size] = 0;
@@ -120,7 +120,7 @@
 /// is completely initialized to zeros.  Note that the caller should
 /// initialize the memory allocated by this method.  The memory is owned by
 /// the MemoryBuffer object.
-MemoryBuffer *MemoryBuffer::getNewMemBuffer(unsigned Size,
+MemoryBuffer *MemoryBuffer::getNewMemBuffer(size_t Size,
                                             const char *BufferName) {
   MemoryBuffer *SB = getNewUninitMemBuffer(Size, BufferName);
   memset(const_cast<char*>(SB->getBufferStart()), 0, Size+1);
@@ -214,7 +214,7 @@
   SB.reset(MemoryBuffer::getNewUninitMemBuffer(FileSize, Filename));
   char *BufPtr = const_cast<char*>(SB->getBufferStart());
   
-  unsigned BytesLeft = FileSize;
+  size_t BytesLeft = FileSize;
   while (BytesLeft) {
     ssize_t NumRead = ::read(FD, BufPtr, BytesLeft);
     if (NumRead != -1) {
diff --git a/lib/Support/Statistic.cpp b/lib/Support/Statistic.cpp
index e500b55..4516ebc 100644
--- a/lib/Support/Statistic.cpp
+++ b/lib/Support/Statistic.cpp
@@ -90,7 +90,7 @@
 
   // Figure out how long the biggest Value and Name fields are.
   unsigned MaxNameLen = 0, MaxValLen = 0;
-  for (unsigned i = 0, e = Stats.size(); i != e; ++i) {
+  for (size_t i = 0, e = Stats.size(); i != e; ++i) {
     MaxValLen = std::max(MaxValLen,
                          (unsigned)utostr(Stats[i]->getValue()).size());
     MaxNameLen = std::max(MaxNameLen,
@@ -106,7 +106,7 @@
             << "===" << std::string(73, '-') << "===\n\n";
   
   // Print all of the statistics.
-  for (unsigned i = 0, e = Stats.size(); i != e; ++i) {
+  for (size_t i = 0, e = Stats.size(); i != e; ++i) {
     std::string CountStr = utostr(Stats[i]->getValue());
     OutStream << std::string(MaxValLen-CountStr.size(), ' ')
               << CountStr << " " << Stats[i]->getName()
diff --git a/lib/Support/StringExtras.cpp b/lib/Support/StringExtras.cpp
index 1fae4fa..d403a08 100644
--- a/lib/Support/StringExtras.cpp
+++ b/lib/Support/StringExtras.cpp
@@ -22,7 +22,7 @@
 /// The Source source string is updated in place to remove the returned string
 /// and any delimiter prefix from it.
 std::string llvm::getToken(std::string &Source, const char *Delimiters) {
-  unsigned NumDelimiters = std::strlen(Delimiters);
+  size_t NumDelimiters = std::strlen(Delimiters);
 
   // Figure out where the token starts.
   std::string::size_type Start =
diff --git a/lib/System/Path.cpp b/lib/System/Path.cpp
index e8fd5f2..086c9f0 100644
--- a/lib/System/Path.cpp
+++ b/lib/System/Path.cpp
@@ -124,7 +124,8 @@
   if (canRead()) {
     std::string Magic;
     if (getMagicNumber(Magic, 64))
-      switch (IdentifyFileType(Magic.c_str(), Magic.length())) {
+      switch (IdentifyFileType(Magic.c_str(),
+                               static_cast<unsigned>(Magic.length()))) {
         default: return false;
         case Mach_O_FixedVirtualMemorySharedLib_FileType:
         case Mach_O_DynamicallyLinkedSharedLib_FileType:
@@ -167,7 +168,7 @@
 
 bool Path::hasMagicNumber(const std::string &Magic) const {
   std::string actualMagic;
-  if (getMagicNumber(actualMagic, Magic.size()))
+  if (getMagicNumber(actualMagic, static_cast<unsigned>(Magic.size())))
     return Magic == actualMagic;
   return false;
 }
@@ -204,7 +205,7 @@
   // If the path is all slashes, return a single slash.
   // Otherwise, remove all trailing slashes.
   
-  signed pos = path.size() - 1;
+  signed pos = static_cast<signed>(path.size()) - 1;
   
   while (pos >= 0 && path[pos] == Sep)
     --pos;
diff --git a/lib/System/Unix/Memory.inc b/lib/System/Unix/Memory.inc
index afa8f03..0b74f74 100644
--- a/lib/System/Unix/Memory.inc
+++ b/lib/System/Unix/Memory.inc
@@ -28,7 +28,7 @@
                                std::string *ErrMsg) {
   if (NumBytes == 0) return MemoryBlock();
 
-  long pageSize = Process::GetPageSize();
+  unsigned pageSize = Process::GetPageSize();
   unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
 
   int fd = -1;
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index aca4b93..9f4b591 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -566,7 +566,7 @@
   path.copy(pathname,MAXPATHLEN);
 
   // Null-terminate the last component
-  int lastchar = path.length() - 1 ;
+  size_t lastchar = path.length() - 1 ;
   
   if (pathname[lastchar] != '/')
     ++lastchar;
@@ -639,7 +639,7 @@
   // Otherwise, try to just remove the one directory.
   char pathname[MAXPATHLEN];
   path.copy(pathname, MAXPATHLEN);
-  int lastchar = path.length() - 1 ; 
+  size_t lastchar = path.length() - 1;
   if (pathname[lastchar] == '/') 
     pathname[lastchar] = 0;
   else
diff --git a/lib/System/Unix/Program.inc b/lib/System/Unix/Program.inc
index 91baefb..d0dade1 100644
--- a/lib/System/Unix/Program.inc
+++ b/lib/System/Unix/Program.inc
@@ -58,7 +58,7 @@
     return Path();
 
   // Now we have a colon separated list of directories to search; try them.
-  unsigned PathLen = strlen(PathStr);
+  size_t PathLen = strlen(PathStr);
   while (PathLen) {
     // Find the first colon...
     const char *Colon = std::find(PathStr, PathStr+PathLen, ':');
diff --git a/lib/System/Unix/Signals.inc b/lib/System/Unix/Signals.inc
index 3314a43..79236cd 100644
--- a/lib/System/Unix/Signals.inc
+++ b/lib/System/Unix/Signals.inc
@@ -65,7 +65,8 @@
 static void PrintStackTrace() {
 #ifdef HAVE_BACKTRACE
   // Use backtrace() to output a backtrace on Linux systems with glibc.
-  int depth = backtrace(StackTrace, array_lengthof(StackTrace));
+  int depth = backtrace(StackTrace,
+                        static_cast<int>(array_lengthof(StackTrace)));
   backtrace_symbols_fd(StackTrace, depth, STDERR_FILENO);
 #endif
 }
