X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=utils%2FTableGen%2FTGLexer.cpp;h=0d83e7cdf1bbbb5935717fa039c48effafd4adf5;hb=ed2eee63a6858312ed17582d8cb85a6856d8eb34;hp=e7465de28a4d41059b84168ba94b2f60c794460c;hpb=4520dd2b7b20af07d5a3e4d06d964a532044eb10;p=oota-llvm.git diff --git a/utils/TableGen/TGLexer.cpp b/utils/TableGen/TGLexer.cpp index e7465de28a4..0d83e7cdf1b 100644 --- a/utils/TableGen/TGLexer.cpp +++ b/utils/TableGen/TGLexer.cpp @@ -20,6 +20,7 @@ #include #include #include +#include using namespace llvm; TGLexer::TGLexer(MemoryBuffer *StartBuf) : CurLineNo(1), CurBuf(StartBuf) { @@ -343,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;