diff options
author | Chris Lattner <sabre@nondot.org> | 2009-03-13 21:33:17 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-03-13 21:33:17 +0000 |
commit | 7f3b28a7867a35ec56a4ed80546e64995d69483e (patch) | |
tree | 28cd22d956138b29823cdff2800764043cf4ef3c /utils | |
parent | e023bb693605f0354bba176f7d87a21cc7aa3785 (diff) | |
download | external_llvm-7f3b28a7867a35ec56a4ed80546e64995d69483e.zip external_llvm-7f3b28a7867a35ec56a4ed80546e64995d69483e.tar.gz external_llvm-7f3b28a7867a35ec56a4ed80546e64995d69483e.tar.bz2 |
Fix escaping in asm string literals correctly by having tblgen unescape
them, then the asmprinter emitter reescape them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@66958 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/AsmWriterEmitter.cpp | 19 | ||||
-rw-r--r-- | utils/TableGen/TGLexer.cpp | 4 |
2 files changed, 16 insertions, 7 deletions
diff --git a/utils/TableGen/AsmWriterEmitter.cpp b/utils/TableGen/AsmWriterEmitter.cpp index e7fe8c3..93ef6c8 100644 --- a/utils/TableGen/AsmWriterEmitter.cpp +++ b/utils/TableGen/AsmWriterEmitter.cpp @@ -130,11 +130,20 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant) { // Emit a constant string fragment. if (DollarPos != LastEmitted) { - // TODO: this should eventually handle escaping. - if (CurVariant == Variant || CurVariant == ~0U) - AddLiteralString(std::string(AsmString.begin()+LastEmitted, - AsmString.begin()+DollarPos)); - LastEmitted = DollarPos; + if (CurVariant == Variant || CurVariant == ~0U) { + for (; LastEmitted != DollarPos; ++LastEmitted) + switch (AsmString[LastEmitted]) { + case '\n': AddLiteralString("\\n"); break; + case '\t': AddLiteralString("\\t"); break; + case '"': AddLiteralString("\\\""); break; + case '\\': AddLiteralString("\\\\"); break; + default: + AddLiteralString(std::string(1, AsmString[LastEmitted])); + break; + } + } else { + LastEmitted = DollarPos; + } } else if (AsmString[DollarPos] == '\\') { if (DollarPos+1 != AsmString.size() && (CurVariant == Variant || CurVariant == ~0U)) { diff --git a/utils/TableGen/TGLexer.cpp b/utils/TableGen/TGLexer.cpp index 03bf0ce..79982aa 100644 --- a/utils/TableGen/TGLexer.cpp +++ b/utils/TableGen/TGLexer.cpp @@ -174,11 +174,11 @@ tgtok::TokKind TGLexer::LexString() { CurStrVal += *CurPtr++; break; case 't': - CurStrVal += "\\t"; + CurStrVal += '\t'; ++CurPtr; break; case 'n': - CurStrVal += "\\n"; + CurStrVal += '\n'; ++CurPtr; break; |