Make the modernize-loop-convert's const-detection smarter.
Summary:
Now, it detects that several kinds of usages are can't modify the elements. Examples:
-When an usage is a call to a const member function or operator of the element.
-If the element is used as an argument to a function or constructor that takes a const-reference or a value.
-LValue to RValue conversion, if the element is a fundamental type (which allows the use of most of the builtin operators).
Reviewers: klimek
Subscribers: cfe-commits, alexfh
Differential Revision: http://reviews.llvm.org/D14198
llvm-svn: 251808
diff --git a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-lowercase.cpp b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-lowercase.cpp
index a8081db..5f5c224 100644
--- a/clang-tools-extra/test/clang-tidy/modernize-loop-convert-lowercase.cpp
+++ b/clang-tools-extra/test/clang-tidy/modernize-loop-convert-lowercase.cpp
@@ -14,21 +14,21 @@
printf("%d\n", arr[i]);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead [modernize-loop-convert]
- // CHECK-FIXES: for (int & elem : arr)
+ // CHECK-FIXES: for (int elem : arr)
// CHECK-FIXES-NEXT: printf("%d\n", elem);
for (int i = 0; i < n; ++i) {
printf("%d\n", nums[i]);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & num : nums)
+ // CHECK-FIXES: for (int num : nums)
// CHECK-FIXES-NEXT: printf("%d\n", num);
for (int i = 0; i < n; ++i) {
printf("%d\n", nums_[i]);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & num : nums_)
+ // CHECK-FIXES: for (int num : nums_)
// CHECK-FIXES-NEXT: printf("%d\n", num);
int num = 0;
@@ -36,7 +36,7 @@
printf("%d\n", nums[i] + num);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & elem : nums)
+ // CHECK-FIXES: for (int elem : nums)
// CHECK-FIXES-NEXT: printf("%d\n", elem + num);
int elem = 0;
@@ -44,7 +44,7 @@
printf("%d\n", nums[i] + num + elem);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & nums_i : nums)
+ // CHECK-FIXES: for (int nums_i : nums)
// CHECK-FIXES-NEXT: printf("%d\n", nums_i + num + elem);
int nums_i = 0;
@@ -52,7 +52,7 @@
printf("%d\n", nums[i] + num + elem + nums_i);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & nums_elem : nums)
+ // CHECK-FIXES: for (int nums_elem : nums)
// CHECK-FIXES-NEXT: printf("%d\n", nums_elem + num + elem + nums_i);
int nums_elem = 0;
@@ -60,7 +60,7 @@
printf("%d\n", nums[i] + num + elem + nums_i + nums_elem);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & give_me_name_0 : nums)
+ // CHECK-FIXES: for (int give_me_name_0 : nums)
// CHECK-FIXES-NEXT: printf("%d\n", give_me_name_0 + num + elem + nums_i + nums_elem);
int give_me_name_0 = 0;
@@ -68,7 +68,7 @@
printf("%d\n", nums[i] + num + elem + nums_i + nums_elem + give_me_name_0);
}
// CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & give_me_name_1 : nums)
+ // CHECK-FIXES: for (int give_me_name_1 : nums)
// CHECK-FIXES-NEXT: printf("%d\n", give_me_name_1 + num + elem + nums_i + nums_elem + give_me_name_0);
int nums_j = 0;
@@ -79,7 +79,7 @@
}
// CHECK-MESSAGES: :[[@LINE-5]]:3: warning: use range-based for loop instead
// CHECK-MESSAGES: :[[@LINE-5]]:5: warning: use range-based for loop instead
- // CHECK-FIXES: for (int & give_me_name_0 : nums)
- // CHECK-FIXES: for (int & give_me_name_1 : nums)
+ // CHECK-FIXES: for (int give_me_name_0 : nums)
+ // CHECK-FIXES: for (int give_me_name_1 : nums)
// CHECK-FIXES-NEXT: printf("%d\n", give_me_name_0 + give_me_name_1 + num + elem + nums_i + nums_j + nums_elem);
}