OSDN Git Service

Prevent assert when using '"' in names (via hexadecimal).
authorDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 23:51:43 +0000 (23:51 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 14 Oct 2008 23:51:43 +0000 (23:51 +0000)
Update LangRef to mention \xx quoting in names.

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

docs/LangRef.html
lib/VMCore/AsmWriter.cpp
test/Assembler/2008-10-14-QuoteInName.ll [new file with mode: 0644]

index 27bcb92..f8ca287 100644 (file)
@@ -335,8 +335,9 @@ the parser.</p>
   For example, %foo, @DivisionByZero, %a.really.long.identifier.  The actual
   regular expression used is '<tt>[%@][a-zA-Z$._][a-zA-Z$._0-9]*</tt>'.
   Identifiers which require other characters in their names can be surrounded
-  with quotes.  In this way, anything except a <tt>&quot;</tt> character can 
-  be used in a named value.</li>
+  with quotes. Special characters may be escaped using "\xx" where xx is the 
+  ASCII code for the character in hexadecimal.  In this way, any character can 
+  be used in a name value, even quotes themselves.
 
   <li>Unnamed values are represented as an unsigned numeric value with their
   prefix.  For example, %12, @2, %44.</li>
index ddcb8d6..0080d63 100644 (file)
@@ -112,10 +112,9 @@ static void PrintLLVMName(raw_ostream &OS, const char *NameStr,
   OS << '"';
   for (unsigned i = 0; i != NameLen; ++i) {
     char C = NameStr[i];
-    assert(C != '"' && "Illegal character in LLVM value name!");
     if (C == '\\') {
       OS << "\\\\";
-    } else if (isprint(C)) {
+    } else if (C != '"' && isprint(C)) {
       OS << C;
     } else {
       OS << '\\';
diff --git a/test/Assembler/2008-10-14-QuoteInName.ll b/test/Assembler/2008-10-14-QuoteInName.ll
new file mode 100644 (file)
index 0000000..ccd7779
--- /dev/null
@@ -0,0 +1,3 @@
+; RUN: llvm-as < %s | llvm-dis | grep "quote"
+
+@"a\22quote" = global i32 0