diff --git a/gen/arrays.cpp b/gen/arrays.cpp index 36c0c519..40a476fc 100644 --- a/gen/arrays.cpp +++ b/gen/arrays.cpp @@ -284,7 +284,11 @@ LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit) } // get elem type - Type* elemty = arrty->nextOf(); + Type* elemty; + if (arrty->ty == Tvector) + elemty = static_cast(arrty)->elementType(); + else + elemty = arrty->nextOf(); LLType* llelemty = i1ToI8(voidToI8(DtoType(elemty))); // true if array elements differ in type, can happen with array of unions @@ -349,12 +353,17 @@ LLConstant* DtoConstArrayInitializer(ArrayInitializer* arrinit) if (mismatch) constarr = LLConstantStruct::getAnon(gIR->context(), initvals); // FIXME should this pack? else - constarr = LLConstantArray::get(LLArrayType::get(llelemty, arrlen), initvals); + { + if (arrty->ty == Tvector) + constarr = llvm::ConstantVector::get(initvals); + else + constarr = LLConstantArray::get(LLArrayType::get(llelemty, arrlen), initvals); + } // std::cout << "constarr: " << *constarr << std::endl; // if the type is a static array, we're done - if (arrty->ty == Tsarray) + if (arrty->ty == Tsarray || arrty->ty == Tvector) return constarr; // we need to make a global with the data, so we have a pointer to the array diff --git a/tests/d2/dmd-testsuite b/tests/d2/dmd-testsuite index 30adf906..c0e3bc88 160000 --- a/tests/d2/dmd-testsuite +++ b/tests/d2/dmd-testsuite @@ -1 +1 @@ -Subproject commit 30adf9062bbc7a128e78fa7067aa419d8d2341a5 +Subproject commit c0e3bc88b75f45ede9690d3e99133366c81255ed