enums and ints are compatible

master
Michael Matz 2016-08-07 00:09:10 +02:00
parent c0368604e1
commit b1a906b970
2 changed files with 10 additions and 0 deletions

View File

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

View File

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