Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 40e636a3e71c878c7a10447ffe19e38fab7a8677)
+++ src/ResolvExpr/Resolver.cc	(revision 73bf8cf2602dc17f80562a5cac0b8c71ae1bcd8a)
@@ -54,5 +54,4 @@
 		virtual void visit( BranchStmt *branchStmt );
 		virtual void visit( ReturnStmt *returnStmt );
-		virtual void visit( ImplicitCtorDtorStmt * impCtorDtorStmt );
 
 		virtual void visit( SingleInit *singleInit );
@@ -436,6 +435,6 @@
 
 	void Resolver::visit( ListInit * listInit ) {
-		InitIterator iter = listInit->begin_initializers();
-		InitIterator end = listInit->end_initializers();
+		InitIterator iter = listInit->begin();
+		InitIterator end = listInit->end();
 
 		if ( ArrayType * at = dynamic_cast< ArrayType * >( initContext ) ) {
@@ -539,50 +538,8 @@
 			ctorInit->set_ctor( NULL );
 		}
-		if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_ctor() ) ) {
+		if ( InitTweak::isInstrinsicSingleArgCallStmt( ctorInit->get_dtor() ) ) {
 			delete ctorInit->get_dtor();
 			ctorInit->set_dtor( NULL );
 		}
-	}
-
-	void Resolver::visit( ImplicitCtorDtorStmt * impCtorDtorStmt ) {
-		// before resolving ctor/dtor, need to remove type qualifiers from the first argument (the object being constructed).
-		// Do this through a cast expression to greatly simplify the code.
-		Expression * callExpr = InitTweak::getCtorDtorCall( impCtorDtorStmt );
-		assert( callExpr );
-		Expression *& constructee = InitTweak::getCallArg( callExpr, 0 );
-
-		// the first argument will always be &<expr>
-		AddressExpr * addrExpr = dynamic_cast< AddressExpr * > ( constructee );
-		assert( addrExpr );
-
-		// need to find the type of the first argument. In the case of an array,
-		// need to remove one ArrayType layer from the type for each subscript expression.
-		Expression * addressee = addrExpr->get_arg();
-		int numLayers = 0;
-		while ( UntypedExpr * untypedExpr = dynamic_cast< UntypedExpr * >( addressee ) ) {
-			assert( InitTweak::getFunctionName( untypedExpr ) == "?[?]" );
-			addressee = InitTweak::getCallArg( untypedExpr, 0 );
-			numLayers++;
-		}
-		assert( addressee->get_results().size() == 1 );
-		Type * type = addressee->get_results().front();
-		for ( int i = 0; i < numLayers; i++ ) {
-			type = InitTweak::getPointerBase( type );
-			assert( type && "Expected pointer or array type. May have generated too many ?[?] calls." );
-		}
-
-		// cast to T* with qualifiers removed.
-		// unfortunately, lvalue is considered a qualifier. For AddressExpr to resolve, its argument
-		// must have an lvalue qualified type, so remove all qualifiers except lvalue. If we ever
-		// remove lvalue as a qualifier, this can change to
-		//   type->get_qualifiers() = Type::Qualifiers();
-		assert( type );
-		type = type->clone();
-		type->get_qualifiers() -= Type::Qualifiers(true, true, true, false, true, true);
-		type = new PointerType( Type::Qualifiers(), type );
-		constructee = new CastExpr( constructee, type );
-
-		// finally, resolve the ctor/dtor
-		impCtorDtorStmt->get_callStmt()->accept( *this );
 	}
 } // namespace ResolvExpr
