aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Archive/ArchiveReader.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2010-04-19 16:15:31 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2010-04-19 16:15:31 +0000
commit3576b74bb9a15d55f9de80206af9d24d78cfef3a (patch)
tree0bcd77f3ea66adfc49ad159e88de87bea6048c93 /llvm/lib/Archive/ArchiveReader.cpp
parentf656397cc029d6d58957dcb86e48eef4e77043b7 (diff)
downloadllvm-3576b74bb9a15d55f9de80206af9d24d78cfef3a.zip
llvm-3576b74bb9a15d55f9de80206af9d24d78cfef3a.tar.gz
llvm-3576b74bb9a15d55f9de80206af9d24d78cfef3a.tar.bz2
Don't write into MemoryBuffers.
llvm-svn: 101783
Diffstat (limited to 'llvm/lib/Archive/ArchiveReader.cpp')
-rw-r--r--llvm/lib/Archive/ArchiveReader.cpp21
1 files changed, 9 insertions, 12 deletions
diff --git a/llvm/lib/Archive/ArchiveReader.cpp b/llvm/lib/Archive/ArchiveReader.cpp
index cbd0bb39..05d32de 100644
--- a/llvm/lib/Archive/ArchiveReader.cpp
+++ b/llvm/lib/Archive/ArchiveReader.cpp
@@ -348,9 +348,8 @@ Archive::getAllModules(std::vector<Module*>& Modules,
std::string FullMemberName = archPath.str() +
"(" + I->getPath().str() + ")";
MemoryBuffer *Buffer =
- MemoryBuffer::getNewMemBuffer(I->getSize(), FullMemberName.c_str());
- memcpy(const_cast<char *>(Buffer->getBufferStart()),
- I->getData(), I->getSize());
+ MemoryBuffer::getMemBufferCopy(StringRef(I->getData(), I->getSize()),
+ FullMemberName.c_str());
Module *M = ParseBitcodeFile(Buffer, Context, ErrMessage);
delete Buffer;
@@ -488,10 +487,9 @@ Archive::findModuleDefiningSymbol(const std::string& symbol,
// Now, load the bitcode module to get the Module.
std::string FullMemberName = archPath.str() + "(" +
mbr->getPath().str() + ")";
- MemoryBuffer *Buffer =MemoryBuffer::getNewMemBuffer(mbr->getSize(),
- FullMemberName.c_str());
- memcpy(const_cast<char *>(Buffer->getBufferStart()),
- mbr->getData(), mbr->getSize());
+ MemoryBuffer *Buffer =
+ MemoryBuffer::getMemBufferCopy(StringRef(mbr->getData(), mbr->getSize()),
+ FullMemberName.c_str());
Module *m = getLazyBitcodeModule(Buffer, Context, ErrMsg);
if (!m)
@@ -540,8 +538,8 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
std::string FullMemberName = archPath.str() + "(" +
mbr->getPath().str() + ")";
Module* M =
- GetBitcodeSymbols((const unsigned char*)At, mbr->getSize(),
- FullMemberName, Context, symbols, error);
+ GetBitcodeSymbols(At, mbr->getSize(), FullMemberName, Context,
+ symbols, error);
if (M) {
// Insert the module's symbols into the symbol table
@@ -618,9 +616,8 @@ bool Archive::isBitcodeArchive() {
archPath.str() + "(" + I->getPath().str() + ")";
MemoryBuffer *Buffer =
- MemoryBuffer::getNewMemBuffer(I->getSize(), FullMemberName.c_str());
- memcpy(const_cast<char *>(Buffer->getBufferStart()),
- I->getData(), I->getSize());
+ MemoryBuffer::getMemBufferCopy(StringRef(I->getData(), I->getSize()),
+ FullMemberName.c_str());
Module *M = ParseBitcodeFile(Buffer, Context);
delete Buffer;
if (!M)