On Sun, Sep 20, 2015 at 1:44 PM, Felix Berger <f...@google.com> wrote:
> flx added inline comments.
>
> ================
> Comment at: clang-tidy/misc/MoveConstructorInitCheck.cpp:38
> @@ +37,3 @@
> +      Node.isTriviallyCopyableType(Finder->getASTContext()) ||
> +      classHasTrivialCopyAndDestroy(Node)) {
> +    return false;
> ----------------
> aaron.ballman wrote:
>> Why do you need classHasTrivialCopyAndDestroy() when you're already checking 
>> if it's a trivially copyable type?
> We also want to catch types that have non-trivial destructors which would be 
> executed when the temporary copy goes out of scope.

Yes, but why the requirement to check the triviality of the copy
twice? It seems to me that classHasTrivialCopyAndDestroy isn't really
a type trait that we want to expose the way you have. It should be a
private implementation detail of isExpensiveToCopy(), at which point
you can pull out the duplicated check for the triviality of the copy
constructor.

>
> ================
> Comment at: clang-tidy/misc/MoveConstructorInitCheck.cpp:44
> @@ +43,3 @@
> +
> +int parmVarDeclRefExprOccurences(const ParmVarDecl &MovableParam,
> +                                 const CXXConstructorDecl &ConstructorDecl,
> ----------------
> aaron.ballman wrote:
>> Should return unsigned, please.
> Done. Is this an llvm convention?

I don't think it's an official one, but it resolves some type mismatch
issues with your code, which simplifies things.

>
> ================
> Comment at: clang-tidy/misc/MoveConstructorInitCheck.cpp:120
> @@ +119,3 @@
> +  }
> +  diag(InitArg->getLocStart(), "value parameter can be moved to avoid 
> copy.");
> +}
> ----------------
> alexfh wrote:
>> alexfh wrote:
>> > aaron.ballman wrote:
>> > > Perhaps: "argument can be moved to avoid a copy" instead?
>> > nit: Please remove the trailing period.
>> Does anything stop us from suggesting fixes here (inserting "std::move()" 
>> around the argument and #include <utility>, if it's no there yet)?
> How would I tread in the IncludeOrder style (i.e. Google vs LLVM)? Should 
> this be a flag shared by all of ClangTidy or specific to this check?
>
> ================
> Comment at: test/clang-tidy/misc-move-constructor-init.cpp:85
> @@ +84,3 @@
> +  Movable& operator =(const Movable&) = default;
> +  ~Movable() {}
> +};
> ----------------
> aaron.ballman wrote:
>> Why not = default?
> We need to make the type non-trivially copyable by our definition above.

Oh, derp. I was expecting that to be on the copy operations, not on
the destructor. Sorry for the noise. :-)

~Aaron

>
> ================
> Comment at: test/clang-tidy/misc-move-constructor-init.cpp:113
> @@ +112,3 @@
> +
> +struct NegativeParamTriviallyCopyable {
> +  NegativeParamTriviallyCopyable(TriviallyCopyable T) : T_(T) {}
> ----------------
> aaron.ballman wrote:
>> Should also have a test for scalars
> Added.
>
>
> http://reviews.llvm.org/D12839
>
>
>
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to