[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