// GCC case: gcc-9 -Wall -Wextra
// Clang case: clang-9 -Wall -Wextra
typedef enum MyEnum {
A,
B,
C,
} MyEnum;
typedef enum MyOtherEnum {
D,
E,
F,
} MyOtherEnum;
void foo(MyEnum a) {
(void)a;
}
void bar(MyOtherEnum a) {
(void)a;
}
void baz(void* a) {
(void)a;
}
int main() {
foo(10);
foo(A | D);
bar(10);
bar(A | D);
foo(D); // Fine GCC (implicitly from MyEnum -> int -> MyOtherEnum).
// Warning in Clang.
bar(A); // Fine GCC (implicitly from MyOtherEnum -> int -> MyEnum).
// Warning in Clang.
baz(A); // Fine in GCC (A is value of 0, which can be implicitly converted to pointer).
// Warnuing in Clang.
baz(D); // Fine in GCC (A is value of 0, which can be implicitly converted to pointer).
// Warnuing in Clang.
baz(B); // Warning in GCC,
// Warning in Clang.
baz(C); // Warning in GCC.
// Warning in Clang.
return 0;
}