mizvekov marked an inline comment as done.
mizvekov added inline comments.

================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:559
+  // Get the resolved template arguments from the canonical type.
+  // FIXME: Handle the as-written arguments so the sugar is not lost.
+  ArrayRef<TemplateArgument> PResolved =
----------------
rsmith wrote:
> Does this matter on the `P` side? (Can we remove this FIXME?)
Even though P sugar is not relevant to the deduced type, it is relevant to 
diagnostics when there is a deduction failure. This has been relevant in the 
other parts of this patch, so I don't see why we would not at least want to 
preserve it here, though it might be too much trouble to be worth the effort.

I will keep the comment for now, if we have any discussion where it becomes 
clear there would be no difference here, I will make a one line NFC and remove 
it.


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:561
+  ArrayRef<TemplateArgument> PResolved =
+      TP->getCanonicalTypeInternal()
+          ->castAs<TemplateSpecializationType>()
----------------
rsmith wrote:
> Can we avoid using the `Internal` version here? (The only difference is 
> whether we preserve top-level qualifiers that are outside any type sugar.)
> 
> Might also be worth a comment here explaining that we're going to the 
> canonical type first here to step over any alias templates.
The Internal version is more convenient because TP is a `Type *` not a 
`QualType`, so the suggestion as you have written would not work.

Removing the alias template would be handled by `getUnqualifiedDesugaredType`, 
above, which my understanding is that will remove all top level sugar.

But I see that I went all this way around to preserving the non-canonical TP 
but all I needed really from it was the templateName, which probably is always 
the same as the canonical one, though not sure if that is by design.

I just made a change to get the canonical type on TP above instead, and we can 
circle back to this later.


================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:571-573
+  // FIXME: Should not lose sugar here.
+  if (const auto *SA = dyn_cast<TemplateSpecializationType>(
+          UA->getCanonicalTypeInternal())) {
----------------
rsmith wrote:
> I think we can retain type sugar here without too much effort.
That does not work, blows up some 80 tests.
I will leave the FIXME and circle back to this after I am done with my pile of 
patches.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D110216

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to