diff -r 153d0cafc1fd -r fc91c4a3dfe2 src/SemanticAnalysis.cpp --- a/src/SemanticAnalysis.cpp Sat Aug 04 23:26:49 2012 -0700 +++ b/src/SemanticAnalysis.cpp Sat Aug 04 23:58:23 2012 -0700 @@ -1267,6 +1267,7 @@ if (!desctable) return; + Vector composedList; StructureBufferBuilder builder; Local type(zone_); @@ -1289,9 +1290,24 @@ return; desctable->set(zone_, i, desc); + + if (type->isStruct() || type->isArray()) { + if (!composedList.append(i)) + return; + } } - Local map(zone_, StructMap::New(zone_, builder)); + Local composed(zone_); + if (composedList.length()) { + composed = FixedArray::New(zone_, composedList.length(), Heap::Tenure_Old); + if (!composed) + return; + + for (unsigned i = 0; i < composedList.length(); i++) + composed->set(zone_, i, desctable->at(i)); + } + + Local map(zone_, StructMap::New(zone_, builder, composed)); if (!map) return;