r197184 - [-cxx-abi microsoft] Mangle reference temporaries

David Majnemer david.majnemer at gmail.com
Thu Dec 12 16:44:46 PST 2013


Reverted in r197192, getting this dependent on being able to mangle
anonymous entities in general.


On Thu, Dec 12, 2013 at 3:56 PM, Richard Smith <richard at metafoo.co.uk>wrote:

> Using the mangled name of the variable for its lifetime-extended
> temporaries doesn't sound right to me. Given:
>
>   int n;
>   int &&r = +n;
>
> Clang generates:
>
>   @"\01?r@@3$$QEAHEA" = global i32* null, align 8
>   @"\01?r@@3$$QEAHEA1" = private global i32 0, align 4
>
> ... where the latter is the lifetime-extended temporary, with a suspicious
> mangling.
>
>
> Given:
>
>   int &&r = 0;
>
> Clang asserts:
>
>   Global variable initializer type does not match global variable type!
>   i32** @"\01?r@@3$$QEAHEA"
>   Broken module found, compilation aborted!
>
>
> On Thu, Dec 12, 2013 at 3:12 PM, David Majnemer <david.majnemer at gmail.com>wrote:
>
>> Author: majnemer
>> Date: Thu Dec 12 17:12:01 2013
>> New Revision: 197184
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=197184&view=rev
>> Log:
>> [-cxx-abi microsoft] Mangle reference temporaries
>>
>> They are mangled the same as normal references, nothing special is going
>> on here.
>>
>> Modified:
>>     cfe/trunk/lib/AST/MicrosoftMangle.cpp
>>     cfe/trunk/test/CodeGenCXX/mangle-ms.cpp
>>
>> Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=197184&r1=197183&r2=197184&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
>> +++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Thu Dec 12 17:12:01 2013
>> @@ -2040,10 +2040,9 @@ void MicrosoftMangleContextImpl::mangleC
>>  }
>>
>>  void MicrosoftMangleContextImpl::mangleReferenceTemporary(const VarDecl
>> *VD,
>> -                                                          raw_ostream &)
>> {
>> -  unsigned DiagID = getDiags().getCustomDiagID(DiagnosticsEngine::Error,
>> -    "cannot mangle this reference temporary yet");
>> -  getDiags().Report(VD->getLocation(), DiagID);
>> +                                                          raw_ostream
>> &Out) {
>> +  MicrosoftCXXNameMangler mangler(*this, Out);
>> +  mangler.mangle(VD);
>>  }
>>
>>  void MicrosoftMangleContextImpl::mangleStaticGuardVariable(const VarDecl
>> *VD,
>>
>> Modified: cfe/trunk/test/CodeGenCXX/mangle-ms.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/mangle-ms.cpp?rev=197184&r1=197183&r2=197184&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/CodeGenCXX/mangle-ms.cpp (original)
>> +++ cfe/trunk/test/CodeGenCXX/mangle-ms.cpp Thu Dec 12 17:12:01 2013
>> @@ -445,3 +445,10 @@ decltype(a) fun(decltype(a) x, decltype(
>>  // CHECK-DAG: ?fun at PR18022@@YA?AU<unnamed-type-a>@1 at U21@0 at Z
>>
>>  }
>> +
>> +// Binding to a bit-field that requires a temporary.
>> +struct { int bitfield : 3; } object_with_bitfield = { 3 };
>> +const int &reference_to_bitfield = object_with_bitfield.bitfield;
>> +// CHECK-DAG: ?object_with_bitfield@
>> @3U<unnamed-type-object_with_bitfield>@@A
>> +// CHECK-DAG: ?reference_to_bitfield@@3ABHB
>> +// CHECK-DAG: ??__Ereference_to_bitfield@@YAXXZ
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131212/4bc9156e/attachment.html>


More information about the cfe-commits mailing list