Index: src/Parser/InitializerNode.cc
===================================================================
--- src/Parser/InitializerNode.cc	(revision b3c36f41fb2d199b6fa2a40962f5aafe79f7ceeb)
+++ src/Parser/InitializerNode.cc	(revision e4d829bf54d5191b9e826c8c7fc40b7c7c7bc768)
@@ -74,30 +74,27 @@
 
 	InitializerNode *moreInit;
-	if  ( get_next() != 0 && ((moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) != 0) )
+	if ( (moreInit = dynamic_cast< InitializerNode * >( get_next() ) ) ) {
 		moreInit->printOneLine( os );
+	}
 }
 
 Initializer *InitializerNode::build() const {
 	if ( aggregate ) {
+		// steal designators from children
+		std::list< Designation * > designlist;
+		InitializerNode * child = next_init();
+		for ( ; child != nullptr; child = dynamic_cast< InitializerNode * >( child->get_next() ) ) {
+			std::list< Expression * > desList;
+			buildList< Expression, ExpressionNode >( child->designator, desList );
+			designlist.push_back( new Designation( desList ) );
+		} // for
 		std::list< Initializer * > initlist;
 		buildList< Initializer, InitializerNode >( next_init(), initlist );
-
-		std::list< Expression * > designlist;
-
-		if ( designator != 0 ) {
-			buildList< Expression, ExpressionNode >( designator, designlist );
-		} // if
-
 		return new ListInit( initlist, designlist, maybeConstructed );
 	} else {
-		std::list< Expression * > designators;
-
-		if ( designator != 0 )
-			buildList< Expression, ExpressionNode >( designator, designators );
-
-		if ( get_expression() != 0)
-			return new SingleInit( maybeBuild< Expression >( get_expression() ), designators, maybeConstructed );
+		if ( get_expression() != 0) {
+			return new SingleInit( maybeBuild< Expression >( get_expression() ), maybeConstructed );
+		}
 	} // if
-
 	return 0;
 }
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision b3c36f41fb2d199b6fa2a40962f5aafe79f7ceeb)
+++ src/Parser/TypeData.cc	(revision e4d829bf54d5191b9e826c8c7fc40b7c7c7bc768)
@@ -760,5 +760,5 @@
 		if ( cur->has_enumeratorValue() ) {
 			ObjectDecl * member = dynamic_cast< ObjectDecl * >(* members);
-			member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ), list< Expression * >() ) );
+			member->set_init( new SingleInit( maybeMoveBuild< Expression >( cur->consume_enumeratorValue() ) ) );
 		} // if
 	} // for
