diff --git a/docs/LangRef.html b/docs/LangRef.html index 27bcb920025..f8ca2879c44 100644 --- a/docs/LangRef.html +++ b/docs/LangRef.html @@ -335,8 +335,9 @@ the parser.

For example, %foo, @DivisionByZero, %a.really.long.identifier. The actual regular expression used is '[%@][a-zA-Z$._][a-zA-Z$._0-9]*'. Identifiers which require other characters in their names can be surrounded - with quotes. In this way, anything except a " character can - be used in a named value. + 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.
  • Unnamed values are represented as an unsigned numeric value with their prefix. For example, %12, @2, %44.
  • diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index ddcb8d6c0ab..0080d63b63a 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 00000000000..ccd77791caa --- /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