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
This commit is contained in:
Chris Lattner 2009-03-13 21:33:17 +00:00
parent e023bb6936
commit 7f3b28a786
2 changed files with 16 additions and 7 deletions

View File

@ -130,11 +130,20 @@ AsmWriterInst::AsmWriterInst(const CodeGenInstruction &CGI, unsigned Variant) {
// Emit a constant string fragment. // Emit a constant string fragment.
if (DollarPos != LastEmitted) { if (DollarPos != LastEmitted) {
// TODO: this should eventually handle escaping. if (CurVariant == Variant || CurVariant == ~0U) {
if (CurVariant == Variant || CurVariant == ~0U) for (; LastEmitted != DollarPos; ++LastEmitted)
AddLiteralString(std::string(AsmString.begin()+LastEmitted, switch (AsmString[LastEmitted]) {
AsmString.begin()+DollarPos)); case '\n': AddLiteralString("\\n"); break;
LastEmitted = DollarPos; 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] == '\\') { } else if (AsmString[DollarPos] == '\\') {
if (DollarPos+1 != AsmString.size() && if (DollarPos+1 != AsmString.size() &&
(CurVariant == Variant || CurVariant == ~0U)) { (CurVariant == Variant || CurVariant == ~0U)) {

View File

@ -174,11 +174,11 @@ tgtok::TokKind TGLexer::LexString() {
CurStrVal += *CurPtr++; CurStrVal += *CurPtr++;
break; break;
case 't': case 't':
CurStrVal += "\\t"; CurStrVal += '\t';
++CurPtr; ++CurPtr;
break; break;
case 'n': case 'n':
CurStrVal += "\\n"; CurStrVal += '\n';
++CurPtr; ++CurPtr;
break; break;