Assertion failure when a multidimensional array allocated with new operator is explicitly list initialized

Hi All,
I am trying to resolve an assertion failure that occurs for following test code with latest llvm svn trunk code as well.

// PR c++/56772
// { dg-require-effective-target c++11 }

typedef SIZE_TYPE size_t;
void* operator new(size_t, void *p) { return p; }
void f ()
size_t coord [3][3];
new (&coord) size_t [3][3]

int main ()

It appears that storing subinitlist expressions is not taken care in EmitNewArrayInitializer

check this code :-
for (unsigned i = 0, e = ILE->getNumInits(); i != e; ++i) {
// Tell the cleanup that it needs to destroy up to this
// element. TODO: some of these stores can be trivially
// observed to be unnecessary.
if (endOfInit) Builder.CreateStore(explicitPtr, endOfInit);
StoreAnyExprIntoOneUnit(*this, ILE->getInit(i), elementType, explicitPtr);
explicitPtr =Builder.CreateConstGEP1_32(explicitPtr, 1, “”);

I had made a quick fix which was uploaded at

It is not a final solution, but i am hoping it is the right direction.
Could someone please provide me constructive inputs so that i know i am heading in right direction.

Many Thanks!
Jyoti Allur