Index: libcfa/src/concurrency/io.cfa
===================================================================
--- libcfa/src/concurrency/io.cfa	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ libcfa/src/concurrency/io.cfa	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -295,5 +295,5 @@
 				// make sure the target hasn't stopped existing since last time
 				HELP: if(target < ctxs_count) {
-					// calculate it's age and how young it could be before we give ip on helping
+					// calculate it's age and how young it could be before we give up on helping
 					const __readyQ_avg_t cutoff = calc_cutoff(ctsc, ctx->cq.id, ctxs_count, io.data, io.tscs, __shard_factor.io, false);
 					const __readyQ_avg_t age = moving_average(ctsc, io.tscs[target].t.tv, io.tscs[target].t.ma, false);
Index: libcfa/src/concurrency/io/call.cfa.in
===================================================================
--- libcfa/src/concurrency/io/call.cfa.in	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ libcfa/src/concurrency/io/call.cfa.in	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -89,9 +89,9 @@
 #if defined(CFA_HAVE_PREADV2)
 	struct iovec;
-	extern ssize_t preadv2 (int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+	extern ssize_t preadv2 (int fd, const struct iovec * iov, int iovcnt, off_t offset, int flags);
 #endif
 #if defined(CFA_HAVE_PWRITEV2)
 	struct iovec;
-	extern ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags);
+	extern ssize_t pwritev2(int fd, const struct iovec * iov, int iovcnt, off_t offset, int flags);
 #endif
 
@@ -108,22 +108,22 @@
 	struct msghdr;
 	struct sockaddr;
-	extern ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
-	extern ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
-	extern ssize_t send(int sockfd, const void *buf, size_t len, int flags);
-	extern ssize_t recv(int sockfd, void *buf, size_t len, int flags);
+	extern ssize_t sendmsg(int sockfd, const struct msghdr * msg, int flags);
+	extern ssize_t recvmsg(int sockfd, struct msghdr * msg, int flags);
+	extern ssize_t send(int sockfd, const void * buf, size_t len, int flags);
+	extern ssize_t recv(int sockfd, void * buf, size_t len, int flags);
 
 	extern int fallocate(int fd, int mode, off_t offset, off_t len);
 	extern int posix_fadvise(int fd, off_t offset, off_t len, int advice);
-	extern int madvise(void *addr, size_t length, int advice);
-
-	extern int openat(int dirfd, const char *pathname, int flags, mode_t mode);
+	extern int madvise(void * addr, size_t length, int advice);
+
+	extern int openat(int dirfd, const char * pathname, int flags, mode_t mode);
 	extern int close(int fd);
 
-	extern ssize_t read (int fd, void *buf, size_t count);
+	extern ssize_t read (int fd, void * buf, size_t count);
 
 	struct epoll_event;
-	extern int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
-
-	extern ssize_t splice(int fd_in, __off64_t *off_in, int fd_out, __off64_t *off_out, size_t len, unsigned int flags);
+	extern int epoll_ctl(int epfd, int op, int fd, struct epoll_event * event);
+
+	extern ssize_t splice(int fd_in, __off64_t * off_in, int fd_out, __off64_t * off_out, size_t len, unsigned int flags);
 	extern ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
 }
