================
@@ -17,3 +20,55 @@ bool good_all_of() {
       return false;
   return true;
 }
+
+std::vector<int> get_dummy_vec();
+
+bool good_any_of_temporary_vector() {
+  // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 
'std::ranges::any_of()'
+  for (int i : get_dummy_vec())
+    if (i)
+      return true;
+  return false;
+}
+
+bool good_all_of_temporary_vector() {
+  // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 
'std::ranges::all_of()'
+  for (int i : get_dummy_vec())
+    if (i)
+      return false;
+  return true;
+}
+
+bool any_of_initializer_list(int a, int b, int c) {
+  // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 
'std::ranges::any_of()'
+  // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range 
directly in the replacement may be unsafe; consider materializing it in a local 
variable first
+  for (const auto i : {a, b, c})
+    if (i == 0)
+      return true;
+  return false;
+}
+
+bool all_of_initializer_list(int a, int b, int c) {
+  // CHECK-MESSAGES: :[[@LINE+2]]:3: warning: replace loop by 
'std::ranges::all_of()'
+  // CHECK-MESSAGES: :[[@LINE+1]]:23: note: reusing the temporary range 
directly in the replacement may be unsafe; consider materializing it in a local 
variable first
+  for (const auto i : {a, b, c})
+    if (i == 0)
+      return false;
+  return true;
+}
+
+bool good_any_of_explicit_initializer_list(int a, int b, int c) {
+  // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 
'std::ranges::any_of()'
+  for (const auto i : std::initializer_list<int>{a, b, c})
+    if (i == 0)
+      return true;
+  return false;
+}
+
+bool good_all_of_explicit_initializer_list(int a, int b, int c) {
+  // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: replace loop by 
'std::ranges::all_of()'
+  for (const auto i : std::initializer_list<int>{a, b, c})
+    if (i == 0)
+      return false;
+  return true;
----------------
zeyi2 wrote:

> These should have a note too

Thanks! Added.

> maybe thats the return false that didn't work that you mentioned.

After some trying, the missing notes are because of `IgnoreParenImpCasts()` vs 
`IgnoreParenCasts()`.

Also, `return false` will actually not emit any notes for range-init (e.g. both 
`{a, b, c}` and `std::initializer_list<int>{a,b,c}`). I believe this is against 
what we want.

https://github.com/llvm/llvm-project/pull/185791
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to