jhuber6 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?
> 
> Stuff like this is mostly what I'm talking about 
> https://godbolt.org/z/1K8KGdqe9. I previously wanted to relax the handling of 
> the default address space for all targets, but that made @AlexVlx unhappy in 
> #112248. It's not it not being the type signature, it's more just having 
> default conversion rules. The case I provided with the template is just an 
> edge case that this changes away from C++, which is a little weird.

Honestly I would prefer to just have an option that lets `DefaultAS` work as 
the generic one... Then we wouldn't have the weirdness that templates suddenly 
stop working because all pointers are `void __generic *`

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