@@ -224,16 +224,18 @@
 calls = [
 	# CFA_HAVE_IORING_OP_READV
-	Call('READV', 'ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags)', {
+	Call('READV', 'ssize_t preadv2(int fd, const struct iovec * iov, int iovcnt, off_t offset, int flags)', {
 		'fd'  : 'fd',
+		'addr': '(typeof(sqe->addr))iov',
+		'len' : 'iovcnt',
 		'off' : 'offset',
-		'addr': '(uintptr_t)iov',
-		'len' : 'iovcnt',
+		'rw_flags' : 'flags'
 	}, define = 'CFA_HAVE_PREADV2'),
 	# CFA_HAVE_IORING_OP_WRITEV
-	Call('WRITEV', 'ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, off_t offset, int flags)', {
+	Call('WRITEV', 'ssize_t pwritev2(int fd, const struct iovec * iov, int iovcnt, off_t offset, int flags)', {
 		'fd'  : 'fd',
+		'addr': '(typeof(sqe->addr))iov',
+		'len' : 'iovcnt',
 		'off' : 'offset',
-		'addr': '(uintptr_t)iov',
-		'len' : 'iovcnt'
+		'rw_flags' : 'flags'
 	}, define = 'CFA_HAVE_PWRITEV2'),
 	# CFA_HAVE_IORING_OP_FSYNC
@@ -242,9 +244,9 @@
 	}),
 	# CFA_HAVE_IORING_OP_EPOLL_CTL
-	Call('EPOLL_CTL', 'int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)', {
+	Call('EPOLL_CTL', 'int epoll_ctl(int epfd, int op, int fd, struct epoll_event * event)', {
 		'fd': 'epfd',
+		'len': 'op',
 		'addr': 'fd',
-		'len': 'op',
-		'off': '(uintptr_t)event'
+		'off': '(typeof(sqe->off))event'
 	}),
 	# CFA_HAVE_IORING_OP_SYNC_FILE_RANGE
@@ -256,28 +258,28 @@
 	}),
 	# CFA_HAVE_IORING_OP_SENDMSG
-	Call('SENDMSG', 'ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags)', {
-		'fd': 'sockfd',
-		'addr': '(uintptr_t)(struct msghdr *)msg',
+	Call('SENDMSG', 'ssize_t sendmsg(int sockfd, const struct msghdr * msg, int flags)', {
+		'fd': 'sockfd',
+		'addr': '(typeof(sqe->addr))(struct msghdr *)msg',
 		'len': '1',
 		'msg_flags': 'flags'
 	}),
 	# CFA_HAVE_IORING_OP_RECVMSG
-	Call('RECVMSG', 'ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags)', {
-		'fd': 'sockfd',
-		'addr': '(uintptr_t)(struct msghdr *)msg',
+	Call('RECVMSG', 'ssize_t recvmsg(int sockfd, struct msghdr * msg, int flags)', {
+		'fd': 'sockfd',
+		'addr': '(typeof(sqe->addr))(struct msghdr *)msg',
 		'len': '1',
 		'msg_flags': 'flags'
 	}),
 	# CFA_HAVE_IORING_OP_SEND
-	Call('SEND', 'ssize_t send(int sockfd, const void *buf, size_t len, int flags)', {
-		'fd': 'sockfd',
-		'addr': '(uintptr_t)buf',
+	Call('SEND', 'ssize_t send(int sockfd, const void * buf, size_t len, int flags)', {
+		'fd': 'sockfd',
+		'addr': '(typeof(sqe->addr))buf',
 		'len': 'len',
 		'msg_flags': 'flags'
 	}),
 	# CFA_HAVE_IORING_OP_RECV
-	Call('RECV', 'ssize_t recv(int sockfd, void *buf, size_t len, int flags)', {
-		'fd': 'sockfd',
-		'addr': '(uintptr_t)buf',
+	Call('RECV', 'ssize_t recv(int sockfd, void * buf, size_t len, int flags)', {
+		'fd': 'sockfd',
+		'addr': '(typeof(sqe->addr))buf',
 		'len': 'len',
 		'msg_flags': 'flags'
@@ -286,6 +288,6 @@
 	Call('ACCEPT', 'int accept4(int sockfd, __SOCKADDR_ARG addr, socklen_t * restrict addrlen, int flags)', {
 		'fd': 'sockfd',
-		'addr': '(uintptr_t)&addr',
-		'addr2': '(uintptr_t)addrlen',
+		'addr': '(typeof(sqe->addr))&addr',
+		'addr2': '(typeof(sqe->addr2))addrlen',
 		'accept_flags': 'flags'
 	}),
@@ -293,5 +295,5 @@
 	Call('CONNECT', 'int connect(int sockfd, __CONST_SOCKADDR_ARG addr, socklen_t addrlen)', {
 		'fd': 'sockfd',
-		'addr': '(uintptr_t)&addr',
+		'addr': '(typeof(sqe->addr))&addr',
 		'off': 'addrlen'
 	}),
@@ -299,7 +301,7 @@
 	Call('FALLOCATE', 'int fallocate(int fd, int mode, off_t offset, off_t len)', {
 		'fd': 'fd',
-		'addr': '(uintptr_t)len',
 		'len': 'mode',
-		'off': 'offset'
+		'off': 'offset',
+		'addr': 'len'
 	}),
 	# CFA_HAVE_IORING_OP_FADVISE
@@ -311,22 +313,22 @@
 	}),
 	# CFA_HAVE_IORING_OP_MADVISE
-	Call('MADVISE', 'int madvise(void *addr, size_t length, int advice)', {
-		'addr': '(uintptr_t)addr',
+	Call('MADVISE', 'int madvise(void * addr, size_t length, int advice)', {
+		'addr': '(typeof(sqe->addr))addr',
 		'len': 'length',
 		'fadvise_advice': 'advice'
 	}),
 	# CFA_HAVE_IORING_OP_OPENAT
-	Call('OPENAT', 'int openat(int dirfd, const char *pathname, int flags, mode_t mode)', {
+	Call('OPENAT', 'int openat(int dirfd, const char * pathname, int flags, mode_t mode)', {
 		'fd': 'dirfd',
-		'addr': '(uintptr_t)pathname',
-		'len': 'mode',
-		'open_flags': 'flags;'
+		'addr': '(typeof(sqe->addr))pathname',
+		'open_flags': 'flags;',
+		'len': 'mode'
 	}),
 	# CFA_HAVE_IORING_OP_OPENAT2
-	Call('OPENAT2', 'int openat2(int dirfd, const char *pathname, struct open_how * how, size_t size)', {
+	Call('OPENAT2', 'int openat2(int dirfd, const char * pathname, struct open_how * how, size_t size)', {
 		'fd': 'dirfd',
-		'addr': 'pathname',
-		'len': 'sizeof(*how)',
-		'off': '(uintptr_t)how',
+		'addr': '(typeof(sqe->addr))pathname',
+		'off': '(typeof(sqe->off))how',
+		'len': 'sizeof(*how)'
 	}, define = 'CFA_HAVE_OPENAT2'),
 	# CFA_HAVE_IORING_OP_CLOSE
@@ -335,15 +337,15 @@
 	}),
 	# CFA_HAVE_IORING_OP_STATX
-	Call('STATX', 'int statx(int dirfd, const char *pathname, int flags, unsigned int mask, struct statx *statxbuf)', {
+	Call('STATX', 'int statx(int dirfd, const char * pathname, int flags, unsigned int mask, struct statx * statxbuf)', {
 		'fd': 'dirfd',
-		'off': '(uintptr_t)statxbuf',
-		'addr': 'pathname',
+		'addr': '(typeof(sqe->addr))pathname',
+		'statx_flags': 'flags',
 		'len': 'mask',
-		'statx_flags': 'flags'
+		'off': '(typeof(sqe->off))statxbuf'
 	}, define = 'CFA_HAVE_STATX'),
 	# CFA_HAVE_IORING_OP_READ
 	Call('READ', 'ssize_t read(int fd, void * buf, size_t count)', {
 		'fd': 'fd',
-		'addr': '(uintptr_t)buf',
+		'addr': '(typeof(sqe->addr))buf',
 		'len': 'count'
 	}),
@@ -351,13 +353,13 @@
 	Call('WRITE', 'ssize_t write(int fd, void * buf, size_t count)', {
 		'fd': 'fd',
-		'addr': '(uintptr_t)buf',
+		'addr': '(typeof(sqe->addr))buf',
 		'len': 'count'
 	}),
 	# CFA_HAVE_IORING_OP_SPLICE
-	Call('SPLICE', 'ssize_t splice(int fd_in, __off64_t *off_in, int fd_out, __off64_t *off_out, size_t len, unsigned int flags)', {
+	Call('SPLICE', 'ssize_t splice(int fd_in, __off64_t * off_in, int fd_out, __off64_t * off_out, size_t len, unsigned int flags)', {
 		'splice_fd_in': 'fd_in',
-		'splice_off_in': 'off_in ? (__u64)*off_in : (__u64)-1',
+		'splice_off_in': 'off_in ? (typeof(sqe->splice_off_in))*off_in : (typeof(sqe->splice_off_in))-1',
 		'fd': 'fd_out',
-		'off': 'off_out ? (__u64)*off_out : (__u64)-1',
+		'off': 'off_out ? (typeof(sqe->off))*off_out : (typeof(sqe->off))-1',
 		'len': 'len',
 		'splice_flags': 'flags'
Index: src/AST/Print.cpp
===================================================================
--- src/AST/Print.cpp	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/AST/Print.cpp	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -369,4 +369,12 @@
 				--indent;
 			}
+		}
+
+		if ( ! node->withExprs.empty() ) {
+			// Not with a clause, but the 'with clause'.
+			++indent;
+			os << " with clause" << endl << indent;
+			printAll( node->withExprs );
+			--indent;
 		}
 
Index: c/Common/Debug.h
===================================================================
--- src/Common/Debug.h	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ 	(revision )
@@ -1,69 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// Debug.h --
-//
-// Author           : Rob Schluntz
-// Created On       : Fri Sep 1 11:09:14 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Dec 13 23:39:42 2019
-// Update Count     : 3
-//
-
-#pragma once
-
-#include <string>
-#include <list>
-#include <iostream>
-
-#include "CodeGen/Generate.h"
-#include "SynTree/LinkageSpec.h"
-#include "SynTree/Declaration.h"
-
-#define DEBUG
-
-namespace Debug {
-	/// debug codegen a translation unit
-	static inline void codeGen( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label, __attribute__((unused)) LinkageSpec::Spec linkageFilter = LinkageSpec::Builtin ) {
-	#ifdef DEBUG
-		std::list< Declaration * > decls;
-
-		filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), [linkageFilter]( Declaration * decl ) {
-			return ! (decl->linkage & linkageFilter);
-		});
-
-		std::cerr << "======" << label << "======" << std::endl;
-		CodeGen::generate(
-			decls,
-			std::cerr,
-			true /* doIntrinsics */,
-			true /* pretty */,
-			false /* generateC */,
-			false /* lineMarks */,
-			true /* printTypeExpr */
-		);
-	#endif
-	} // dump
-
-	static inline void treeDump( __attribute__((unused)) const std::list< Declaration * > & translationUnit, __attribute__((unused)) const std::string & label, __attribute__((unused)) LinkageSpec::Spec linkageFilter = LinkageSpec::Compiler ) {
-	#ifdef DEBUG
-		std::list< Declaration * > decls;
-
-		filter( translationUnit.begin(), translationUnit.end(), back_inserter( decls ), [linkageFilter]( Declaration * decl ) {
-			return ! (decl->linkage & linkageFilter);
-		});
-
-		std::cerr << "======" << label << "======" << std::endl;
-		printAll( decls, std::cerr );
-	#endif
-	} // dump
-}
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: src/Common/module.mk
===================================================================
--- src/Common/module.mk	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/Common/module.mk	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -20,5 +20,4 @@
 	Common/CodeLocationTools.hpp \
 	Common/CodeLocationTools.cpp \
-	Common/Debug.h \
 	Common/DeclStats.hpp \
 	Common/DeclStats.cpp \
Index: src/Common/utility.h
===================================================================
--- src/Common/utility.h	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/Common/utility.h	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -190,11 +190,4 @@
 }
 
-template< typename... Params >
-void warn( const Params & ... params ) {
-	std::cerr << "Warning: ";
-	toString_single( std::cerr, params... );
-	std::cerr << std::endl;
-}
-
 // determines if pref is a prefix of str
 static inline bool isPrefix( const std::string & str, const std::string & pref, unsigned int start = 0 ) {
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/InitTweak/FixInit.cc	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -1233,15 +1233,8 @@
 		}
 
-		template< typename Visitor, typename... Params >
-		void error( Visitor & v, CodeLocation loc, const Params &... params ) {
-			SemanticErrorException err( loc, toString( params... ) );
-			v.errors.append( err );
-		}
-
 		template< typename... Params >
 		void GenStructMemberCalls::emit( CodeLocation loc, const Params &... params ) {
-			// toggle warnings vs. errors here.
-			// warn( params... );
-			error( *this, loc, params... );
+			SemanticErrorException err( loc, toString( params... ) );
+			errors.append( err );
 		}
 
Index: src/InitTweak/FixInitNew.cpp
===================================================================
--- src/InitTweak/FixInitNew.cpp	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/InitTweak/FixInitNew.cpp	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -1303,15 +1303,8 @@
 	}
 
-	template< typename Visitor, typename... Params >
-	void error( Visitor & v, CodeLocation loc, const Params &... params ) {
-		SemanticErrorException err( loc, toString( params... ) );
-		v.errors.append( err );
-	}
-
 	template< typename... Params >
 	void GenStructMemberCalls::emit( CodeLocation loc, const Params &... params ) {
-		// toggle warnings vs. errors here.
-		// warn( params... );
-		error( *this, loc, params... );
+		SemanticErrorException err( loc, toString( params... ) );
+		errors.append( err );
 	}
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/Parser/parser.yy	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Mar 21 19:01:00 2023
-// Update Count     : 5990
+// Last Modified On : Wed Mar 22 21:26:01 2023
+// Update Count     : 6002
 //
 
@@ -270,4 +270,12 @@
 	SemanticError( yylloc, ::toString( "Identifier \"", identifier, "\" cannot appear before a ", kind, ".\n"
 				   "Possible cause is misspelled storage/CV qualifier, misspelled typename, or missing generic parameter." ) );
+} // IdentifierBeforeType
+
+static bool TypedefForall( DeclarationNode * decl ) {
+	if ( decl->type->forall || (decl->type->kind == TypeData::Aggregate && decl->type->aggregate.params) ) {
+		SemanticError( yylloc, "forall qualifier in typedef is currently unimplemented." );
+		return true;
+	} // if
+	return false;
 } // IdentifierBeforeType
 
@@ -1958,7 +1966,7 @@
 	TYPEDEF type_specifier declarator
 		{
-			// if type_specifier is an anon aggregate => name 
 			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "4" );
-			$$ = $3->addType( $2 )->addTypedef();		// watchout frees $2 and $3
+			if ( TypedefForall( $2 ) ) $$ = nullptr;
+			else $$ = $3->addType( $2 )->addTypedef();		// watchout frees $2 and $3
 		}
 	| typedef_declaration pop ',' push declarator
@@ -1970,15 +1978,18 @@
 		{
 			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "6" );
-			$$ = $4->addQualifiers( $1 )->addType( $3 )->addTypedef();
+			if ( TypedefForall( $1 ) ) $$ = nullptr;
+			else $$ = $4->addQualifiers( $1 )->addType( $3 )->addTypedef();
 		}
 	| type_specifier TYPEDEF declarator
 		{
 			typedefTable.addToEnclosingScope( *$3->name, TYPEDEFname, "7" );
-			$$ = $3->addType( $1 )->addTypedef();
+			if ( TypedefForall( $1 ) ) $$ = nullptr;
+			else $$ = $3->addType( $1 )->addTypedef();
 		}
 	| type_specifier TYPEDEF type_qualifier_list declarator
 		{
 			typedefTable.addToEnclosingScope( *$4->name, TYPEDEFname, "8" );
-			$$ = $4->addQualifiers( $1 )->addType( $1 )->addTypedef();
+			if ( TypedefForall( $3 ) ) $$ = nullptr;
+			else $$ = $4->addQualifiers( $1 )->addType( $1 )->addTypedef();
 		}
 	;
Index: src/SynTree/FunctionDecl.cc
===================================================================
--- src/SynTree/FunctionDecl.cc	(revision d30e3ebfc2de91ddf2b472e0097ef737bb4f3654)
+++ src/SynTree/FunctionDecl.cc	(revision 1633e04fded61ee5535ee0c7690a8307e958f33f)
@@ -87,4 +87,10 @@
 	} // if
 
+	if ( !withExprs.empty() ) {
+		os << indent << "... with clause" << std::endl;
+		os << indent + 1;
+		printAll( withExprs, os, indent + 1 );
+	}
+
 	if ( statements ) {
 		os << indent << "... with body" << endl << indent+1;
