<div dir="ltr">The official GNU Assembler documentation seems to say that quotes in section names are fine:<div><br></div><div>"To generate a symbol name containing multibyte characters enclose it within double quotes and use escape codes. [1]"<br>
</div><div><br></div><div>[1] <a href="https://sourceware.org/binutils/docs/as/Symbol-Names.html">https://sourceware.org/binutils/docs/as/Symbol-Names.html</a></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Wed, Oct 16, 2013 at 1:22 AM, NAKAMURA Takumi <span dir="ltr"><<a href="mailto:geek4civic@gmail.com" target="_blank">geek4civic@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: chapuni<br>
Date: Wed Oct 16 03:22:49 2013<br>
New Revision: 192775<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=192775&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=192775&view=rev</a><br>
Log:<br>
Revert r192758 (and r192759), "MC: Better handling of tricky symbol and section names"<br>
<br>
GNU AS didn't like quotes in symbol names.<br>
<br>
    Error: junk at end of line, first unrecognized character is `"'<br>
<br>
        .def "@feat.00";<br>
        "@feat.00" = 1<br>
<br>
Reproduced on Cygwin's 2.23.52.20130309 and mingw32's 2.20.1.20100303.<br>
<br>
Removed:<br>
    llvm/trunk/test/MC/COFF/quoted-names.ll<br>
Modified:<br>
    llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
    llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp<br>
    llvm/trunk/lib/MC/MCSectionCOFF.cpp<br>
    llvm/trunk/lib/MC/MCSymbol.cpp<br>
    llvm/trunk/test/CodeGen/X86/coff-feat00.ll<br>
    llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll<br>
    llvm/trunk/test/CodeGen/X86/stdcall.ll<br>
<br>
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Wed Oct 16 03:22:49 2013<br>
@@ -792,25 +792,19 @@ bool AsmParser::parsePrimaryExpr(const M<br>
     EndLoc = SMLoc::getFromPointer(Identifier.end());<br>
<br>
     // This is a symbol reference.<br>
-    StringRef SymbolName = Identifier;<br>
-    MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;<br>
     std::pair<StringRef, StringRef> Split = Identifier.split('@');<br>
-<br>
-    if (Split.first.size() != Identifier.size() &&<br>
-        FirstTokenKind != AsmToken::String) {<br>
-      SymbolName = Split.first;<br>
-      StringRef VariantName = Split.second;<br>
+    MCSymbol *Sym = getContext().GetOrCreateSymbol(Split.first);<br>
<br>
-      // Lookup the symbol variant.<br>
-      Variant = MCSymbolRefExpr::getVariantKindForName(VariantName);<br>
+    // Lookup the symbol variant if used.<br>
+    MCSymbolRefExpr::VariantKind Variant = MCSymbolRefExpr::VK_None;<br>
+    if (Split.first.size() != Identifier.size()) {<br>
+      Variant = MCSymbolRefExpr::getVariantKindForName(Split.second);<br>
       if (Variant == MCSymbolRefExpr::VK_Invalid) {<br>
         Variant = MCSymbolRefExpr::VK_None;<br>
-        return TokError("invalid variant '" + VariantName + "'");<br>
+        return TokError("invalid variant '" + Split.second + "'");<br>
       }<br>
     }<br>
<br>
-    MCSymbol *Sym = getContext().GetOrCreateSymbol(SymbolName);<br>
-<br>
     // If this is an absolute variable reference, substitute it now to preserve<br>
     // semantics in the face of reassignment.<br>
     if (Sym->isVariable() && isa<MCConstantExpr>(Sym->getVariableValue())) {<br>
<br>
Modified: llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCParser/COFFAsmParser.cpp Wed Oct 16 03:22:49 2013<br>
@@ -295,7 +295,12 @@ bool COFFAsmParser::ParseSectionSwitch(S<br>
 }<br>
<br>
 bool COFFAsmParser::ParseSectionName(StringRef &SectionName) {<br>
-  return getParser().parseIdentifier(SectionName);<br>
+  if (!getLexer().is(AsmToken::Identifier))<br>
+    return true;<br>
+<br>
+  SectionName = getTok().getIdentifier();<br>
+  Lex();<br>
+  return false;<br>
 }<br>
<br>
 // .section name [, "flags"]<br>
<br>
Modified: llvm/trunk/lib/MC/MCSectionCOFF.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionCOFF.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSectionCOFF.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCSectionCOFF.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCSectionCOFF.cpp Wed Oct 16 03:22:49 2013<br>
@@ -39,22 +39,6 @@ void MCSectionCOFF::setSelection(int Sel<br>
   Characteristics |= COFF::IMAGE_SCN_LNK_COMDAT;<br>
 }<br>
<br>
-static bool isAcceptableSectionNameChar(char C) {<br>
-  return (C >= 'a' && C <= 'z') ||<br>
-         (C >= 'A' && C <= 'Z') ||<br>
-         (C >= '0' && C <= '9') ||<br>
-         C == '_' || C == '$' || C == '.';<br>
-}<br>
-<br>
-/// NameNeedsQuoting - Return true if the identifier \p Str needs quotes to be<br>
-/// syntactically correct.<br>
-static bool sectionNameNeedsQuoting(StringRef Name) {<br>
-  for (unsigned i = 0, e = Name.size(); i != e; ++i)<br>
-    if (!isAcceptableSectionNameChar(Name[i]))<br>
-      return true;<br>
-  return false;<br>
-}<br>
-<br>
 void MCSectionCOFF::PrintSwitchToSection(const MCAsmInfo &MAI,<br>
                                          raw_ostream &OS,<br>
                                          const MCExpr *Subsection) const {<br>
@@ -65,10 +49,7 @@ void MCSectionCOFF::PrintSwitchToSection<br>
     return;<br>
   }<br>
<br>
-  if (sectionNameNeedsQuoting(getSectionName()))<br>
-    OS << "\t.section\t" << '"' << getSectionName() << '"' << ",\"";<br>
-  else<br>
-    OS << "\t.section\t" << getSectionName() << ",\"";<br>
+  OS << "\t.section\t" << getSectionName() << ",\"";<br>
   if (getKind().isText())<br>
     OS << 'x';<br>
   if (getKind().isWriteable())<br>
<br>
Modified: llvm/trunk/lib/MC/MCSymbol.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbol.cpp?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCSymbol.cpp?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/lib/MC/MCSymbol.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCSymbol.cpp Wed Oct 16 03:22:49 2013<br>
@@ -18,10 +18,12 @@ const MCSection *MCSymbol::AbsolutePseud<br>
   reinterpret_cast<const MCSection *>(1);<br>
<br>
 static bool isAcceptableChar(char C) {<br>
-  return (C >= 'a' && C <= 'z') ||<br>
-         (C >= 'A' && C <= 'Z') ||<br>
-         (C >= '0' && C <= '9') ||<br>
-         C == '_' || C == '$' || C == '.';<br>
+  if ((C < 'a' || C > 'z') &&<br>
+      (C < 'A' || C > 'Z') &&<br>
+      (C < '0' || C > '9') &&<br>
+      C != '_' && C != '$' && C != '.' && C != '@')<br>
+    return false;<br>
+  return true;<br>
 }<br>
<br>
 /// NameNeedsQuoting - Return true if the identifier \p Str needs quotes to be<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/coff-feat00.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coff-feat00.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/coff-feat00.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/coff-feat00.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/coff-feat00.ll Wed Oct 16 03:22:49 2013<br>
@@ -4,4 +4,4 @@ define i32 @foo() {<br>
   ret i32 0<br>
 }<br>
<br>
-; CHECK: "@feat.00" = 1<br>
+; CHECK: @feat.00 = 1<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/fastcall-correct-mangling.ll Wed Oct 16 03:22:49 2013<br>
@@ -3,7 +3,7 @@<br>
 ; Check that a fastcall function gets correct mangling<br>
<br>
 define x86_fastcallcc void @func(i64 %X, i8 %Y, i8 %G, i16 %Z) {<br>
-; CHECK: "@func@20":<br>
+; CHECK: @func@20:<br>
         ret void<br>
 }<br>
<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/stdcall.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stdcall.ll?rev=192775&r1=192774&r2=192775&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/stdcall.ll?rev=192775&r1=192774&r2=192775&view=diff</a><br>

==============================================================================<br>
--- llvm/trunk/test/CodeGen/X86/stdcall.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/stdcall.ll Wed Oct 16 03:22:49 2013<br>
@@ -5,7 +5,7 @@<br>
<br>
 define internal x86_stdcallcc void @MyFunc() nounwind {<br>
 entry:<br>
-; CHECK: "_MyFunc@0":<br>
+; CHECK: MyFunc@0:<br>
 ; CHECK: ret<br>
   ret void<br>
 }<br>
@@ -20,5 +20,5 @@ entry:<br>
<br>
 @B = global %0 { void (...)* bitcast (void ()* @MyFunc to void (...)*) }, align 4<br>
 ; CHECK: _B:<br>
-; CHECK: .long "_MyFunc@0"<br>
+; CHECK: .long _MyFunc@0<br>
<br>
<br>
Removed: llvm/trunk/test/MC/COFF/quoted-names.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/quoted-names.ll?rev=192774&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/quoted-names.ll?rev=192774&view=auto</a><br>

==============================================================================<br>
--- llvm/trunk/test/MC/COFF/quoted-names.ll (original)<br>
+++ llvm/trunk/test/MC/COFF/quoted-names.ll (removed)<br>
@@ -1,20 +0,0 @@<br>
-; Check that certain symbol and section names are quoted in the asm output.<br>
-; RUN: llc -mtriple=i686-pc-win32 %s -o - | FileCheck %s<br>
-<br>
-; Check that the symbol and section names can round-trip through the assembler.<br>
-; RUN: llc -mtriple=i686-pc-win32 %s -o - | llvm-mc -triple i686-pc-win32 -filetype=obj | llvm-readobj -s -section-symbols | FileCheck %s --check-prefix=READOBJ<br>
-<br>
-@"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ" = global i32 0<br>
-<br>
-define weak i32 @"\01??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"() section ".text" {<br>
-  %res = load i32* @"\01??__E_Generic_object@?$_Error_objects@H@std@@YAXXZ"<br>
-  ret i32 %res<br>
-}<br>
-<br>
-; CHECK: .section ".text$??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51","xr"<br>
-; CHECK: .globl "??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"<br>
-; CHECK: "??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51"<br>
-<br>
-; READOBJ: Symbol<br>
-; READOBJ: Name: ??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51<br>
-; READOBJ: Section: .text$??_B?$num_put@_WV?$back_insert_iterator@V?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@std@@@std@@51<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>