aaron.ballman added a comment.

In D151087#4363503 <https://reviews.llvm.org/D151087#4363503>, @ebevhan wrote:

> In D151087#4362059 <https://reviews.llvm.org/D151087#4362059>, @aaron.ballman 
> wrote:
>
>> Based on all this, I think we should go with `__addrspace_cast` as a named 
>> cast and not allow the conversion through `reinterpret_cast` unless going 
>> to/from a `[u]intptr_t`.
>
> I think this sounds good. Most of the building blocks for it should already 
> be in place in the form of OpenCL's addrspace_cast. It would remove 
> reinterpret_cast's ability to perform safe conversions, though. Could that 
> affect something else inadvertently? ICS or SCS?
>
> There are other C++ casts that deal with address spaces today. static_cast 
> can also do it when converting from a void pointer, for example. Should it 
> also lose the ability?

I think this is another design approach we could consider -- splitting the 
functionality out between the various C++ named casts.

According to the TR, we should know at compile time which address spaces exist 
and whether space B is a subset of space A or whether they're disjoint. There 
can be implicit conversions from A to B if A is a subset of B, but it might not 
be bit-pattern preserving. That's similar to a derived-to-base conversion. 
`static_cast` can reverse implicit conversions, so it could be used to reverse 
the A->B conversion. It'd be undefined behavior if the pointer isn't 
representable in A's address space, but that's also the same as a 
base-to-derived conversion when the object doesn't have a derived type. For 
disjoint conversions of A to B, static_cast should fail (and perhaps C-style 
casts should as well -- there's no meaningful conversion between disjoint 
address spaces). And then `dynamic_cast` could be used for doing reverse 
implicit conversions that can detect invalid conversion attempts and throw an 
exception/return a nullptr. `reinterpret_cast` could then be used for 
bit-pattern preserving same-sized casts so it remains a bitcast operation.

(This idea came via a different WG21 member I was also discussing this topic 
with.)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151087/new/

https://reviews.llvm.org/D151087

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to