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