Index: libcfa/src/collections/array.hfa
===================================================================
--- libcfa/src/collections/array.hfa	(revision 35cc6d4773c9705fbac2d875d39d6aa6120e8f80)
+++ libcfa/src/collections/array.hfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -9,10 +9,15 @@
 
 #ifdef __CFA_DEBUG__
-#define subcheck( arr, sub, lb, ub ) \
-	if ( (sub) < (lb) || (sub) >= (ub) ) \
-		abort( "subscript %ld exceeds dimension range [%d,%zd) for array %p.\n", \
-			   (sub), (lb), (ub), (arr) )
+#define subcheck( arr, sub, len ) \
+	if ( (sub) < 0 || (sub) >= (len) ) \
+		abort( "subscript %ld exceeds dimension range [0,%zd) for array %p.\n", \
+			   (sub), (len), (arr) )
+#define subchecku( arr, sub, len ) \
+	if ( (sub) >= (len) ) \
+		abort( "subscript %ld exceeds dimension range [0,%zd) for array %p.\n", \
+			   (sub), (len), (arr) )
 #else
-#define subcheck( arr, sub, lb, ub ) do {} while (0)
+#define subcheck( arr, sub, len ) do {} while (0)
+#define subchecku( arr, sub, len ) do {} while (0)
 #endif
 
@@ -84,64 +89,54 @@
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, zero_t ) {
-		//assert( 0 < N );
-		subcheck( a, 0L, 0, N );
+		subcheck( a, 0L, N );
 		return (Timmed &)a.strides[0];
 	}
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, one_t ) {
-		//assert( 1 < N );
-		subcheck( a, 1L, 0, N );
+		subcheck( a, 1L, N );
 		return (Timmed &)a.strides[1];
 	}
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, int i ) {
-		//assert( i < N );
-		subcheck( a, (long int)i, 0, N );
+		subcheck( a, (long int)i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline const Timmed & ?[?]( const arpk( N, S, Timmed, Tbase ) & a, int i ) {
-		//assert( i < N );
-		subcheck( a, (long int)i, 0, N );
+		subcheck( a, (long int)i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, unsigned int i ) {
-		//assert( i < N );
-		subcheck( a, (long int)i, 0, N );
+		subchecku( a, (unsigned long int)i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline const Timmed & ?[?]( const arpk( N, S, Timmed, Tbase ) & a, unsigned int i ) {
-		//assert( i < N );
-		subcheck( a, (unsigned long int)i, 0, N );
+		subchecku( a, (unsigned long int)i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, long int i ) {
-		//assert( i < N );
-		subcheck( a, i, 0, N );
+		subcheck( a, i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline const Timmed & ?[?]( const arpk( N, S, Timmed, Tbase ) & a, long int i ) {
-		//assert( i < N );
-		subcheck( a, i, 0, N );
+		subcheck( a, i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline Timmed & ?[?]( arpk( N, S, Timmed, Tbase ) & a, unsigned long int i ) {
-		//assert( i < N );
-		subcheck( a, i, 0, N );
+		subchecku( a, i, N );
 		return (Timmed &)a.strides[i];
 	}
 
 	static inline const Timmed & ?[?]( const arpk( N, S, Timmed, Tbase ) & a, unsigned long int i ) {
-		//assert( i < N );
-		subcheck( a, i, 0, N );
-		return (Timmed &)a.strides[i];
-	}
-
-	static inline size_t ?`len( arpk( N, S, Timmed, Tbase ) & a ) {
+		subchecku( a, i, N );
+		return (Timmed &)a.strides[i];
+	}
+
+	static inline size_t ?`len( arpk( N, S, Timmed, Tbase ) & ) {
 		return N;
 	}
Index: libcfa/src/collections/list.hfa
===================================================================
--- libcfa/src/collections/list.hfa	(revision 35cc6d4773c9705fbac2d875d39d6aa6120e8f80)
+++ libcfa/src/collections/list.hfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -317,5 +317,5 @@
         return true;
 	}
-	static bool validate( dlist(tE, tLinks) & this ) {
+	static inline bool validate( dlist(tE, tLinks) & this ) {
 		return $validate_fwd(this) && $validate_rev(this);
 	}
Index: tests/nowarn/.expect/array.txt
===================================================================
--- tests/nowarn/.expect/array.txt	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
+++ tests/nowarn/.expect/array.txt	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -0,0 +1,1 @@
+done
Index: tests/nowarn/.expect/list.txt
===================================================================
--- tests/nowarn/.expect/list.txt	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
+++ tests/nowarn/.expect/list.txt	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -0,0 +1,1 @@
+done
Index: tests/nowarn/array.cfa
===================================================================
--- tests/nowarn/array.cfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
+++ tests/nowarn/array.cfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -0,0 +1,9 @@
+#include <array.hfa>
+
+void f() {
+    ( array(float, 5) * ) 0p;
+}
+
+int main() {
+    printf( "done\n" );
+}
Index: tests/nowarn/list.cfa
===================================================================
--- tests/nowarn/list.cfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
+++ tests/nowarn/list.cfa	(revision 8ee211d29f63ed8c631e2d37e8961781dfa45eaf)
@@ -0,0 +1,5 @@
+#include <list.hfa>
+
+int main() {
+    printf( "done\n" );
+}
