diff options
author | Craig Topper <craig.topper@gmail.com> | 2012-03-08 06:55:27 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2012-03-08 06:55:27 +0000 |
commit | 88d2fa438a5b9feb7da77e4beeaa00944ae4168e (patch) | |
tree | 78670ed745845060a34061c675e15f0ba9026d25 /utils/TableGen/AsmWriterEmitter.cpp | |
parent | 8c0152f8a557742efddc57c3993c2c0a3a79ca4d (diff) | |
download | external_llvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.zip external_llvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.tar.gz external_llvm-88d2fa438a5b9feb7da77e4beeaa00944ae4168e.tar.bz2 |
Re-commit r152202 hopefully fixing the MSVC linker error.
Original commit message:
Use uint16_t to store InstrNameIndices in MCInstrInfo. Add asserts to protect all 16-bit string table offsets. Also make sure the string to offset table string is not larger than 65536 characters since larger string literals aren't portable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152296 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/AsmWriterEmitter.cpp')
-rw-r--r-- | utils/TableGen/AsmWriterEmitter.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index 59926a3..7671efd 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -306,6 +306,7 @@ void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) { } // Bias offset by one since we want 0 as a sentinel. + assert((Idx+1) <= 0xffff && "String offset too large to fit in table"); OpcodeInfo.push_back(Idx+1); } @@ -373,7 +374,7 @@ void AsmWriterEmitter::EmitPrintInstruction(raw_ostream &O) { O << " };\n\n"; // Emit the string itself. - O << " const char *AsmStrs = \n"; + O << " const char *const AsmStrs = \n"; StringTable.EmitString(O); O << ";\n\n"; @@ -496,7 +497,9 @@ emitRegisterNameString(raw_ostream &O, StringRef AltName, } } - O << StringTable.GetOrAddStringOffset(AsmName); + unsigned Idx = StringTable.GetOrAddStringOffset(AsmName); + assert(Idx <= 0xffff && "String offset too large to fit in table"); + O << Idx; if (((i + 1) % 14) == 0) O << ",\n "; else @@ -591,7 +594,9 @@ void AsmWriterEmitter::EmitGetInstructionName(raw_ostream &O) { if ((i % 14) == 0) O << "\n "; - O << StringTable.GetOrAddStringOffset(AsmName) << ", "; + unsigned Idx = StringTable.GetOrAddStringOffset(AsmName); + assert(Idx <= 0xffff && "String offset too large to fit in table"); + O << Idx << ", "; } O << "0\n" << " };\n" |