Index: src/Validate/GenericParameter.cpp
===================================================================
--- src/Validate/GenericParameter.cpp	(revision 132e4c16244e854978eafac175e38d75c985a11a)
+++ src/Validate/GenericParameter.cpp	(revision 6065281f0d80efc8e6e1b435c3186184bfd4916c)
@@ -16,5 +16,4 @@
 #include "GenericParameter.hpp"
 
-#include "AST/Copy.hpp"
 #include "AST/Decl.hpp"
 #include "AST/Expr.hpp"
@@ -165,5 +164,6 @@
 
 struct TranslateDimensionCore :
-		public WithNoIdSymbolTable, public ast::WithGuards {
+		public WithNoIdSymbolTable, public ast::WithGuards,
+		public ast::WithVisitorRef<TranslateDimensionCore> {
 
 	// SUIT: Struct- or Union- InstType
@@ -190,4 +190,7 @@
 
 	const ast::TypeDecl * postvisit( const ast::TypeDecl * decl );
+	const ast::Type * postvisit( const ast::FunctionType * type );
+	const ast::Type * postvisit( const ast::TypeInstType * type );
+
 	const ast::Expr * postvisit( const ast::DimensionExpr * expr );
 	const ast::Expr * postvisit( const ast::Expr * expr );
@@ -195,4 +198,5 @@
 };
 
+// Declaration of type variable: forall( [N] )  ->  forall( N & | sized( N ) )
 const ast::TypeDecl * TranslateDimensionCore::postvisit(
 		const ast::TypeDecl * decl ) {
@@ -206,4 +210,24 @@
 	}
 	return decl;
+}
+
+// Makes postvisit( TypeInstType ) get called on the entries of the function declaration's type's forall list.
+// Pass.impl.hpp's visit( FunctionType ) does not consider the forall entries to be child nodes.
+// Workaround is: during the current TranslateDimension pass, manually visit down there.
+const ast::Type * TranslateDimensionCore::postvisit(
+		const ast::FunctionType * type ) {
+	visitor->maybe_accept( type, &ast::FunctionType::forall );
+	return type;
+}
+
+// Use of type variable, assuming `forall( [N] )` in scope:  void (*)( foo( /*dimension*/ N ) & )  ->  void (*)( foo( /*dtype*/ N ) & )
+const ast::Type * TranslateDimensionCore::postvisit(
+		const ast::TypeInstType * type ) {
+	if ( type->kind == ast::TypeDecl::Dimension ) {
+		auto mutType = ast::mutate( type );
+		mutType->kind = ast::TypeDecl::Dtype;
+		return mutType;
+	}
+	return type;
 }
 
