summaryrefslogtreecommitdiffstats
path: root/llvm/utils/TableGen/AsmWriterEmitter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-13 21:33:17 +0000
committerChris Lattner <sabre@nondot.org>2009-03-13 21:33:17 +0000
commit8bd06d8e1b31de3ef95c27a705b1025fc33657a7 (patch)
tree809a6663fb31abc5440a56cf65d9be6669b73db7 /llvm/utils/TableGen/AsmWriterEmitter.cpp
parenta614ef2000fd2885467f2df40c58cb557970675d (diff)
downloadbcm5719-llvm-8bd06d8e1b31de3ef95c27a705b1025fc33657a7.tar.gz
bcm5719-llvm-8bd06d8e1b31de3ef95c27a705b1025fc33657a7.zip
Fix escaping in asm string literals correctly by having tblgen unescape
them, then the asmprinter emitter reescape them. llvm-svn: 66958
Diffstat (limited to 'llvm/utils/TableGen/AsmWriterEmitter.cpp')
-rw-r--r--llvm/utils/TableGen/AsmWriterEmitter.cpp19
1 files changed, 14 insertions, 5 deletions
diff --git a/llvm/utils/TableGen/AsmWriterEmitter.cpp b/llvm/utils/TableGen/AsmWriterEmitter.cpp
index e7fe8c369bd..93ef6c86a6b 100644
--- a/llvm/utils/TableGen/AsmWriterEmitter.cpp
+++ b/llvm/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)) {
OpenPOWER on IntegriCloud