klimek added inline comments.

================
Comment at: clang-tidy/modernize/LoopConvertCheck.cpp:556-557
@@ -555,1 +555,4 @@
         DerefByValue = true;
+        // We can assume that we have at least one Usage, because
+        // usagesAreConst() returned false.
+        QualType Type = Usages[0].Expression->getType().getCanonicalType();
----------------
I'd add (non-const):
... we have at least one (non-const) Usage...

================
Comment at: clang-tidy/modernize/LoopConvertCheck.cpp:658-663
@@ -646,7 +657,8 @@
+      IsTriviallyCopyable = BeginPointeeType.isTriviallyCopyableType(*Context);
     } else {
       // Check for qualified types to avoid conversions from non-const to const
       // iterator types.
       if (!Context->hasSameType(CanonicalInitVarType, CanonicalBeginType))
         return;
     }
 
----------------
Can you add a comment what FixerKind is in the else, so it's obvious why we 
don't want to do anything else in here?

================
Comment at: clang-tidy/modernize/LoopConvertCheck.cpp:667
@@ -654,1 +666,3 @@
+        Nodes.getNodeAs<QualType>(DerefByValueResultName);
+    DerefByValue = DerefByValueType != nullptr;
     if (!DerefByValue) {
----------------
Btw, upstream style is to just use implicit null checks; probably not something 
you wrote, but good to change while we're at it.

================
Comment at: clang-tidy/modernize/LoopConvertCheck.h:28-44
@@ -27,18 +27,19 @@
 private:
   void doConversion(ASTContext *Context, const VarDecl *IndexVar,
                     const VarDecl *MaybeContainer, StringRef ContainerString,
                     const UsageResult &Usages, const DeclStmt *AliasDecl,
                     bool AliasUseRequired, bool AliasFromForInit,
                     const ForStmt *TheLoop, bool ContainerNeedsDereference,
-                    bool DerefByValue, bool DerefByConstRef);
+                    bool DerefByValue, bool IsTriviallyCopyable,
+                    bool DerefByConstRef);
 
   StringRef checkRejections(ASTContext *Context, const Expr *ContainerExpr,
                             const ForStmt *TheLoop);
 
   void findAndVerifyUsages(ASTContext *Context, const VarDecl *LoopVar,
                            const VarDecl *EndVar, const Expr *ContainerExpr,
                            const Expr *BoundExpr,
                            bool ContainerNeedsDereference, bool DerefByValue,
-                           bool DerefByConstRef, const ForStmt *TheLoop,
-                           LoopFixerKind FixerKind);
+                           bool IsTriviallyCopyable, bool DerefByConstRef,
+                           const ForStmt *TheLoop, LoopFixerKind FixerKind);
   std::unique_ptr<TUTrackingInfo> TUInfo;
----------------
I find it somewhat distressing that the variable order is completely different. 
Perhaps it's time to pull out a struct that encapsulates the specific 
attributes of the loop (the bools)?


http://reviews.llvm.org/D12675



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

Reply via email to