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; | 
