[cfe-commits] r45113 - /cfe/trunk/Lex/HeaderMap.cpp

Chris Lattner sabre at nondot.org
Mon Dec 17 10:59:44 PST 2007


Author: lattner
Date: Mon Dec 17 12:59:44 2007
New Revision: 45113

URL: http://llvm.org/viewvc/llvm-project?rev=45113&view=rev
Log:
simplify some code, using new scoped_ptr support.  Fix a bug in the 
cross-endianness case, where we checked the version in the wrong endianness.
Amusingly, the GCC logic that detects mixed endianness hmaps and rejects 
them is dead for this very reason.

Modified:
    cfe/trunk/Lex/HeaderMap.cpp

Modified: cfe/trunk/Lex/HeaderMap.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Lex/HeaderMap.cpp?rev=45113&r1=45112&r2=45113&view=diff

==============================================================================
--- cfe/trunk/Lex/HeaderMap.cpp (original)
+++ cfe/trunk/Lex/HeaderMap.cpp Mon Dec 17 12:59:44 2007
@@ -20,7 +20,8 @@
 using namespace clang;
 
 enum {
-  HeaderMagicNumber = ('h' << 24) | ('m' << 16) | ('a' << 8) | 'p'
+  HeaderMagicNumber = ('h' << 24) | ('m' << 16) | ('a' << 8) | 'p',
+  HeaderVersion = 1
 };
 
 struct HMapHeader {
@@ -53,23 +54,21 @@
   // We know the file is at least as big as the header, check it now.
   const HMapHeader *Header = reinterpret_cast<const HMapHeader*>(FileStart);
   
-  // Sniff it to see if it's a headermap.
-  if (Header->Version != 1 || Header->Reserved != 0)
-    return 0;
-  
-  // Check the magic number.
+  // Sniff it to see if it's a headermap by checking the magic number and
+  // version.
   bool NeedsByteSwap;
-  if (Header->Magic == HeaderMagicNumber)
+  if (Header->Magic == HeaderMagicNumber && Header->Version == HeaderVersion)
     NeedsByteSwap = false;
-  else if (Header->Magic == llvm::ByteSwap_32(HeaderMagicNumber))
+  else if (Header->Magic == llvm::ByteSwap_32(HeaderMagicNumber) &&
+           Header->Version == llvm::ByteSwap_16(HeaderVersion))
     NeedsByteSwap = true;  // Mixed endianness headermap.
   else 
     return 0;  // Not a header map.
+  
+  if (Header->Reserved != 0) return 0;
 
   // Okay, everything looks good, create the header map.
-  HeaderMap *NewHM = new HeaderMap(FileBuffer.get(), NeedsByteSwap);
-  FileBuffer.reset();  // Don't deallocate the buffer on return.
-  return NewHM; 
+  return new HeaderMap(FileBuffer.take(), NeedsByteSwap);
 }
 
 HeaderMap::~HeaderMap() {





More information about the cfe-commits mailing list