Index: translator/ResolvExpr/Resolver.cc
===================================================================
--- translator/ResolvExpr/Resolver.cc	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
+++ translator/ResolvExpr/Resolver.cc	(revision 6c3744ea42a3b5b7c0caad3216f7a909daf8e9ed)
@@ -246,9 +246,25 @@
 	    singleInit->set_value( newExpr );
 	} // if
-	singleInit->get_value()->accept( *this );
+//	singleInit->get_value()->accept( *this );
     }
 
     void Resolver::visit( ListInit *listInit ) {
-	// no cast necessary
+	if ( ArrayType *at = dynamic_cast<ArrayType*>(initContext) ) {
+	    initContext = at->get_base();
+	    Visitor::visit( listInit );
+	} else if ( StructInstType *st = dynamic_cast<StructInstType*>(initContext) ) {
+	    StructDecl *baseStruct = st->get_baseStruct();
+	    std::list<Declaration *>::iterator iter1( baseStruct->get_members().begin() );
+	    std::list<Initializer *>::iterator iter2( listInit->begin_initializers() );
+	    for ( ; iter1 != baseStruct->get_members().end() && iter2 != listInit->end_initializers() ; ++iter1, ++iter2 ) {
+		DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *iter1 );
+		initContext = dt->get_type();
+		(*iter2)->accept( *this );
+	    }
+	} else if ( UnionInstType *st = dynamic_cast<UnionInstType*>(initContext) ) {
+	    DeclarationWithType *dt = dynamic_cast<DeclarationWithType *>( *st->get_baseUnion()->get_members().begin() );
+	    initContext = dt->get_type();
+	    (*listInit->begin_initializers())->accept( *this );
+	} // if
     }
 } // namespace ResolvExpr
