diff options
-rw-r--r-- | codegen.c | 6 | ||||
-rw-r--r-- | tests/typedef_struct_ptr.c | 7 |
2 files changed, 13 insertions, 0 deletions
@@ -145,7 +145,11 @@ const void typedecl(Type *type) { println("typedef char Type_%d ;", type->id); break; case TY_PTR: + // When we recurse, we need to set the type id to 0 because we haven't + // printed it out yet. + type->id = 0; typedecl(type->base); + if (!type->id) type->id = count(); println("typedef Type_%d * Type_%d ;", type->base->id, type->id); break; case TY_FUNC: { @@ -167,7 +171,9 @@ const void typedecl(Type *type) { break; } case TY_ARRAY: + type->id = 0; typedecl(type->base); + if (!type->id) type->id = count(); if (type->array_len == -1) println("typedef Type_%d Type_%d [ ] ;", type->base->id, type->id); else diff --git a/tests/typedef_struct_ptr.c b/tests/typedef_struct_ptr.c new file mode 100644 index 0000000..c5cb16d --- /dev/null +++ b/tests/typedef_struct_ptr.c @@ -0,0 +1,7 @@ +typedef struct ll *ll_p; + +struct ll { + ll_p next; +}; + +extern ll_p xyz; |