Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision f1b1e4c22ee1c825678ab38142bbcf3879708434)
+++ src/ResolvExpr/Resolver.cc	(revision b8387fc8ca24532e742d4fde5db500c521dbb36f)
@@ -531,7 +531,6 @@
 			assert( dynamic_cast< VariableExpr * >( arr ) );
 			assert( arr && arr->get_results().size() == 1 );
-			ArrayType * arrType = dynamic_cast< ArrayType * >( arr->get_results().front() );
-			assert( arrType );
-			type = arrType->get_base();
+			type = InitTweak::getPointerBase( arr->get_results().front() );
+			assert( type );
 		} else {
 			// otherwise, constructing a plain object, which means the object's address is being taken.
@@ -557,6 +556,33 @@
 		impCtorDtorStmt->get_callStmt()->accept( *this );
 
-		// and reset type qualifiers after resolving
-		type->get_qualifiers() = qualifiers;
+		// reset type qualifiers, but first need to figure out where everything is again
+		// because the expressions are often changed by the resolver.
+		callExpr = InitTweak::getCtorDtorCall( impCtorDtorStmt );
+		assert( callExpr );
+		constructee = InitTweak::getCallArg( callExpr, 0 );
+		if ( ApplicationExpr * plusExpr = dynamic_cast< ApplicationExpr * >( constructee ) ) {
+			// constructee is <array>+<index>
+			// get Variable <array>, then get the base type of the VariableExpr - this is the type that needs to be fixed
+			Expression * arr = InitTweak::getCallArg( plusExpr, 0 );
+			assert( dynamic_cast< VariableExpr * >( arr ) );
+			assert( arr && arr->get_results().size() == 1 );
+			type = InitTweak::getPointerBase( arr->get_results().front() );
+			assert( type );
+			type->get_qualifiers() = qualifiers;
+		} else {
+			// otherwise constructing a plain object
+			// replace qualifiers on AddressExpr and on inner VariableExpr
+			assert( constructee->get_results().size() == 1 );
+			AddressExpr * addrExpr = dynamic_cast< AddressExpr * > ( constructee );
+			assert( addrExpr );
+			type = InitTweak::getPointerBase( addrExpr->get_results().front() );
+			assert( type );
+			type->get_qualifiers() = qualifiers;
+
+			VariableExpr * varExpr = dynamic_cast< VariableExpr * >( addrExpr->get_arg() );
+			assert( varExpr && varExpr->get_results().size() == 1 );
+			type = varExpr->get_results().front();
+			type->get_qualifiers() = qualifiers;
+		}
 	}
 } // namespace ResolvExpr
