diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-26 18:59:54 +0000 | 
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-05-26 18:59:54 +0000 | 
| commit | a97b238024292b245963410a9a25bda4cd6b25fd (patch) | |
| tree | 37449ddaa44d3ea331662a385785d98a725efd50 /llvm/lib/Bitcode/Reader/BitcodeReader.cpp | |
| parent | aa560006eda6a077944c89d01db332c092513b76 (diff) | |
| download | llvm-a97b238024292b245963410a9a25bda4cd6b25fd.zip llvm-a97b238024292b245963410a9a25bda4cd6b25fd.tar.gz llvm-a97b238024292b245963410a9a25bda4cd6b25fd.tar.bz2 | |
Fix LTO builds with xcode 4.
llvm-svn: 132132
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.cpp')
| -rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 12 | 
1 files changed, 11 insertions, 1 deletions
| diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 19f57cf..c4ef57c 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1588,8 +1588,18 @@ bool BitcodeReader::ParseBitcodeInto(Module *M) {    while (!Stream.AtEndOfStream()) {      unsigned Code = Stream.ReadCode(); -    if (Code != bitc::ENTER_SUBBLOCK) +    if (Code != bitc::ENTER_SUBBLOCK) { + +      // The ranlib in xcode 4 will align archive members by appending newlines to the +      // end of them. If this file size is a multiple of 4 but not 8, we have to read and +      // ignore these final 4 bytes :-( +      if (Stream.GetAbbrevIDWidth() == 2 && Code == 2 && +          Stream.Read(6) == 2 && Stream.Read(24) == 0xa0a0a && +	  Stream.AtEndOfStream()) +        return false; +        return Error("Invalid record at top-level"); +    }      unsigned BlockID = Stream.ReadSubBlockID(); | 
