From 27e77f6ca6872c8d332c2e153773ca226d69fb64 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Sun, 17 Feb 2019 17:03:01 -0800 Subject: Make enum types compatible with their corresponding integer type (int) --- tests/compatible-enum-types.c | 3 +++ tests/compatible-enum-types.qbe | 1 + type.c | 4 ++++ 3 files changed, 8 insertions(+) create mode 100644 tests/compatible-enum-types.c create mode 100644 tests/compatible-enum-types.qbe 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 } diff --git a/type.c b/type.c index 74e7094..79c2454 100644 --- a/type.c +++ b/type.c @@ -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; -- cgit v1.2.3