[PATCH] D59988: [PR41276] Generate address space cast of 'this' for objects attributed by an address space in C++

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri May 3 13:01:24 PDT 2019


rjmccall added inline comments.


================
Comment at: test/CodeGenCXX/address-space-of-this.cpp:9
+//CHECK: call void @_ZN6MyTypeC1Ei(%struct.MyType* addrspacecast (%struct.MyType addrspace(10)* @m to %struct.MyType*), i32 123)
+MyType __attribute__((address_space(10))) m = 123;
----------------
Anastasia wrote:
> rjmccall wrote:
> > Sorry I didn't catch this before, but I don't see why this test is expected to work.  We can't actually pass a pointer in address space 10 to that constructor.
> Ok, I have created a bug to follow up on this issues:
> https://bugs.llvm.org/show_bug.cgi?id=41730
> 
> It seems that the check is missing here for allowing the address space conversions implicitly, but I am afraid if I add it now addr spaces will become less usable because implicit conversions can't be setup by the target yet. And everyone is using no address space as some sort of `__generic` but unofficially. :(
> 
> I have some thoughts about adding something like `__generic` address space to C++ that can either be resolved by the compiler or supported by HW. I think it might help to implement those cases correctly without modifying too much of code base. I just struggled to find enough bandwidth to send an RFC but I will try to progress on this asap.
> Ok, I have created a bug to follow up on this issues:

Thanks.

> It seems that the check is missing here for allowing the address space conversions implicitly, but I am afraid if I add it now addr spaces will become less usable because implicit conversions can't be setup by the target yet. And everyone is using no address space as some sort of __generic but unofficially. :(

As far as I'm concerned, address-space support in the C++ feature set is all still extremely experimental and there are no real users that we have to worry about making things less useful for.  The right thing for the basic model is for constructors to only work when the object is being constructed in an address space that's convertible to the address space of the constructor.  Languages with a `__generic` superspace (whether implemented with dynamic selection or cloning or anything else) can consider making it the default address space of constructors, but that's not something we should be pushing in the basic model.


Repository:
  rC Clang

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

https://reviews.llvm.org/D59988





More information about the cfe-commits mailing list