diff options
Diffstat (limited to 'llvm/unittests/ADT/ArrayRefTest.cpp')
| -rw-r--r-- | llvm/unittests/ADT/ArrayRefTest.cpp | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/llvm/unittests/ADT/ArrayRefTest.cpp b/llvm/unittests/ADT/ArrayRefTest.cpp index f9c98a5..9cd17f0 100644 --- a/llvm/unittests/ADT/ArrayRefTest.cpp +++ b/llvm/unittests/ADT/ArrayRefTest.cpp @@ -90,4 +90,39 @@ TEST(ArrayRefTest, ConstConvert) {    a = ArrayRef<int *>(A);  } +struct A { +  int data; + +  A() : data(0) {} +}; + +struct B : A { +  int data2; + +  B() : A(), data2(0) {} +}; + +TEST(ArrayRefTest, UpcastConvert) { +  B Data[5]; + +  for (unsigned i = 0, e = 5; i != e; ++i) { +    Data[i].data = i + 5; +    Data[i].data2 = i + 30; +  } + +  B *DataPtrs[5]; +  for (unsigned i = 0, e = 5; i != e; ++i) { +    DataPtrs[i] = &Data[i]; +  } + +  ArrayRef<B *> BArray(DataPtrs, 5); +  ArrayRef<A *> AArray(BArray); + +  EXPECT_TRUE(AArray.size() == 5); +  for (unsigned i = 0, e = 5; i != e; ++i) { +    A *a = AArray[i]; +    EXPECT_TRUE(a->data == int(i + 5)); +  } +} +  } // end anonymous namespace | 
