diff options
-rw-r--r-- | tests/compatible-enum-types.c | 3 | ||||
-rw-r--r-- | tests/compatible-enum-types.qbe | 1 | ||||
-rw-r--r-- | type.c | 4 |
3 files changed, 8 insertions, 0 deletions
diff --git a/tests/compatible-enum-types.c b/tests/compatible-enum-types.c new file mode 100644 index 0000000..e320966 --- /dev/null +++ b/tests/compatible-enum-types.c @@ -0,0 +1,3 @@ +enum E {A = -1, B}; +enum E x; +int x; diff --git a/tests/compatible-enum-types.qbe b/tests/compatible-enum-types.qbe new file mode 100644 index 0000000..7cf0e40 --- /dev/null +++ b/tests/compatible-enum-types.qbe @@ -0,0 +1 @@ +export data $x = align 4 { z 4 } @@ -161,6 +161,10 @@ typecompatible(struct type *t1, struct type *t2) if (t1->kind != t2->kind) return false; switch (t1->kind) { + case TYPEBASIC: + /* enum types are compatible with 'int', but not with + each other (unless they are the same type) */ + return t1->basic.kind == t2->basic.kind && (t1 == &typeint || t2 == &typeint); case TYPEQUALIFIED: if (t1->qualified.kind != t2->qualified.kind) return false; |