[PATCH] D64400: [OpenCL][PR42390] Deduce addr space for templ specialization

John McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 10 10:21:53 PDT 2019


rjmccall added inline comments.


================
Comment at: lib/Sema/SemaType.cpp:7421
+      // - template specialization as addr space in template argument doesn't
+      //   affect specialization.
+      (T->isDependentType() && (!T->isPointerType() && !T->isReferenceType() &&
----------------
Anastasia wrote:
> rjmccall wrote:
> > I don't understand what you're saying here.  Why does inference depend on whether the type is a template specialization?  And what does this have to do with template arguments?  Also, address spaces in template arguments are definitely part of the template argument and affect which specialization you're naming.
> What I am trying to say here is that an address space of a template argument isn't used as an address space of a template specialization and therefore we can deduce the address space of a template specialization since it's not going to be provided during the template instantiation.
> 
> Let's say we have specialization `MyClass<T>`. The address space of `T` has nothing to do with the address space of `MyClass<T>`. They are different. Therefore if the address space of `MyClass<T>` is not provided explicitly it is ok to deduce it.
> 
> Does it make sense?
Of course the address space of `T` has nothing to do with the address space of `MyClass<T>`, but that's true of literally every type, and you don't need to add special cases checking for specific type spellings.

Why don't you just never infer address spaces on dependent types and then infer them as necessary during instantiation?  Why is it important to infer address spaces on any dependent type in the template pattern?


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

https://reviews.llvm.org/D64400





More information about the cfe-commits mailing list