diff options
-rw-r--r-- | docs/LangRef.html | 5 | ||||
-rw-r--r-- | lib/VMCore/AsmWriter.cpp | 3 | ||||
-rw-r--r-- | test/Assembler/2008-10-14-QuoteInName.ll | 3 |
3 files changed, 7 insertions, 4 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index 27bcb92002..f8ca2879c4 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -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>"</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> diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index ddcb8d6c0a..0080d63b63 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -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 index 0000000000..ccd77791ca --- /dev/null +++ b/test/Assembler/2008-10-14-QuoteInName.ll @@ -0,0 +1,3 @@ +; RUN: llvm-as < %s | llvm-dis | grep "quote" + +@"a\22quote" = global i32 0 |