eandrews added a comment.

In D69950#1771340 <https://reviews.llvm.org/D69950#1771340>, @mstorsjo wrote:

> In D69950#1771133 <https://reviews.llvm.org/D69950#1771133>, @eandrews wrote:
>
> > In D69950#1770138 <https://reviews.llvm.org/D69950#1770138>, @mstorsjo 
> > wrote:
> >
> > > This (when reapplied in 
> > > https://reviews.llvm.org/rG878a24ee244a24c39d1c57e9af2) broke compilation 
> > > of code that earlier built fine. A reduced example:
> > >
> > >   namespace glslang {
> > >   class TPoolAllocator {
> > >     void operator=(TPoolAllocator);
> > >   };
> > >   template <class> class a {
> > >     TPoolAllocator *b;
> > >     void c() { allocator = *b; }
> > >     TPoolAllocator allocator;
> > >   };
> > >   } // namespace glslang
> > >
> >
> >
> > With this patch, some errors in templates are diagnosed earlier (i.e. does 
> > not wait till instantiation). Since 'allocator' and 'b' aren't dependent, I 
> > think this is a valid diagnosis. GCC throws an error on this code upon 
> > instantiation. https://godbolt.org/z/X9Y-Vy
>
>
> The original non-reduced case does build fine with GCC though (I'm fairly 
> sure). I can try to reduce one later that still builds with GCC but fails 
> with current clang.


Yes. The reduced example here builds fine with GCC as well, unless template is 
instantiated. However I don't think Clang always matches GCC behavior when 
diagnosing errors in templates (See example from cpplearner here - 
https://reviews.llvm.org/D61027). Clang diagnoses several errors even if 
template is not instantiated (unlike GCC).  I am not sure what the 'correct' 
behavior is / whether we should match GCC here. @erichkeane @rnk could you 
please take a look?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69950



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

Reply via email to