summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDylan Noblesmith <nobled@dreamwidth.org>2011-12-19 08:51:05 +0000
committerDylan Noblesmith <nobled@dreamwidth.org>2011-12-19 08:51:05 +0000
commit2a8bc15230a128c8492cf0e0abbbb6b5e914c89c (patch)
treed871385e1c70481b402edfc10631bc77ec9331f0 /clang
parentac2bda8dd0a2bd5fcdf9a702ec546f6c315b0229 (diff)
downloadbcm5719-llvm-2a8bc15230a128c8492cf0e0abbbb6b5e914c89c.tar.gz
bcm5719-llvm-2a8bc15230a128c8492cf0e0abbbb6b5e914c89c.zip
SourceManager: use getBufferSize()
Forming an out of bounds pointer to check if it's out of bounds was undefined behavior. llvm-svn: 146861
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Basic/SourceManager.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index 5221ed49aa3..310b68eaeb5 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/lib/Basic/SourceManager.cpp
@@ -962,13 +962,13 @@ unsigned SourceManager::getColumnNumber(FileID FID, unsigned FilePos,
if (MyInvalid)
return 1;
- const char *Buf = MemBuf->getBufferStart();
- if (Buf + FilePos >= MemBuf->getBufferEnd()) {
+ if (FilePos >= MemBuf->getBufferSize()) {
if (Invalid)
*Invalid = MyInvalid;
return 1;
}
+ const char *Buf = MemBuf->getBufferStart();
unsigned LineStart = FilePos;
while (LineStart && Buf[LineStart-1] != '\n' && Buf[LineStart-1] != '\r')
--LineStart;
@@ -1524,9 +1524,10 @@ SourceLocation SourceManager::translateLineCol(FileID FID,
return FileLoc.getLocWithOffset(Size);
}
+ const llvm::MemoryBuffer *Buffer = Content->getBuffer(Diag, *this);
unsigned FilePos = Content->SourceLineCache[Line - 1];
- const char *Buf = Content->getBuffer(Diag, *this)->getBufferStart() + FilePos;
- unsigned BufLength = Content->getBuffer(Diag, *this)->getBufferEnd() - Buf;
+ const char *Buf = Buffer->getBufferStart() + FilePos;
+ unsigned BufLength = Buffer->getBufferSize() - FilePos;
if (BufLength == 0)
return FileLoc.getLocWithOffset(FilePos);
OpenPOWER on IntegriCloud