Index: src/InitTweak/GenInit.cc
===================================================================
--- src/InitTweak/GenInit.cc	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/InitTweak/GenInit.cc	(revision 9c791ddf2c2ea0de4b5c1338cd0581fa3dfaa4cc)
@@ -162,7 +162,7 @@
 						// but it seems reasonable at the moment for this to be done by makeArrayFunction
 						// itself
-						assert( ctor.size() == 1 );
-						assert( dtor.size() == 1 );
-						objDecl->set_init( new ConstructorInit( new ImplicitCtorDtorStmt( ctor.front() ), new ImplicitCtorDtorStmt( dtor.front() ), objDecl->get_init() ) );
+						assert( ctor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( ctor.front() ) );
+						assert( dtor.size() == 1 && dynamic_cast< ImplicitCtorDtorStmt * >( dtor.front() ) );
+						objDecl->set_init( new ConstructorInit( ctor.front(), dtor.front(), objDecl->get_init() ) );
 					} else {
 						// array came with an initializer list: initialize each element
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 4e06c1ebfdf762654ec91b9a78bae607f25fba19)
+++ src/InitTweak/InitTweak.cc	(revision 9c791ddf2c2ea0de4b5c1338cd0581fa3dfaa4cc)
@@ -66,8 +66,15 @@
 		} else if ( CompoundStmt * compoundStmt = dynamic_cast< CompoundStmt * >( stmt ) ) {
 			// could also be a compound statement with a loop, in the case of an array
-			assert( compoundStmt->get_kids().size() == 2 ); // loop variable and loop
-			ForStmt * forStmt = dynamic_cast< ForStmt * >( compoundStmt->get_kids().back() );
-			assert( forStmt && forStmt->get_body() );
-			return getCtorDtorCall( forStmt->get_body() );
+			if( compoundStmt->get_kids().size() == 2 ) {
+				// loop variable and loop
+				ForStmt * forStmt = dynamic_cast< ForStmt * >( compoundStmt->get_kids().back() );
+				assert( forStmt && forStmt->get_body() );
+				return getCtorDtorCall( forStmt->get_body() );
+			} else if ( compoundStmt->get_kids().size() == 1 ) {
+				// should be the call statement, but in any case there's only one option
+				return getCtorDtorCall( compoundStmt->get_kids().front() );
+			} else {
+				assert( false && "too many statements in compoundStmt for getCtorDtorCall" );
+			}
 		} if ( ImplicitCtorDtorStmt * impCtorDtorStmt = dynamic_cast< ImplicitCtorDtorStmt * > ( stmt ) ) {
 			return getCtorDtorCall( impCtorDtorStmt->get_callStmt() );
