Artem-B wrote:

> This has a lot of unfortable effects that limit using address spaces in C++ 
> as well
> as making it more difficult to work with.

Can you give some examples? 

It sounds that what you really want is for address space qualifiers to not be 
part of a type signature. OpenCL sort of happens to avoid that by sticking 
`__generic` AS qualifier on all pointers without one, and thus make plain 
pointers *become* `__generic` ones, which gets some C++ code happy, but that 
does look like a quirk of OpenCL. Normally, we a) do not have an explicit 
generic AS (or it would be indistinguishable from a plain pointer as it is on 
LLVM level w/ AS(0)), and b) when we specialize a function with an AS-specific 
pointer type, we generally do want it to be that type.

Clang and C++ indeed still have issues with AS-qualified pointers.
E.g. attempts to define function overloads with `AS(0)` and plain pointers 
result in an error about conflicting name mangling: 
https://godbolt.org/z/fW3dP4an5

Yet C++ does not consider the types equivalent, so you can't pass plain pointer 
as AS(0)-qualified argument and vice versa: https://godbolt.org/z/K4PEv9e7j 

It's a bug that needs fixing, IMO. We either treat unqualified ans AS(0) 
pointer types as different, and give them different mangling. Or we should 
treat AS(0) and plain pointer types the same, diagnose AS0/plain overloads as 
redefinitions (no need to wait til we run into mangling conflict) and allow 
using them interchangeably.

Would straightening this out help with the issue you're trying to solve?

https://github.com/llvm/llvm-project/pull/115777
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to