[llvm] r194667 - Don't mangle \n and "

Rafael Espindola rafael.espindola at gmail.com
Wed Nov 13 22:05:49 PST 2013


Author: rafael
Date: Thu Nov 14 00:05:49 2013
New Revision: 194667

URL: http://llvm.org/viewvc/llvm-project?rev=194667&view=rev
Log:
Don't mangle \n and "

There is nothing special about quotes and newlines from the object
file point of view, only the assembler has to worry about expanding
the \n and \".

This patch then removes the special handling from the Mangler.

Added:
    llvm/trunk/test/CodeGen/X86/newline-and-quote.ll
Modified:
    llvm/trunk/lib/MC/MCSymbol.cpp
    llvm/trunk/lib/Target/Mangler.cpp

Modified: llvm/trunk/lib/MC/MCSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbol.cpp?rev=194667&r1=194666&r2=194667&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCSymbol.cpp (original)
+++ llvm/trunk/lib/MC/MCSymbol.cpp Thu Nov 14 00:05:49 2013
@@ -68,12 +68,23 @@ void MCSymbol::print(raw_ostream &OS) co
   // The name for this MCSymbol is required to be a valid target name.  However,
   // some targets support quoting names with funny characters.  If the name
   // contains a funny character, then print it quoted.
-  if (!NameNeedsQuoting(getName())) {
-    OS << getName();
+  StringRef Name = getName();
+  if (!NameNeedsQuoting(Name)) {
+    OS << Name;
     return;
   }
 
-  OS << '"' << getName() << '"';
+  OS << '"';
+  for (unsigned I = 0, E = Name.size(); I != E; ++I) {
+    char C = Name[I];
+    if (C == '\n')
+      OS << "\\n";
+    else if (C == '"')
+      OS << "\\\"";
+    else
+      OS << C;
+  }
+  OS << '"';
 }
 
 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)

Modified: llvm/trunk/lib/Target/Mangler.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mangler.cpp?rev=194667&r1=194666&r2=194667&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mangler.cpp (original)
+++ llvm/trunk/lib/Target/Mangler.cpp Thu Nov 14 00:05:49 2013
@@ -23,31 +23,6 @@
 #include "llvm/Support/raw_ostream.h"
 using namespace llvm;
 
-static char HexDigit(int V) {
-  return V < 10 ? V+'0' : V+'A'-10;
-}
-
-static void MangleLetter(SmallVectorImpl<char> &OutName, unsigned char C) {
-  OutName.push_back('_');
-  OutName.push_back(HexDigit(C >> 4));
-  OutName.push_back(HexDigit(C & 15));
-  OutName.push_back('_');
-}
-
-/// appendMangledQuotedName - On systems that support quoted symbols, we still
-/// have to escape some (obscure) characters like " and \n which would break the
-/// assembler's lexing.
-static void appendMangledQuotedName(SmallVectorImpl<char> &OutName,
-                                   StringRef Str) {
-  for (unsigned i = 0, e = Str.size(); i != e; ++i) {
-    if (Str[i] == '"' || Str[i] == '\n')
-      MangleLetter(OutName, Str[i]);
-    else
-      OutName.push_back(Str[i]);
-  }
-}
-
-
 /// getNameWithPrefix - Fill OutName with the name of the appropriate prefix
 /// and the specified name as the global variable name.  GVName must not be
 /// empty.
@@ -85,16 +60,7 @@ void Mangler::getNameWithPrefix(SmallVec
   }
 
   // If this is a simple string that doesn't need escaping, just append it.
-  // Quotes can be used unless the string contains a quote or newline.
-  if (Name.find_first_of("\n\"") == StringRef::npos) {
-    OutName.append(Name.begin(), Name.end());
-    return;
-  }
-
-  // Okay, the system allows quoted strings.  We can quote most anything, the
-  // only characters that need escaping are " and \n.
-  assert(Name.find_first_of("\n\"") != StringRef::npos);
-  return appendMangledQuotedName(OutName, Name);
+  OutName.append(Name.begin(), Name.end());
 }
 
 /// AddFastCallStdCallSuffix - Microsoft fastcall and stdcall functions require

Added: llvm/trunk/test/CodeGen/X86/newline-and-quote.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/newline-and-quote.ll?rev=194667&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/newline-and-quote.ll (added)
+++ llvm/trunk/test/CodeGen/X86/newline-and-quote.ll Thu Nov 14 00:05:49 2013
@@ -0,0 +1,6 @@
+; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu | FileCheck %s
+@"foo\22bar" = global i32 42
+; CHECK: .globl "foo\"bar"
+
+@"foo\0abar" = global i32 42
+; CHECK: .globl "foo\nbar"





More information about the llvm-commits mailing list