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
