[MS demangler] Use a slightly shorter unmangling for mangled strings.

Before: const wchar_t * {L"%"}
Now: L"%"

See also PR39593.
Differential Revision: https://reviews.llvm.org/D54294

llvm-svn: 346544
This commit is contained in:
Nico Weber 2018-11-09 19:28:50 +00:00
parent 60b7fb46e1
commit dfc08baceb
3 changed files with 376 additions and 377 deletions

View File

@ -161,22 +161,21 @@ void EncodedStringLiteralNode::output(OutputStream &OS,
OutputFlags Flags) const {
switch (Char) {
case CharKind::Wchar:
OS << "const wchar_t * {L\"";
OS << "L\"";
break;
case CharKind::Char:
OS << "const char * {\"";
OS << "\"";
break;
case CharKind::Char16:
OS << "const char16_t * {u\"";
OS << "u\"";
break;
case CharKind::Char32:
OS << "const char32_t * {U\"";
OS << "U\"";
break;
}
OS << DecodedString << "\"";
if (IsTruncated)
OS << "...";
OS << "}";
}
void IntegerLiteralNode::output(OutputStream &OS, OutputFlags Flags) const {

View File

@ -153,7 +153,7 @@
; CHECK: `struct S & __cdecl getS(void)'::`2'::`local static guard'{2}
??_C@_02PCEFGMJL@hi?$AA@
; CHECK: const char * {"hi"}
; CHECK: "hi"
??_DDiamond@@QEAAXXZ
; CHECK: void __cdecl Diamond::`vbase dtor'(void)

View File

@ -259,268 +259,268 @@
??_C@_01KHDNNMEB@?$AB?$AA@
??_C@_01LOCGONAA@?$AA?$AA@
; CHECK: const char * {"\xFF"}
; CHECK: const char * {"\xFE"}
; CHECK: const char * {"\xFD"}
; CHECK: const char * {"\xFC"}
; CHECK: const char * {"\xFB"}
; CHECK: const char * {"\xFA"}
; CHECK: const char * {"\xF9"}
; CHECK: const char * {"\xF8"}
; CHECK: const char * {"\xF7"}
; CHECK: const char * {"\xF6"}
; CHECK: const char * {"\xF5"}
; CHECK: const char * {"\xF4"}
; CHECK: const char * {"\xF3"}
; CHECK: const char * {"\xF2"}
; CHECK: const char * {"\xF1"}
; CHECK: const char * {"\xF0"}
; CHECK: const char * {"\xEF"}
; CHECK: const char * {"\xEE"}
; CHECK: const char * {"\xED"}
; CHECK: const char * {"\xEC"}
; CHECK: const char * {"\xEB"}
; CHECK: const char * {"\xEA"}
; CHECK: const char * {"\xE9"}
; CHECK: const char * {"\xE8"}
; CHECK: const char * {"\xE7"}
; CHECK: const char * {"\xE6"}
; CHECK: const char * {"\xE5"}
; CHECK: const char * {"\xE4"}
; CHECK: const char * {"\xE3"}
; CHECK: const char * {"\xE2"}
; CHECK: const char * {"\xE1"}
; CHECK: const char * {"\xE0"}
; CHECK: const char * {"\xDF"}
; CHECK: const char * {"\xDE"}
; CHECK: const char * {"\xDD"}
; CHECK: const char * {"\xDC"}
; CHECK: const char * {"\xDB"}
; CHECK: const char * {"\xDA"}
; CHECK: const char * {"\xD9"}
; CHECK: const char * {"\xD8"}
; CHECK: const char * {"\xD7"}
; CHECK: const char * {"\xD6"}
; CHECK: const char * {"\xD5"}
; CHECK: const char * {"\xD4"}
; CHECK: const char * {"\xD3"}
; CHECK: const char * {"\xD2"}
; CHECK: const char * {"\xD1"}
; CHECK: const char * {"\xD0"}
; CHECK: const char * {"\xCF"}
; CHECK: const char * {"\xCE"}
; CHECK: const char * {"\xCD"}
; CHECK: const char * {"\xCC"}
; CHECK: const char * {"\xCB"}
; CHECK: const char * {"\xCA"}
; CHECK: const char * {"\xC9"}
; CHECK: const char * {"\xC8"}
; CHECK: const char * {"\xC7"}
; CHECK: const char * {"\xC6"}
; CHECK: const char * {"\xC5"}
; CHECK: const char * {"\xC4"}
; CHECK: const char * {"\xC3"}
; CHECK: const char * {"\xC2"}
; CHECK: const char * {"\xC1"}
; CHECK: const char * {"\xC0"}
; CHECK: const char * {"\xBF"}
; CHECK: const char * {"\xBE"}
; CHECK: const char * {"\xBD"}
; CHECK: const char * {"\xBC"}
; CHECK: const char * {"\xBB"}
; CHECK: const char * {"\xBA"}
; CHECK: const char * {"\xB9"}
; CHECK: const char * {"\xB8"}
; CHECK: const char * {"\xB7"}
; CHECK: const char * {"\xB6"}
; CHECK: const char * {"\xB5"}
; CHECK: const char * {"\xB4"}
; CHECK: const char * {"\xB3"}
; CHECK: const char * {"\xB2"}
; CHECK: const char * {"\xB1"}
; CHECK: const char * {"\xB0"}
; CHECK: const char * {"\xAF"}
; CHECK: const char * {"\xAE"}
; CHECK: const char * {"\xAD"}
; CHECK: const char * {"\xAC"}
; CHECK: const char * {"\xAB"}
; CHECK: const char * {"\xAA"}
; CHECK: const char * {"\xA9"}
; CHECK: const char * {"\xA8"}
; CHECK: const char * {"\xA7"}
; CHECK: const char * {"\xA6"}
; CHECK: const char * {"\xA5"}
; CHECK: const char * {"\xA4"}
; CHECK: const char * {"\xA3"}
; CHECK: const char * {"\xA2"}
; CHECK: const char * {"\xA1"}
; CHECK: const char * {"\xA0"}
; CHECK: const char * {"\x9F"}
; CHECK: const char * {"\x9E"}
; CHECK: const char * {"\x9D"}
; CHECK: const char * {"\x9C"}
; CHECK: const char * {"\x9B"}
; CHECK: const char * {"\x9A"}
; CHECK: const char * {"\x99"}
; CHECK: const char * {"\x98"}
; CHECK: const char * {"\x97"}
; CHECK: const char * {"\x96"}
; CHECK: const char * {"\x95"}
; CHECK: const char * {"\x94"}
; CHECK: const char * {"\x93"}
; CHECK: const char * {"\x92"}
; CHECK: const char * {"\x91"}
; CHECK: const char * {"\x90"}
; CHECK: const char * {"\x8F"}
; CHECK: const char * {"\x8E"}
; CHECK: const char * {"\x8D"}
; CHECK: const char * {"\x8C"}
; CHECK: const char * {"\x8B"}
; CHECK: const char * {"\x8A"}
; CHECK: const char * {"\x89"}
; CHECK: const char * {"\x88"}
; CHECK: const char * {"\x87"}
; CHECK: const char * {"\x86"}
; CHECK: const char * {"\x85"}
; CHECK: const char * {"\x84"}
; CHECK: const char * {"\x83"}
; CHECK: const char * {"\x82"}
; CHECK: const char * {"\x81"}
; CHECK: const char * {"\x80"}
; CHECK: const char * {"\x7F"}
; CHECK: const char * {"~"}
; CHECK: const char * {"}"}
; CHECK: const char * {"|"}
; CHECK: const char * {"{"}
; CHECK: const char * {"z"}
; CHECK: const char * {"y"}
; CHECK: const char * {"x"}
; CHECK: const char * {"w"}
; CHECK: const char * {"v"}
; CHECK: const char * {"u"}
; CHECK: const char * {"t"}
; CHECK: const char * {"s"}
; CHECK: const char * {"r"}
; CHECK: const char * {"q"}
; CHECK: const char * {"p"}
; CHECK: const char * {"o"}
; CHECK: const char * {"n"}
; CHECK: const char * {"m"}
; CHECK: const char * {"l"}
; CHECK: const char * {"k"}
; CHECK: const char * {"j"}
; CHECK: const char * {"i"}
; CHECK: const char * {"h"}
; CHECK: const char * {"g"}
; CHECK: const char * {"f"}
; CHECK: const char * {"e"}
; CHECK: const char * {"d"}
; CHECK: const char * {"c"}
; CHECK: const char * {"b"}
; CHECK: const char * {"a"}
; CHECK: const char * {"`"}
; CHECK: const char * {"_"}
; CHECK: const char * {"^"}
; CHECK: const char * {"]"}
; CHECK: const char * {"\\"}
; CHECK: const char * {"["}
; CHECK: const char * {"Z"}
; CHECK: const char * {"Y"}
; CHECK: const char * {"X"}
; CHECK: const char * {"W"}
; CHECK: const char * {"V"}
; CHECK: const char * {"U"}
; CHECK: const char * {"T"}
; CHECK: const char * {"S"}
; CHECK: const char * {"R"}
; CHECK: const char * {"Q"}
; CHECK: const char * {"P"}
; CHECK: const char * {"O"}
; CHECK: const char * {"N"}
; CHECK: const char * {"M"}
; CHECK: const char * {"L"}
; CHECK: const char * {"K"}
; CHECK: const char * {"J"}
; CHECK: const char * {"I"}
; CHECK: const char * {"H"}
; CHECK: const char * {"G"}
; CHECK: const char * {"F"}
; CHECK: const char * {"E"}
; CHECK: const char * {"D"}
; CHECK: const char * {"C"}
; CHECK: const char * {"B"}
; CHECK: const char * {"A"}
; CHECK: const char * {"@"}
; CHECK: const char * {"?"}
; CHECK: const char * {">"}
; CHECK: const char * {"="}
; CHECK: const char * {"<"}
; CHECK: const char * {";"}
; CHECK: const char * {":"}
; CHECK: const char * {"9"}
; CHECK: const char * {"8"}
; CHECK: const char * {"7"}
; CHECK: const char * {"6"}
; CHECK: const char * {"5"}
; CHECK: const char * {"4"}
; CHECK: const char * {"3"}
; CHECK: const char * {"2"}
; CHECK: const char * {"1"}
; CHECK: const char * {"0"}
; CHECK: const char * {"/"}
; CHECK: const char * {"."}
; CHECK: const char * {"-"}
; CHECK: const char * {","}
; CHECK: const char * {"+"}
; CHECK: const char * {"*"}
; CHECK: const char * {")"}
; CHECK: const char * {"("}
; CHECK: const char * {"\'"}
; CHECK: const char * {"&"}
; CHECK: const char * {"%"}
; CHECK: const char * {"$"}
; CHECK: const char * {"#"}
; CHECK: const char * {"\""}
; CHECK: const char * {"!"}
; CHECK: const char * {" "}
; CHECK: const char * {"\x1F"}
; CHECK: const char * {"\x1E"}
; CHECK: const char * {"\x1D"}
; CHECK: const char * {"\x1C"}
; CHECK: const char * {"\x1B"}
; CHECK: const char * {"\x1A"}
; CHECK: const char * {"\x19"}
; CHECK: const char * {"\x18"}
; CHECK: const char * {"\x17"}
; CHECK: const char * {"\x16"}
; CHECK: const char * {"\x15"}
; CHECK: const char * {"\x14"}
; CHECK: const char * {"\x13"}
; CHECK: const char * {"\x12"}
; CHECK: const char * {"\x11"}
; CHECK: const char * {"\x10"}
; CHECK: const char * {"\x0F"}
; CHECK: const char * {"\x0E"}
; CHECK: const char * {"\r"}
; CHECK: const char * {"\f"}
; CHECK: const char * {"\v"}
; CHECK: const char * {"\n"}
; CHECK: const char * {"\t"}
; CHECK: const char * {"\b"}
; CHECK: const char * {"\a"}
; CHECK: const char * {"\x06"}
; CHECK: const char * {"\x05"}
; CHECK: const char * {"\x04"}
; CHECK: const char * {"\x03"}
; CHECK: const char * {"\x02"}
; CHECK: const char * {"\x01"}
; CHECK: "\xFF"
; CHECK: "\xFE"
; CHECK: "\xFD"
; CHECK: "\xFC"
; CHECK: "\xFB"
; CHECK: "\xFA"
; CHECK: "\xF9"
; CHECK: "\xF8"
; CHECK: "\xF7"
; CHECK: "\xF6"
; CHECK: "\xF5"
; CHECK: "\xF4"
; CHECK: "\xF3"
; CHECK: "\xF2"
; CHECK: "\xF1"
; CHECK: "\xF0"
; CHECK: "\xEF"
; CHECK: "\xEE"
; CHECK: "\xED"
; CHECK: "\xEC"
; CHECK: "\xEB"
; CHECK: "\xEA"
; CHECK: "\xE9"
; CHECK: "\xE8"
; CHECK: "\xE7"
; CHECK: "\xE6"
; CHECK: "\xE5"
; CHECK: "\xE4"
; CHECK: "\xE3"
; CHECK: "\xE2"
; CHECK: "\xE1"
; CHECK: "\xE0"
; CHECK: "\xDF"
; CHECK: "\xDE"
; CHECK: "\xDD"
; CHECK: "\xDC"
; CHECK: "\xDB"
; CHECK: "\xDA"
; CHECK: "\xD9"
; CHECK: "\xD8"
; CHECK: "\xD7"
; CHECK: "\xD6"
; CHECK: "\xD5"
; CHECK: "\xD4"
; CHECK: "\xD3"
; CHECK: "\xD2"
; CHECK: "\xD1"
; CHECK: "\xD0"
; CHECK: "\xCF"
; CHECK: "\xCE"
; CHECK: "\xCD"
; CHECK: "\xCC"
; CHECK: "\xCB"
; CHECK: "\xCA"
; CHECK: "\xC9"
; CHECK: "\xC8"
; CHECK: "\xC7"
; CHECK: "\xC6"
; CHECK: "\xC5"
; CHECK: "\xC4"
; CHECK: "\xC3"
; CHECK: "\xC2"
; CHECK: "\xC1"
; CHECK: "\xC0"
; CHECK: "\xBF"
; CHECK: "\xBE"
; CHECK: "\xBD"
; CHECK: "\xBC"
; CHECK: "\xBB"
; CHECK: "\xBA"
; CHECK: "\xB9"
; CHECK: "\xB8"
; CHECK: "\xB7"
; CHECK: "\xB6"
; CHECK: "\xB5"
; CHECK: "\xB4"
; CHECK: "\xB3"
; CHECK: "\xB2"
; CHECK: "\xB1"
; CHECK: "\xB0"
; CHECK: "\xAF"
; CHECK: "\xAE"
; CHECK: "\xAD"
; CHECK: "\xAC"
; CHECK: "\xAB"
; CHECK: "\xAA"
; CHECK: "\xA9"
; CHECK: "\xA8"
; CHECK: "\xA7"
; CHECK: "\xA6"
; CHECK: "\xA5"
; CHECK: "\xA4"
; CHECK: "\xA3"
; CHECK: "\xA2"
; CHECK: "\xA1"
; CHECK: "\xA0"
; CHECK: "\x9F"
; CHECK: "\x9E"
; CHECK: "\x9D"
; CHECK: "\x9C"
; CHECK: "\x9B"
; CHECK: "\x9A"
; CHECK: "\x99"
; CHECK: "\x98"
; CHECK: "\x97"
; CHECK: "\x96"
; CHECK: "\x95"
; CHECK: "\x94"
; CHECK: "\x93"
; CHECK: "\x92"
; CHECK: "\x91"
; CHECK: "\x90"
; CHECK: "\x8F"
; CHECK: "\x8E"
; CHECK: "\x8D"
; CHECK: "\x8C"
; CHECK: "\x8B"
; CHECK: "\x8A"
; CHECK: "\x89"
; CHECK: "\x88"
; CHECK: "\x87"
; CHECK: "\x86"
; CHECK: "\x85"
; CHECK: "\x84"
; CHECK: "\x83"
; CHECK: "\x82"
; CHECK: "\x81"
; CHECK: "\x80"
; CHECK: "\x7F"
; CHECK: "~"
; CHECK: "}"
; CHECK: "|"
; CHECK: "{"
; CHECK: "z"
; CHECK: "y"
; CHECK: "x"
; CHECK: "w"
; CHECK: "v"
; CHECK: "u"
; CHECK: "t"
; CHECK: "s"
; CHECK: "r"
; CHECK: "q"
; CHECK: "p"
; CHECK: "o"
; CHECK: "n"
; CHECK: "m"
; CHECK: "l"
; CHECK: "k"
; CHECK: "j"
; CHECK: "i"
; CHECK: "h"
; CHECK: "g"
; CHECK: "f"
; CHECK: "e"
; CHECK: "d"
; CHECK: "c"
; CHECK: "b"
; CHECK: "a"
; CHECK: "`"
; CHECK: "_"
; CHECK: "^"
; CHECK: "]"
; CHECK: "\\"
; CHECK: "["
; CHECK: "Z"
; CHECK: "Y"
; CHECK: "X"
; CHECK: "W"
; CHECK: "V"
; CHECK: "U"
; CHECK: "T"
; CHECK: "S"
; CHECK: "R"
; CHECK: "Q"
; CHECK: "P"
; CHECK: "O"
; CHECK: "N"
; CHECK: "M"
; CHECK: "L"
; CHECK: "K"
; CHECK: "J"
; CHECK: "I"
; CHECK: "H"
; CHECK: "G"
; CHECK: "F"
; CHECK: "E"
; CHECK: "D"
; CHECK: "C"
; CHECK: "B"
; CHECK: "A"
; CHECK: "@"
; CHECK: "?"
; CHECK: ">"
; CHECK: "="
; CHECK: "<"
; CHECK: ";"
; CHECK: ":"
; CHECK: "9"
; CHECK: "8"
; CHECK: "7"
; CHECK: "6"
; CHECK: "5"
; CHECK: "4"
; CHECK: "3"
; CHECK: "2"
; CHECK: "1"
; CHECK: "0"
; CHECK: "/"
; CHECK: "."
; CHECK: "-"
; CHECK: ","
; CHECK: "+"
; CHECK: "*"
; CHECK: ")"
; CHECK: "("
; CHECK: "\'"
; CHECK: "&"
; CHECK: "%"
; CHECK: "$"
; CHECK: "#"
; CHECK: "\""
; CHECK: "!"
; CHECK: " "
; CHECK: "\x1F"
; CHECK: "\x1E"
; CHECK: "\x1D"
; CHECK: "\x1C"
; CHECK: "\x1B"
; CHECK: "\x1A"
; CHECK: "\x19"
; CHECK: "\x18"
; CHECK: "\x17"
; CHECK: "\x16"
; CHECK: "\x15"
; CHECK: "\x14"
; CHECK: "\x13"
; CHECK: "\x12"
; CHECK: "\x11"
; CHECK: "\x10"
; CHECK: "\x0F"
; CHECK: "\x0E"
; CHECK: "\r"
; CHECK: "\f"
; CHECK: "\v"
; CHECK: "\n"
; CHECK: "\t"
; CHECK: "\b"
; CHECK: "\a"
; CHECK: "\x06"
; CHECK: "\x05"
; CHECK: "\x04"
; CHECK: "\x03"
; CHECK: "\x02"
; CHECK: "\x01"
; The mangling doesn't distinguish between char and char16 types, so even though
; this was originally written as a char * with one embedded null, it mangles
; identically to a char16_t * that is empty. So when demangling, we choose the
; this was originally written as a char[] with one embedded null, it mangles
; identically to a char16_t[] that is empty. So when demangling, we choose the
; "smartest" one, which happened to be wrong, but it's still a "better"
; demangling.
; CHECK: const char16_t * {u""}
; CHECK: u""
??_C@_13KDLDGPGJ@?$AA?7?$AA?$AA@
@ -622,152 +622,152 @@
??_C@_13EHOOFIKC@?$AA?$HN?$AA?$AA@
??_C@_13FFFLPHEM@?$AA?$HO?$AA?$AA@
; CHECK: const wchar_t * {L"\t"}
; CHECK: const wchar_t * {L"\n"}
; CHECK: const wchar_t * {L"\v"}
; CHECK: const wchar_t * {L" "}
; CHECK: const wchar_t * {L"!"}
; CHECK: const wchar_t * {L"\""}
; CHECK: const wchar_t * {L"#"}
; CHECK: const wchar_t * {L"$"}
; CHECK: const wchar_t * {L"%"}
; CHECK: const wchar_t * {L"&"}
; CHECK: const wchar_t * {L"\'"}
; CHECK: const wchar_t * {L"("}
; CHECK: const wchar_t * {L")"}
; CHECK: const wchar_t * {L"*"}
; CHECK: const wchar_t * {L"+"}
; CHECK: const wchar_t * {L","}
; CHECK: const wchar_t * {L"-"}
; CHECK: const wchar_t * {L"."}
; CHECK: const wchar_t * {L"/"}
; CHECK: const wchar_t * {L"0"}
; CHECK: const wchar_t * {L"1"}
; CHECK: const wchar_t * {L"2"}
; CHECK: const wchar_t * {L"3"}
; CHECK: const wchar_t * {L"4"}
; CHECK: const wchar_t * {L"5"}
; CHECK: const wchar_t * {L"6"}
; CHECK: const wchar_t * {L"7"}
; CHECK: const wchar_t * {L"8"}
; CHECK: const wchar_t * {L"9"}
; CHECK: const wchar_t * {L":"}
; CHECK: const wchar_t * {L";"}
; CHECK: const wchar_t * {L"<"}
; CHECK: const wchar_t * {L"="}
; CHECK: const wchar_t * {L">"}
; CHECK: const wchar_t * {L"?"}
; CHECK: const wchar_t * {L"@"}
; CHECK: const wchar_t * {L"A"}
; CHECK: const wchar_t * {L"B"}
; CHECK: const wchar_t * {L"C"}
; CHECK: const wchar_t * {L"D"}
; CHECK: const wchar_t * {L"E"}
; CHECK: const wchar_t * {L"F"}
; CHECK: const wchar_t * {L"G"}
; CHECK: const wchar_t * {L"H"}
; CHECK: const wchar_t * {L"I"}
; CHECK: const wchar_t * {L"J"}
; CHECK: const wchar_t * {L"K"}
; CHECK: const wchar_t * {L"L"}
; CHECK: const wchar_t * {L"M"}
; CHECK: const wchar_t * {L"N"}
; CHECK: const wchar_t * {L"O"}
; CHECK: const wchar_t * {L"P"}
; CHECK: const wchar_t * {L"Q"}
; CHECK: const wchar_t * {L"R"}
; CHECK: const wchar_t * {L"S"}
; CHECK: const wchar_t * {L"T"}
; CHECK: const wchar_t * {L"U"}
; CHECK: const wchar_t * {L"V"}
; CHECK: const wchar_t * {L"W"}
; CHECK: const wchar_t * {L"X"}
; CHECK: const wchar_t * {L"Y"}
; CHECK: const wchar_t * {L"Z"}
; CHECK: const wchar_t * {L"["}
; CHECK: const wchar_t * {L"\\"}
; CHECK: const wchar_t * {L"]"}
; CHECK: const wchar_t * {L"^"}
; CHECK: const wchar_t * {L"_"}
; CHECK: const wchar_t * {L"`"}
; CHECK: const wchar_t * {L"a"}
; CHECK: const wchar_t * {L"b"}
; CHECK: const wchar_t * {L"c"}
; CHECK: const wchar_t * {L"d"}
; CHECK: const wchar_t * {L"e"}
; CHECK: const wchar_t * {L"f"}
; CHECK: const wchar_t * {L"g"}
; CHECK: const wchar_t * {L"h"}
; CHECK: const wchar_t * {L"i"}
; CHECK: const wchar_t * {L"j"}
; CHECK: const wchar_t * {L"k"}
; CHECK: const wchar_t * {L"l"}
; CHECK: const wchar_t * {L"m"}
; CHECK: const wchar_t * {L"n"}
; CHECK: const wchar_t * {L"o"}
; CHECK: const wchar_t * {L"p"}
; CHECK: const wchar_t * {L"q"}
; CHECK: const wchar_t * {L"r"}
; CHECK: const wchar_t * {L"s"}
; CHECK: const wchar_t * {L"t"}
; CHECK: const wchar_t * {L"u"}
; CHECK: const wchar_t * {L"v"}
; CHECK: const wchar_t * {L"w"}
; CHECK: const wchar_t * {L"x"}
; CHECK: const wchar_t * {L"y"}
; CHECK: const wchar_t * {L"z"}
; CHECK: const wchar_t * {L"{"}
; CHECK: const wchar_t * {L"|"}
; CHECK: const wchar_t * {L"}"}
; CHECK: const wchar_t * {L"~"}
; CHECK: L"\t"
; CHECK: L"\n"
; CHECK: L"\v"
; CHECK: L" "
; CHECK: L"!"
; CHECK: L"\""
; CHECK: L"#"
; CHECK: L"$"
; CHECK: L"%"
; CHECK: L"&"
; CHECK: L"\'"
; CHECK: L"("
; CHECK: L")"
; CHECK: L"*"
; CHECK: L"+"
; CHECK: L","
; CHECK: L"-"
; CHECK: L"."
; CHECK: L"/"
; CHECK: L"0"
; CHECK: L"1"
; CHECK: L"2"
; CHECK: L"3"
; CHECK: L"4"
; CHECK: L"5"
; CHECK: L"6"
; CHECK: L"7"
; CHECK: L"8"
; CHECK: L"9"
; CHECK: L":"
; CHECK: L";"
; CHECK: L"<"
; CHECK: L"="
; CHECK: L">"
; CHECK: L"?"
; CHECK: L"@"
; CHECK: L"A"
; CHECK: L"B"
; CHECK: L"C"
; CHECK: L"D"
; CHECK: L"E"
; CHECK: L"F"
; CHECK: L"G"
; CHECK: L"H"
; CHECK: L"I"
; CHECK: L"J"
; CHECK: L"K"
; CHECK: L"L"
; CHECK: L"M"
; CHECK: L"N"
; CHECK: L"O"
; CHECK: L"P"
; CHECK: L"Q"
; CHECK: L"R"
; CHECK: L"S"
; CHECK: L"T"
; CHECK: L"U"
; CHECK: L"V"
; CHECK: L"W"
; CHECK: L"X"
; CHECK: L"Y"
; CHECK: L"Z"
; CHECK: L"["
; CHECK: L"\\"
; CHECK: L"]"
; CHECK: L"^"
; CHECK: L"_"
; CHECK: L"`"
; CHECK: L"a"
; CHECK: L"b"
; CHECK: L"c"
; CHECK: L"d"
; CHECK: L"e"
; CHECK: L"f"
; CHECK: L"g"
; CHECK: L"h"
; CHECK: L"i"
; CHECK: L"j"
; CHECK: L"k"
; CHECK: L"l"
; CHECK: L"m"
; CHECK: L"n"
; CHECK: L"o"
; CHECK: L"p"
; CHECK: L"q"
; CHECK: L"r"
; CHECK: L"s"
; CHECK: L"t"
; CHECK: L"u"
; CHECK: L"v"
; CHECK: L"w"
; CHECK: L"x"
; CHECK: L"y"
; CHECK: L"z"
; CHECK: L"{"
; CHECK: L"|"
; CHECK: L"}"
; CHECK: L"~"
??_C@_0CF@LABBIIMO@012345678901234567890123456789AB@
; CHECK: const char * {"012345678901234567890123456789AB"...}
; CHECK: "012345678901234567890123456789AB"...
??_C@_1EK@KFPEBLPK@?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AAA?$AAB@
; CHECK: const wchar_t * {L"012345678901234567890123456789AB"...}
; CHECK: L"012345678901234567890123456789AB"...
??_C@_13IIHIAFKH@?W?$PP?$AA?$AA@
; CHECK: const wchar_t * {L"\xD7\xFF"}
; CHECK: L"\xD7\xFF"
??_C@_02PCEFGMJL@hi?$AA@
; CHECK: const char * {"hi"}
; CHECK: "hi"
??_C@_05OMLEGLOC@h?$AAi?$AA?$AA?$AA@
; CHECK: const char16_t * {u"hi"}
; CHECK: u"hi"
??_C@_0EK@FEAOBHPP@o?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA@
; CHECK: const char16_t * {u"o123456789012345"...}
; CHECK: u"o123456789012345"...
??_C@_0M@GFNAJIPG@h?$AA?$AA?$AAi?$AA?$AA?$AA?$AA?$AA?$AA?$AA@
; CHECK: const char32_t * {U"hi"}
; CHECK: U"hi"
??_C@_0JE@IMHFEDAA@0?$AA?$AA?$AA1?$AA?$AA?$AA2?$AA?$AA?$AA3?$AA?$AA?$AA4?$AA?$AA?$AA5?$AA?$AA?$AA6?$AA?$AA?$AA7?$AA?$AA?$AA@
; CHECK: const char32_t * {U"01234567"...}
; CHECK: U"01234567"...
; These all have just the right length that the trailing 0 just fits.
??_C@_0CA@NMANGEKF@012345678901234567890123456789A?$AA@
; CHECK: const char * {"012345678901234567890123456789A"}
; CHECK: "012345678901234567890123456789A"
??_C@_1EA@LJAFPILO@?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AAA?$AA?$AA@
; CHECK: const wchar_t * {L"012345678901234567890123456789A"}
; CHECK: L"012345678901234567890123456789A"
??_C@_0CA@NMANGEKF@012345678901234567890123456789A?$AA@
; CHECK: const char * {"012345678901234567890123456789A"}
; CHECK: "012345678901234567890123456789A"
??_C@_0CA@NFEFHIFO@0?$AA1?$AA2?$AA3?$AA4?$AA5?$AA6?$AA7?$AA8?$AA9?$AA0?$AA1?$AA2?$AA3?$AA4?$AA?$AA?$AA@
; CHECK: const char16_t * {u"012345678901234"}
; CHECK: u"012345678901234"
??_C@_0CA@KFPHPCC@0?$AA?$AA?$AA1?$AA?$AA?$AA2?$AA?$AA?$AA3?$AA?$AA?$AA4?$AA?$AA?$AA5?$AA?$AA?$AA6?$AA?$AA?$AA?$AA?$AA?$AA?$AA@
; CHECK: const char32_t * {U"0123456"}
; CHECK: U"0123456"
; There are too many bytes encoded in this string literal (it should encode a max of 32 bytes)
; but some buggy compilers will incorrectly generate this, so we need to be able to demangle
; both the correct and incorrect versions.
??_C@_0CG@HJGBPLNO@l?$AAo?$AAo?$AAk?$AAA?$AAh?$AAe?$AAa?$AAd?$AAH?$AAa?$AAr?$AAd?$AAB?$AAr?$AAe?$AAa?$AAk?$AA?$AA?$AA@
; CHECK: const char16_t * {u"lookAheadHardBreak"}
; CHECK: u"lookAheadHardBreak"
??_C@_0CG@HJGBPLNO@l?$AAo?$AAo?$AAk?$AAA?$AAh?$AAe?$AAa?$AAd?$AAH?$AAa?$AAr?$AAd?$AAB?$AAr?$AAe?$AA@
; CHECK: const char16_t * {u"lookAheadHardBre"...}
; CHECK: u"lookAheadHardBre"...