/* { dg-do compile } */ /* { dg-options "-Wconversion -Warith-conversion" } */ #include void foo(char c, char c2) { c >>= c2; /* { dg-warning "conversion" } */ c >>= 1; c <<= 1; /* { dg-warning "conversion" } */ c <<= c2; /* { dg-warning "conversion" } */ c += 1; /* { dg-warning "conversion" } */ c += c2; /* { dg-warning "conversion" } */ c -= 1; /* { dg-warning "conversion" } */ c -= c2; /* { dg-warning "conversion" } */ c *= 2; /* { dg-warning "conversion" } */ c *= c2; /* { dg-warning "conversion" } */ c /= 2; /* If char is unsigned we avoid promoting to int. */ c /= c2; /* { dg-warning "conversion" "" { target { ! unsigned_char } } } */ c %= 2; c %= c2; /* { dg-warning "conversion" "" { target { ! unsigned_char } } } */ c = -c2; /* { dg-warning "conversion" } */ c = ~c2; /* { dg-warning "conversion" } */ c = c2++; c = ++c2; c = c2--; c = --c2; } void bar(char c, int c2) { c >>= c2; /* { dg-warning "conversion" } */ c >>= (int)1; c <<= (int)1; /* { dg-warning "conversion" } */ c <<= c2; /* { dg-warning "conversion" } */ c += ((int)CHAR_MAX + CHAR_MAX); /* { dg-warning "conversion" } */ c += c2; /* { dg-warning "conversion" } */ c -= ((int)CHAR_MAX + CHAR_MAX); /* { dg-warning "conversion" } */ c -= c2; /* { dg-warning "conversion" } */ c *= ((int)CHAR_MAX + CHAR_MAX); /* { dg-warning "conversion" } */ c *= c2; /* { dg-warning "conversion" } */ c /= ((int)CHAR_MAX + CHAR_MAX); /* { dg-warning "conversion" } */ c /= c2; /* { dg-warning "conversion" } */ c %= ((int)CHAR_MAX + CHAR_MAX); /* { dg-warning "conversion" } */ c %= c2; /* { dg-warning "conversion" } */ c = ~c2; /* { dg-warning "conversion" } */ c = c2++; /* { dg-warning "conversion" } */ c = ++c2; /* { dg-warning "conversion" } */ c = c2--; /* { dg-warning "conversion" } */ c = --c2; /* { dg-warning "conversion" } */ }