If the llvm name contains an unprintable character, don't print it in
authorChris Lattner <sabre@nondot.org>
Fri, 15 Feb 2008 18:56:05 +0000 (18:56 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 15 Feb 2008 18:56:05 +0000 (18:56 +0000)
the global comment.  This prevents printing things like:

...  # foo
bar

when the name is "foo\nbar".

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47170 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86AsmPrinter.cpp

index 727707b45da39f91ff971bf00b3d40eac34c0c54..e23dd0d5870273792dfb042a9bb8ce5d8febd6df 100644 (file)
@@ -138,6 +138,15 @@ bool X86SharedAsmPrinter::doInitialization(Module &M) {
   return Result;
 }
 
+/// PrintUnamedNameSafely - Print out the printable characters in the name.
+/// Don't print things like \n or \0.
+static void PrintUnamedNameSafely(const Value *V, std::ostream &OS) {
+  for (const char *Name = V->getNameStart(), *E = Name+V->getNameLen();
+       Name != E; ++Name)
+    if (isprint(*Name))
+      OS << *Name;
+}
+
 bool X86SharedAsmPrinter::doFinalization(Module &M) {
   // Note: this code is not shared by the Intel printer as it is too different
   // from how MASM does things.  When making changes here don't forget to look
@@ -218,7 +227,9 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
           if (TAI->getCOMMDirectiveTakesAlignment())
             O << "," << (TAI->getAlignmentIsInBytes() ? (1 << Align) : Align);
         }
-        O << "\t\t" << TAI->getCommentString() << " " << I->getName() << "\n";
+        O << "\t\t" << TAI->getCommentString() << " ";
+        PrintUnamedNameSafely(I, O);
+        O << "\n";
         continue;
       }
     }
@@ -319,8 +330,9 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) {
     }
 
     EmitAlignment(Align, I);
-    O << name << ":\t\t\t\t" << TAI->getCommentString() << " " << I->getName()
-      << "\n";
+    O << name << ":\t\t\t\t" << TAI->getCommentString() << " ";
+    PrintUnamedNameSafely(I, O);
+    O << "\n";
     if (TAI->hasDotTypeDotSizeDirective())
       O << "\t.size\t" << name << ", " << Size << "\n";
     // If the initializer is a extern weak symbol, remember to emit the weak