aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2016-08-07 00:09:10 +0200
committerMichael Matz <matz@suse.de>2016-12-15 17:47:10 +0100
commitb1a906b970e1f55c1a3e6786cddb08719216ade3 (patch)
treec83b08e02bf0ff39e12d3fe500ebea69539d27dd
parentc0368604e196d53b281cd2aceb140b5facd36ed7 (diff)
downloadtinycc-b1a906b970e1f55c1a3e6786cddb08719216ade3.tar.gz
tinycc-b1a906b970e1f55c1a3e6786cddb08719216ade3.tar.bz2
enums and ints are compatible
-rw-r--r--tccgen.c8
-rw-r--r--tests/tcctest.c2
2 files changed, 10 insertions, 0 deletions
diff --git a/tccgen.c b/tccgen.c
index aafea36..7c8bc32 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2565,6 +2565,14 @@ static int compare_types(CType *type1, CType *type2, int unqualified)
t1 &= ~VT_DEFSIGN;
t2 &= ~VT_DEFSIGN;
}
+ if ((t1 & VT_BTYPE) == VT_ENUM) {
+ /* An enum is compatible with (unsigned) int. */
+ t1 = VT_INT | (t1 & ~VT_BTYPE);
+ }
+ if ((t2 & VT_BTYPE) == VT_ENUM) {
+ /* An enum is compatible with (unsigned) int. */
+ t2 = VT_INT | (t2 & ~VT_BTYPE);
+ }
/* XXX: bitfields ? */
if (t1 != t2)
return 0;
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 3885b54..a604c4a 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -590,6 +590,8 @@ enum test {
void enum_test()
{
enum test b1;
+ /* The following should give no warning */
+ int *p = &b1;
printf("enum:\n%d %d %d %d %d %d\n",
E0, E1, E2, E3, E4, E5);
b1 = 1;