Index: src/SymTab/Autogen.cc
===================================================================
--- src/SymTab/Autogen.cc	(revision f203a7a1eb56be0df147abdb42ec52c9a2c51be4)
+++ src/SymTab/Autogen.cc	(revision 1f37045134019dcc85ce9bbfe573c87275cfb714)
@@ -372,5 +372,10 @@
 				continue;
 			}
-			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, 0, field->get_type()->clone(), 0 ) );
+			// do not carry over field's attributes to parameter type
+			Type * paramType = field->get_type()->clone();
+			deleteAll( paramType->attributes );
+			paramType->attributes.clear();
+			// add a parameter corresponding to this field
+			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType, nullptr ) );
 			FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
 			makeFieldCtorBody( aggregateDecl->members.begin(), aggregateDecl->members.end(), ctor );
@@ -503,5 +508,10 @@
 				break;
 			}
-			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, field->get_type()->clone(), nullptr ) );
+			// do not carry over field's attributes to parameter type
+			Type * paramType = field->get_type()->clone();
+			deleteAll( paramType->attributes );
+			paramType->attributes.clear();
+			// add a parameter corresponding to this field
+			memCtorType->parameters.push_back( new ObjectDecl( field->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType, nullptr ) );
 			FunctionDecl * ctor = genFunc( "?{}", memCtorType->clone(), functionNesting );
 			ObjectDecl * srcParam = strict_dynamic_cast<ObjectDecl *>( ctor->type->parameters.back() );
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision f203a7a1eb56be0df147abdb42ec52c9a2c51be4)
+++ src/SymTab/Validate.cc	(revision 1f37045134019dcc85ce9bbfe573c87275cfb714)
@@ -201,4 +201,6 @@
 		Declaration * postmutate( TraitDecl * contextDecl );
 
+		void premutate( FunctionType * ftype );
+
 	  private:
 		template<typename AggDecl>
@@ -214,4 +216,5 @@
 		TypeDeclMap typedeclNames;
 		int scopeLevel;
+		bool inFunctionType = false;
 	};
 
@@ -725,4 +728,11 @@
 			Type *ret = def->second.first->base->clone();
 			ret->get_qualifiers() |= typeInst->get_qualifiers();
+			// attributes are not carried over from typedef to function parameters/return values
+			if ( ! inFunctionType ) {
+				ret->attributes.splice( ret->attributes.end(), typeInst->attributes );
+			} else {
+				deleteAll( ret->attributes );
+				ret->attributes.clear();
+			}
 			// place instance parameters on the typedef'd type
 			if ( ! typeInst->parameters.empty() ) {
@@ -901,4 +911,9 @@
 	Declaration *EliminateTypedef::postmutate( TraitDecl * traitDecl ) {
 		return handleAggregate( traitDecl );
+	}
+
+	void EliminateTypedef::premutate( FunctionType * ) {
+		GuardValue( inFunctionType );
+		inFunctionType = true;
 	}
 
