Index: src/GenPoly/PolyMutator.cc
===================================================================
--- src/GenPoly/PolyMutator.cc	(revision b16898e15cca72a9db8a280714dbc0100e4abffa)
+++ src/GenPoly/PolyMutator.cc	(revision dcd73d1fd6d9a98ffe2b19ad3bbf30fe9693a678)
@@ -30,9 +30,15 @@
 
 	void PolyMutator::mutateStatementList( std::list< Statement* > &statements ) {
+		SemanticError errors;
+
 		for ( std::list< Statement* >::iterator i = statements.begin(); i != statements.end(); ++i ) {
 			if ( ! stmtsToAddAfter.empty() ) {
 				statements.splice( i, stmtsToAddAfter );
 			} // if
-			*i = (*i)->acceptMutator( *this );
+			try {
+				*i = (*i)->acceptMutator( *this );
+			} catch ( SemanticError &e ) {
+				errors.append( e );
+			} // try
 			if ( ! stmtsToAdd.empty() ) {
 				statements.splice( i, stmtsToAdd );
@@ -42,4 +48,7 @@
 			statements.splice( statements.end(), stmtsToAddAfter );
 		} // if
+		if ( ! errors.isEmpty() ) {
+			throw errors;
+		}
 	}
 
Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision b16898e15cca72a9db8a280714dbc0100e4abffa)
+++ src/InitTweak/GenInit.cc	(revision dcd73d1fd6d9a98ffe2b19ad3bbf30fe9693a678)
@@ -245,5 +245,6 @@
 			// constructed objects cannot be designated
 			if ( isDesignated( objDecl->get_init() ) ) throw SemanticError( "Cannot include designations in the initializer for a managed Object. If this is really what you want, then initialize with @=.", objDecl );
-			// xxx - constructed objects should not have initializers nested too deeply
+			// constructed objects should not have initializers nested too deeply
+			if ( ! checkInitDepth( objDecl ) ) throw SemanticError( "Managed object's initializer is too deep ", objDecl );
 
 			// call into genImplicitCall from Autogen.h to generate calls to ctor/dtor
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision b16898e15cca72a9db8a280714dbc0100e4abffa)
+++ src/InitTweak/InitTweak.cc	(revision dcd73d1fd6d9a98ffe2b19ad3bbf30fe9693a678)
@@ -23,4 +23,25 @@
 		};
 
+		class InitDepthChecker : public Visitor {
+		public:
+			bool depthOkay = true;
+			Type * type;
+			int curDepth = 0, maxDepth = 0;
+			InitDepthChecker( Type * type ) : type( type ) {
+				Type * t = type;
+				while ( ArrayType * at = dynamic_cast< ArrayType * >( t ) ) {
+					maxDepth++;
+					t = at->get_base();
+				}
+				maxDepth++;
+			}
+			virtual void visit( ListInit * listInit ) {
+				curDepth++;
+				if ( curDepth > maxDepth ) depthOkay = false;
+				Visitor::visit( listInit );
+				curDepth--;
+			}
+		};
+
 		class InitFlattener : public Visitor {
 			public:
@@ -53,4 +74,10 @@
 		maybeAccept( init, finder );
 		return finder.hasDesignations;
+	}
+
+	bool checkInitDepth( ObjectDecl * objDecl ) {
+		InitDepthChecker checker( objDecl->get_type() );
+		maybeAccept( objDecl->get_init(), checker );
+		return checker.depthOkay;
 	}
 
Index: src/InitTweak/InitTweak.h
===================================================================
--- src/InitTweak/InitTweak.h	(revision b16898e15cca72a9db8a280714dbc0100e4abffa)
+++ src/InitTweak/InitTweak.h	(revision dcd73d1fd6d9a98ffe2b19ad3bbf30fe9693a678)
@@ -40,4 +40,8 @@
 	/// True if the Initializer contains designations
 	bool isDesignated( Initializer * init );
+
+	/// True if the ObjectDecl's Initializer nesting level is not deeper than the depth of its
+	/// type, where the depth of its type is the number of nested ArrayTypes + 1
+	bool checkInitDepth( ObjectDecl * objDecl );
 
   /// Non-Null if expr is a call expression whose target function is intrinsic
