[llvm] [ArrayRef] Relax iterator_range constructor (NFC) (PR #205183)

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 23 12:50:48 PDT 2026


================
@@ -372,15 +331,51 @@ TEST(ArrayRefTest, ArrayRefFromIteratorRange) {
     EXPECT_EQ(A1[i], A3[i]);
 }
 
+TEST(ArrayRefTest, ArrayConstRefIteratorConstRange) {
+  const int A1[] = {42, -5, 0, 1000000, -1000000, 0};
+  ArrayRef<const int> A2 = make_range(&A1[0], &A1[5]);
+
+  EXPECT_EQ(5ull, A2.size());
+  for (std::size_t i = 0; i < A2.size(); ++i)
+    EXPECT_EQ(A1[i], A2[i]);
+}
+
 TEST(ArrayRefTest, ArrayRefFromIteratorConstRange) {
   const int A1[] = {42, -5, 0, 1000000, -1000000, 0};
+  ArrayRef<int> A2 = make_range(&A1[0], &A1[5]);
+
+  EXPECT_EQ(5ull, A2.size());
+  for (std::size_t i = 0; i < A2.size(); ++i)
+    EXPECT_EQ(A1[i], A2[i]);
+}
+
+TEST(ArrayRefTest, ArrayConstRefFromIteratorRange) {
+  int A1[] = {42, -5, 0, 1000000, -1000000, 0};
   ArrayRef<const int> A2 = make_range(&A1[0], &A1[5]);
 
   EXPECT_EQ(5ull, A2.size());
   for (std::size_t i = 0; i < A2.size(); ++i)
     EXPECT_EQ(A1[i], A2[i]);
 }
 
+struct TestBase {
+  int M;
+  TestBase(int M) : M(M) {}
+};
+
+struct TestDerived : public TestBase {
+  TestDerived(int M) : TestBase(M) {}
----------------
fhahn wrote:

IIRC the guard was intended to guard against cases like below, but perhaps there's a better way to restrict undesired conversions. I think with the change the test below will fail

```suggestion
  int Extra;
  TestDerived(int M) : TestBase(M), Extra(0) {}
```



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


More information about the llvm-commits mailing list