diff --git a/module/language/c99/compiler.mes b/module/language/c99/compiler.mes index 86896bf0..9f1d89a6 100644 --- a/module/language/c99/compiler.mes +++ b/module/language/c99/compiler.mes @@ -1729,6 +1729,12 @@ (count (expr->number info count)) (type (make-c-array type count))) (clone info #:types (acons name type (.types info))))) + (((decl-spec-list (stor-spec (typedef)) (type-spec ,type)) (init-declr-list (init-declr (ptr-declr ,pointer (ident ,name))))) + (let* ((info (type->info type name info)) + (type (ast->type type info)) + (rank (pointer->rank pointer)) + (type (rank+= type rank))) + (clone info #:types (acons name type (.types info))))) (((decl-spec-list (stor-spec (,store)) (type-spec ,type)) (init-declr-list . ,inits)) (let* ((type (ast->type type info)) (function (.function info))) diff --git a/scaffold/tests/t.c b/scaffold/tests/t.c index 8fe749ce..ff3ec8ee 100644 --- a/scaffold/tests/t.c +++ b/scaffold/tests/t.c @@ -46,6 +46,9 @@ struct here {int and;} there; typedef int int_array_t[1]; int_array_t bar; +typedef struct foo *foo_pointer_t; +foo_pointer_t foep; + int test (struct foo* p) {