X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FTGLexer.cpp;h=0d83e7cdf1bbbb5935717fa039c48effafd4adf5;hb=4dd82f6aaa483ef11bd74795c81cfc30b52821af;hp=9fa696e8cbe2cc77d212dd0d50ebbb29ce6cadd1;hpb=3060910e290949a9ac5eda8726d030790c4d60ff;p=oota-llvm.git diff --git a/utils/TableGen/TGLexer.cpp b/utils/TableGen/TGLexer.cpp index 9fa696e8cbe..0d83e7cdf1b 100644 --- a/utils/TableGen/TGLexer.cpp +++ b/utils/TableGen/TGLexer.cpp @@ -17,6 +17,10 @@ #include #include "llvm/Config/config.h" #include +#include +#include +#include +#include using namespace llvm; TGLexer::TGLexer(MemoryBuffer *StartBuf) : CurLineNo(1), CurBuf(StartBuf) { @@ -254,12 +258,12 @@ bool TGLexer::LexInclude() { std::string Filename = CurStrVal; // Try to find the file. - MemoryBuffer *NewBuf = MemoryBuffer::getFile(&Filename[0], Filename.size()); + MemoryBuffer *NewBuf = MemoryBuffer::getFile(Filename.c_str()); // If the file didn't exist directly, see if it's in an include path. for (unsigned i = 0, e = IncludeDirectories.size(); i != e && !NewBuf; ++i) { std::string IncFile = IncludeDirectories[i] + "/" + Filename; - NewBuf = MemoryBuffer::getFile(&IncFile[0], IncFile.size()); + NewBuf = MemoryBuffer::getFile(IncFile.c_str()); } if (NewBuf == 0) { @@ -340,7 +344,18 @@ tgtok::TokKind TGLexer::LexNumber() { if (CurPtr == NumStart) return ReturnError(CurPtr-2, "Invalid hexadecimal number"); + errno = 0; CurIntVal = strtoll(NumStart, 0, 16); + if (errno == EINVAL) + return ReturnError(CurPtr-2, "Invalid hexadecimal number"); + if (errno == ERANGE) { + errno = 0; + CurIntVal = (int64_t)strtoull(NumStart, 0, 16); + if (errno == EINVAL) + return ReturnError(CurPtr-2, "Invalid hexadecimal number"); + if (errno == ERANGE) + return ReturnError(CurPtr-2, "Hexadecimal number out of range"); + } return tgtok::IntVal; } else if (CurPtr[0] == 'b') { ++CurPtr;