hokein added inline comments.

================
Comment at: clang-tidy/cppcoreguidelines/SlicingCheck.cpp:48
@@ +47,3 @@
+
+  // Assignement slicing: "a = b;" and "a = std::move(b);" variants.
+  const auto SlicesObjectInAssignment =
----------------
courbet wrote:
> hokein wrote:
> > Looks like you are missing some cases here, like assigning a Subclass 
> > object from a function call to a Baseclass object, passing a Subclass 
> > object to a function whose parameter is a BaseClass.
> > 
> > But I think it's fine to implement in a separate patch, but you'd better to 
> > add a TODO here.
> > 
> > ```
> > SubClass f1();
> > BaseClass a = f1();
> > 
> > void f1(BaseClass a);
> > SubClass sc;
> > f1(sc);
> > ```
> Actually these will still create a CXXConstructExpr in the AST, e.g for case 
> (2):
> 
> ```
> CallExpr 0x3d6e560 </usr/local/google/home/courbet/test2.cc:10:3, col:6> 
> 'void'
> |-ImplicitCastExpr 0x3d6e548 <col:3> 'void (*)(class A)' 
> <FunctionToPointerDecay>
> | `-DeclRefExpr 0x3d6e4f8 <col:3> 'void (class A)' lvalue Function 0x3d66550 
> 'g' 'void (class A)'
> `-CXXConstructExpr 0x3d6e5c8 <col:5> 'class A' 'void (const class A &) 
> throw()'
>   `-ImplicitCastExpr 0x3d6e5b0 <col:5> 'const class A' lvalue <NoOp>
>     `-ImplicitCastExpr 0x3d6e590 <col:5> 'class A' lvalue <DerivedToBase (A)>
>       `-DeclRefExpr 0x3d6e4d0 <col:5> 'class B' lvalue Var 0x3d6e300 'b' 
> 'class B'
> ```
> 
> I alreagy have a test to case (2) and I've added one for case (1).
> 
Oh, I see it now. Sorry for missing them and thanks for explanation.  It'd be 
more clear to if you can update comments at `SlicesObjectInCtor`.

================
Comment at: clang-tidy/cppcoreguidelines/SlicingCheck.cpp:85
@@ +84,3 @@
+           "slicing object from type %0 to %1 discards override %2")
+          << &DerivedDecl << &BaseDecl << Method;
+    }
----------------
Maybe alexfh@ has idea about this. Output multiple warning messages in a same 
location is not the pattern of clang-tidy message. I think we should combine 
three message into exact one, something like `"slicing object from type 'B' to 
'A' discards override 'f', 'g', 4*sizeof(char) bytes of state"`.



================
Comment at: docs/clang-tidy/checks/cppcoreguidelines-slicing.rst:24
@@ +23,2 @@
+https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c145-access-polymorphic-objects-through-pointers-and-references
+
----------------
There is an extra blank line at the bottom.

================
Comment at: test/clang-tidy/cppcoreguidelines-slicing.cpp:95
@@ +94,3 @@
+  // Derived type overrides methods, but these methods are not in the base 
type,
+  // so cannot be called accidentally. Righ tnow this triggers, but we might
+  // want to allow it.
----------------
s/tnow/now


http://reviews.llvm.org/D21992



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

Reply via email to