On Fri, Nov 21, 2014 at 2:41 PM, Richard Smith <[email protected]> wrote:
> Looks like MSVC also supports u8 string literals. > Looks like it! Done in r222591. > > On Fri, Nov 21, 2014 at 11:57 AM, David Majnemer <[email protected] > > wrote: > >> Author: majnemer >> Date: Fri Nov 21 13:57:25 2014 >> New Revision: 222564 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=222564&view=rev >> Log: >> MS ABI: Mangle char16_t and char32_t string literals >> >> We previously had support for char and wchar_t string literals. VS 2015 >> added support for char16_t and char32_t. >> >> String literals must be mangled in the MS ABI in order for them to be >> deduplicated across translation units: their linker has no notion of >> mergeable section. Instead, they use the mangled name to make a COMDAT >> for the string literal; the COMDAT will merge with other COMDATs in >> other object files. >> >> This allows strings in object files generated by clang to get merged >> with strings in object files generated by MSVC. >> >> Modified: >> cfe/trunk/lib/AST/MicrosoftMangle.cpp >> cfe/trunk/test/CodeGenCXX/mangle-ms-string-literals.cpp >> >> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=222564&r1=222563&r2=222564&view=diff >> >> ============================================================================== >> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original) >> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Fri Nov 21 13:57:25 2014 >> @@ -338,9 +338,7 @@ bool MicrosoftMangleContextImpl::shouldM >> >> bool >> MicrosoftMangleContextImpl::shouldMangleStringLiteral(const >> StringLiteral *SL) { >> - return SL->isAscii() || SL->isWide(); >> - // TODO: This needs to be updated when MSVC gains support for Unicode >> - // literals. >> + return SL->isAscii() || SL->isWide() || SL->isUTF16() || SL->isUTF32(); >> } >> >> void MicrosoftCXXNameMangler::mangle(const NamedDecl *D, StringRef >> Prefix) { >> @@ -2439,14 +2437,10 @@ void MicrosoftMangleContextImpl::mangleS >> Mangler.getStream() << "\01??_C@_"; >> >> // <char-type>: The "kind" of string literal is encoded into the >> mangled name. >> - // TODO: This needs to be updated when MSVC gains support for unicode >> - // literals. >> - if (SL->isAscii()) >> - Mangler.getStream() << '0'; >> - else if (SL->isWide()) >> + if (SL->isWide()) >> Mangler.getStream() << '1'; >> else >> - llvm_unreachable("unexpected string literal kind!"); >> + Mangler.getStream() << '0'; >> >> // <literal-length>: The next part of the mangled name consists of the >> length >> // of the string. >> @@ -2569,7 +2563,10 @@ void MicrosoftMangleContextImpl::mangleS >> unsigned NumCharsToMangle = std::min(32U, SL->getLength()); >> for (unsigned I = 0, E = NumCharsToMangle * SL->getCharByteWidth(); I >> != E; >> ++I) >> - MangleByte(GetBigEndianByte(I)); >> + if (SL->isWide()) >> + MangleByte(GetBigEndianByte(I)); >> + else >> + MangleByte(GetLittleEndianByte(I)); >> >> // Encode the NUL terminator if there is room. >> if (NumCharsToMangle < 32) >> >> Modified: cfe/trunk/test/CodeGenCXX/mangle-ms-string-literals.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms-string-literals.cpp?rev=222564&r1=222563&r2=222564&view=diff >> >> ============================================================================== >> --- cfe/trunk/test/CodeGenCXX/mangle-ms-string-literals.cpp (original) >> +++ cfe/trunk/test/CodeGenCXX/mangle-ms-string-literals.cpp Fri Nov 21 >> 13:57:25 2014 >> @@ -719,3 +719,7 @@ const wchar_t *LongWideString = L"012345 >> // CHECK: @"\01??_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@ >> " >> const wchar_t *UnicodeLiteral = L"\ud7ff"; >> // CHECK: @"\01??_C@_13IIHIAFKH@?W?$PP?$AA?$AA@" >> +const char16_t *U16Literal = u"hi"; >> +// CHECK: @"\01??_C@_05OMLEGLOC@h?$AAi?$AA?$AA?$AA@" >> +const char32_t *U32Literal = U"hi"; >> +// CHECK: @"\01??_C@_0M@GFNAJIPG >> @h?$AA?$AA?$AAi?$AA?$AA?$AA?$AA?$AA?$AA?$AA@" >> >> >> _______________________________________________ >> cfe-commits mailing list >> [email protected] >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
