v.g.vassilev added a comment.

In D110216#3038826 <https://reviews.llvm.org/D110216#3038826>, @mizvekov wrote:

> In D110216#3038797 <https://reviews.llvm.org/D110216#3038797>, @v.g.vassilev 
> wrote:
>
>> Over the years we had some interest from people but never actually got 
>> implemented. Here 
>> <https://lists.llvm.org/pipermail/llvm-dev/2020-March/140054.html> were some 
>> ideas @rsmith and I discussed over the years. If that is helpful, let me 
>> know if I should dig a bit more into private email exchange.
>
> Sure, that is helpful :)
>
> There is other lower hanging fruit where we are losing sugar, and it would be 
> a shame if we implemented this but then did not get much benefit from it 
> because the sugar never got into the template argument in the first place.
>
> One such example is that we do not mark as 'elaborate' types which are 
> written bare, without any scope specifiers.
>
> So for example in a case like this:
>
>   namespace foo {
>     struct Foo {};
>     Foo x = 0;
>   };
>
> We would still diagnose that assignment with the type of the variable printed 
> as 'foo::Foo' instead of just 'Foo', as it was written, because the parser 
> will have produced a type that is not wrapped in an ElaboratedType (or 
> perhaps some other cheaper mechanism).

Handling that case is nice. I am more interested in retaining the sugar in 
template instantiations as it is essential for an optimization in our I/O 
system which uses clang as a library. If implement the instantiation diagnostic 
we can get rid of several hacky patches: 
https://github.com/vgvassilev/clang/commit/d87e2bbc8a266e295ee5a2065f1e587b325d4284
 
https://github.com/vgvassilev/clang/commit/fcc492fcab14e8b8dc156688dda6f237a04563a7
 and 
https://github.com/vgvassilev/clang/commit/fe17b953325530267643f3391bfd59ac1519ef39



================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:1414
       TDF &= ~TDF_TopLevelParameterTypeList;
-      if (isForwardingReference(Param, 0) && Arg->isLValueReferenceType())
-        Param = Param->getPointeeType();
+      if (isForwardingReference(P, 0) && A->isLValueReferenceType())
+        P = P->getPointeeType();
----------------



================
Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:1777
               S, TemplateParams, NTTP, Noexcept, S.Context.BoolTy,
-              /*ArrayBound*/true, Info, Deduced);
+              /*ArrayBound*/ true, Info, Deduced);
 
----------------



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