Index: src/AST/Convert.cpp
===================================================================
--- src/AST/Convert.cpp	(revision 546e712c18fe907ee1619132a875d9ba32994efc)
+++ src/AST/Convert.cpp	(revision 0b73f0cd5f12dd95097dbdf9ad89a93ff3d695da)
@@ -735,6 +735,12 @@
 		expr->var = get<DeclarationWithType>().accept1(node->var);
 		Type * type = expr->var->get_type()->clone();
+		if(FunctionType * ft = dynamic_cast<FunctionType*>(type)) {
+			if(node->result.as<ast::PointerType>()) {
+				type = new PointerType({}, ft);
+			}
+		}
+
 		type->set_lvalue( true );
-		expr->set_result( type );
+		expr->result = type ;
 		this->node = expr;
 		return nullptr;
@@ -782,5 +788,6 @@
 			assert (!rslt->isType);
 		}
-		if (node->type) {
+		else {
+			assert(node->type);
 			rslt = new SizeofExpr(
 				get<Type>().accept1(node->type)
@@ -803,5 +810,6 @@
 			assert (!rslt->isType);
 		}
-		if (node->type) {
+		else {
+			assert(node->type);
 			rslt = new AlignofExpr(
 				get<Type>().accept1(node->type)
@@ -2149,5 +2157,5 @@
 		);
 
-		visitBaseExpr( old,
+		visitBaseExpr_SkipResultType( old,
 			expr
 		);
@@ -2155,4 +2163,9 @@
 		expr->var = GET_ACCEPT_1(var, DeclWithType);
 		expr->result = expr->var->get_type();
+		if(const ast::FunctionType * ft = expr->result.as<ast::FunctionType>()) {
+			if(dynamic_cast<PointerType *>(old->result)) {
+				expr->result = new ast::PointerType(ft);
+			}
+		}
 		add_qualifiers( expr->result, ast::CV::Lvalue );
 		this->node = expr;
