/* Test zero with different types as null pointer constant: bug 112556. */ /* { dg-do compile } */ /* { dg-options "-std=c23 -pedantic-errors -Wno-pointer-compare" } */ enum e { ZERO }; enum e2 : bool { BZERO }; enum e3 : long { LZERO }; void *p1 = 0; void *p2 = 0LL; void *p3 = (char) 0; void *p4 = 0UL; void *p5 = (bool) 0; void *p6 = (enum e) ZERO; void *p7 = false; void *p8 = BZERO; void *p9 = (enum e2) 0; void *p10 = LZERO; void *p11 = (enum e3) 0; #ifdef __BITINT_MAXWIDTH__ void *p12 = 0wb; void *p13 = 0uwb; #endif void f (void *); void * g (void) { p1 = 0; p2 = 0LL; p3 = (char) 0; p4 = 0UL; p5 = (bool) 0; p6 = (enum e) ZERO; p7 = false; p8 = BZERO; p9 = (enum e2) 0; p10 = LZERO; p11 = (enum e3) 0; #ifdef __BITINT_MAXWIDTH__ p12 = 0wb; p13 = 0uwb; #endif f (0); f (0ULL); f (0L); f ((char) 0); f ((bool) 0); f ((enum e) ZERO); f (false); f (BZERO); f ((enum e2) 0); f (LZERO); f ((enum e3) 0); #ifdef __BITINT_MAXWIDTH__ f (0wb); f (0uwb); #endif (1 ? p1 : 0); (1 ? p1 : 0L); (1 ? p1 : 0ULL); (1 ? p1 : (char) 0); (1 ? p1 : (bool) 0); (1 ? p1 : (enum e) 0); (1 ? p1 : false); (1 ? p1 : BZERO); (1 ? p1 : (enum e2) 0); (1 ? p1 : LZERO); (1 ? p1 : (enum e3) 0); #ifdef __BITINT_MAXWIDTH__ (1 ? p1 : 0wb); (1 ? p1 : 0uwb); #endif p1 == 0; p1 == 0LL; p1 == 0U; p1 == (char) 0; p1 == (bool) 0; p1 == (enum e) 0; p1 == false; p1 == BZERO; p1 == (enum e2) 0; p1 == LZERO; p1 == (enum e3) 0; #ifdef __BITINT_MAXWIDTH__ p1 == 0wb; p1 == 0uwb; #endif p1 != 0; p1 != 0LL; p1 != 0U; p1 != (char) 0; p1 != (bool) 0; p1 != (enum e) 0; p1 != false; p1 != BZERO; p1 != (enum e2) 0; p1 != LZERO; p1 != (enum e3) 0; #ifdef __BITINT_MAXWIDTH__ p1 != 0wb; p1 != 0uwb; #endif return 0; return 0UL; return 0LL; return (char) 0; return (bool) 0; return (enum e) 0; return false; return BZERO; return (enum e2) 0; return LZERO; return (enum e3) 0; #ifdef __BITINT_MAXWIDTH__ return 0wb; return 0uwb; #endif }