Index: libcfa/src/concurrency/clib/cfathread.cfa
===================================================================
--- libcfa/src/concurrency/clib/cfathread.cfa	(revision c9603315ea21ea420cca7496661da95111be0209)
+++ libcfa/src/concurrency/clib/cfathread.cfa	(revision 45444c3fd70b6b54538ca16b790d78e084e0822e)
@@ -59,5 +59,5 @@
 	void cfathread_setproccnt( int ncnt ) {
 		assert( ncnt >= 1 );
-		adelete(proc_cnt, procs);
+		adelete( procs );
 
 		proc_cnt = ncnt - 1;
Index: libcfa/src/stdlib.cfa
===================================================================
--- libcfa/src/stdlib.cfa	(revision c9603315ea21ea420cca7496661da95111be0209)
+++ libcfa/src/stdlib.cfa	(revision 45444c3fd70b6b54538ca16b790d78e084e0822e)
@@ -58,6 +58,7 @@
 
 forall( dtype T | sized(T) | { void ^?{}( T & ); } )
-void adelete( size_t dim, T arr[] ) {
+void adelete( T arr[] ) {
 	if ( arr ) {										// ignore null
+		size_t dim = malloc_size( arr ) / sizeof( T );
 		for ( int i = dim - 1; i >= 0; i -= 1 ) {		// reverse allocation order, must be unsigned
 			^(arr[i]){};								// run destructor
@@ -68,6 +69,7 @@
 
 forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } )
-void adelete( size_t dim, T arr[], Params rest ) {
+void adelete( T arr[], Params rest ) {
 	if ( arr ) {										// ignore null
+		size_t dim = malloc_size( arr ) / sizeof( T );
 		for ( int i = dim - 1; i >= 0; i -= 1 ) {		// reverse allocation order, must be unsigned
 			^(arr[i]){};								// run destructor
Index: libcfa/src/stdlib.hfa
===================================================================
--- libcfa/src/stdlib.hfa	(revision c9603315ea21ea420cca7496661da95111be0209)
+++ libcfa/src/stdlib.hfa	(revision 45444c3fd70b6b54538ca16b790d78e084e0822e)
@@ -263,6 +263,6 @@
 // Cforall allocation/deallocation and constructor/destructor, array types
 forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * anew( size_t dim, Params p );
-forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( size_t dim, T arr[] );
-forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) void adelete( size_t dim, T arr[], Params rest );
+forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( T arr[] );
+forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) void adelete( T arr[], Params rest );
 
 //---------------------------------------
