diff --git a/vala/valaarraytype.vala b/vala/valaarraytype.vala
index 040df21..9a795f2 100644
--- a/vala/valaarraytype.vala
+++ b/vala/valaarraytype.vala
@@ -188,6 +188,10 @@ public class Vala.ArrayType : ReferenceType {
 			return false;
 		}
 
+		if (element_type.nullable != target_array_type.element_type.nullable) {
+			return false;
+		}
+
 		if (element_type.compatible (target_array_type.element_type)
 		    && target_array_type.element_type.compatible (element_type)) {
 			return true;
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 8aee796..c352e61 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -844,7 +844,12 @@ public class Vala.Parser : CodeVisitor {
 			var expr = parse_object_creation_expression (begin, member);
 			return expr;
 		} else {
+			bool is_pointer_type = false;
 			while (accept (TokenType.STAR)) {
+				is_pointer_type = true;
+			}
+			if (!is_pointer_type) {
+				accept (TokenType.INTERR);
 			}
 			if (accept (TokenType.OPEN_BRACKET)) {
 				rollback (begin);
@@ -898,8 +903,15 @@ public class Vala.Parser : CodeVisitor {
 		expect (TokenType.NEW);
 		var member = parse_member_name ();
 		DataType element_type = UnresolvedType.new_from_expression (member);
+		bool is_pointer_type = false;
 		while (accept (TokenType.STAR)) {
 			element_type = new PointerType (element_type, get_src (begin));
+			is_pointer_type = true;
+		}
+		if (!is_pointer_type) {
+			if (accept (TokenType.INTERR)) {
+				element_type.nullable = true;
+			}
 		}
 		expect (TokenType.OPEN_BRACKET);
 
