[clang-tools-extra] [clang-tidy] Add readability-use-span-first-last check (PR #118074)

via cfe-commits cfe-commits at lists.llvm.org
Wed Dec 11 13:48:32 PST 2024


================
@@ -120,3 +120,30 @@ void test_ranges() {
   // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: prefer 'span::last()' over 'subspan()'
   // CHECK-FIXES: auto sub2 = s.last(n);
 }
+
+void test_different_spans() {
+  int arr1[] = {1, 2, 3, 4, 5};
+  int arr2[] = {6, 7, 8, 9, 10};
+  std::span<int> s1(arr1, 5);
+  std::span<int> s2(arr2, 5);
+
+  // These should NOT trigger warnings as they use size() from a different span
+  auto sub1 = s1.subspan(s2.size() - 2);     // No warning
+  auto sub2 = s2.subspan(s1.size() - 3);     // No warning
+  
+  // Also check with std::ranges::size
+  auto sub3 = s1.subspan(std::ranges::size(s2) - 2);  // No warning
+  auto sub4 = s2.subspan(std::ranges::size(s1) - 3);  // No warning
+
+  // Mixed usage should also not trigger
+  auto sub5 = s1.subspan(s2.size() - s1.size());      // No warning
+  
+  // Verify that correct usage still triggers warnings
+  auto good1 = s1.subspan(s1.size() - 2);
+  // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer 'span::last()' over 'subspan()'
+  // CHECK-FIXES: auto good1 = s1.last(2);
+  
+  auto good2 = s2.subspan(std::ranges::size(s2) - 3);
+  // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer 'span::last()' over 'subspan()'
+  // CHECK-FIXES: auto good2 = s2.last(3);
+}
----------------
EugeneZelenko wrote:

Please add newline.

https://github.com/llvm/llvm-project/pull/118074


More information about the cfe-commits mailing list