aaron.ballman added inline comments.

================
Comment at: test/clang-tidy/cert-dcl21-cpp.cpp:1
+// RUN: %check_clang_tidy %s cert-dcl21-cpp %t
+
----------------
xazax.hun wrote:
> aaron.ballman wrote:
> > alexfh wrote:
> > > As usual, please add tests with macros and templates with multiple 
> > > instantiations. When diagnostics in macros are ignored, the tests should 
> > > demonstrate this as well.
> > In addition to these tests, I'd like to see a test for the following:
> > ```
> > struct S {};
> > typedef S& SRef;
> > 
> > SRef operator++(SRef, int);
> > 
> > struct T {
> >   typedef T& TRef;
> >   
> >   TRef operator++(int);
> > };
> > 
> > struct U {
> >   typedef const U& ConstURef;
> >   
> >   ConstURef& operator++(int); // There's an extra ref shoved on here for 
> > fun.
> > };
> > 
> > struct V {
> >   V *operator++(int);
> >   V *const operator--(int);
> > };
> > ```
> I added those test cases.
> 
> I choose not to warn about primitive and pointer types since it makes no 
> sense to make them const. Do you agree?
> 
> Unfortunately, the current fixits might use the underlying type instead of 
> the typedef. Is that a blocker for this to be commited?
> In same cases it is not possible to preserve the typedef, e.g. when the 
> underlying type is a reference. (Or we need to insert a 
> `std::remove_reference` meta call).
> 
> In one case the const is not added. This is because the underlying type is 
> already const. Rewriting the fixit is not trivial, because it is not easy to 
> get the source range for the whole return type. Unfortunately, 
> `getReturnTypeSourceRange` ignores the qualifiers. 
> I choose not to warn about primitive and pointer types since it makes no 
> sense to make them const. Do you agree?

I think that's reasonable behavior, yes.

> Unfortunately, the current fixits might use the underlying type instead of 
> the typedef. Is that a blocker for this to be commited?

That's what I was wondering about. You may want to simply disable the fixit if 
the underlying type is a typedef (or alias, etc).

> In same cases it is not possible to preserve the typedef, e.g. when the 
> underlying type is a reference. (Or we need to insert a std::remove_reference 
> meta call).

Yes, I think it's a complex problem that doesn't need to be solved right now.

> In one case the const is not added. This is because the underlying type is 
> already const. Rewriting the fixit is not trivial, because it is not easy to 
> get the source range for the whole return type. Unfortunately, 
> getReturnTypeSourceRange ignores the qualifiers.

That is unfortunate, but I don't think it's a deal-breaker, either.


https://reviews.llvm.org/D32743



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

Reply via email to