[cfe-commits] [PATCH] [VCPP] Add __ptr64 qualifier

Aaron Ballman aaron at aaronballman.com
Thu Nov 8 15:53:01 PST 2012


Apologies, I stand corrected in two ways; you're right that we do need
to distinguish for name mangling, and we need it for code generation
as well it seems.

// Code
  int *p = 0x0;
  int * __ptr64 p2 = p;

// Assembly
; 12   :   int *p = 0x0;

mov DWORD PTR _p$[ebp], 0

; 13   :   int * __ptr64 p2 = p;

mov eax, DWORD PTR _p$[ebp]
cdq
mov DWORD PTR _p2$[ebp], eax
mov DWORD PTR _p2$[ebp+4], edx

So yes, we do need to track the type attribute fully in order to
support it properly.  Regardless, pravic's patch moves us in the right
direction for mangling 64-bit native pointers (sans type attributes).
It seems like we could accept that patch, possibly add a few XFAIL
test cases for the __ptr32 and __ptr64 findings, and deal with the
type attribute in the future.

~Aaron

On Thu, Nov 8, 2012 at 6:19 PM, Charles Davis <cdavis5x at gmail.com> wrote:
>
> On Nov 8, 2012, at 2:33 PM, Aaron Ballman wrote:
>
>> I finally had the chance to dig a bit deeper into this...
>>
>> I'm not certain we'd need to do anything aside from fix 64-bit
>> mangling of pointers, truth be told.  From looking at the
>> documentation, it seems those type attributes are ignored on Windows.
>> It doesn't appear that cl mangles them identically, regardless of
>> target architecture (including ARM).
> So which is it? Are they ignored or not? From the looks of it...
>>
>> Namely:
>> // Code
>> int * __ptr32 p32;
>> int * __ptr64 p64;
>>
>> // Assembly
>> PUBLIC ?p32@@3PAHA ; p32
>> PUBLIC ?p64@@3PEAHEA ; p64
>>
>> Those mangled names are the same when I compile for x86, x64 and ARM,
>> so empirical testing seems to agree with documented behavior from
>> MSDN.
> ...I'd say not, because their mangled names are clearly different.
>>
>> Basically, I think we can parse and eat __ptr64 and __ptr32, and
>> simply mangle as proper for the native architecture and be fine.
> But if a program uses explicit `__ptr32` or `__ptr64`, we won't be fine because the names will get mangled wrong. This--this right here--is exactly why I held off on implementing this.
>
> Chip
>



More information about the cfe-commits mailing list