/* PR/13994; bug_cond2 was rejected on gcc up to version 3.4.x */
/* { dg-do compile  }*/
/* { dg-options "-std=gnu89 -Wno-return-type"  }*/

struct s { char c[1]; };
struct s a;

int bug_if(void) { if (a.c) return 1; else return 0; }
int bug_while(void) { while (a.c); }
int bug_do_while(void) { do ; while (a.c); }
int bug_for(void) { for ( ; a.c; ) ; }
int bug_or(void) { return (a.c || 1); }
int bug_and(void) { return (a.c && 1); }
int bug_cond(void) { return (a.c ? 1 : 0); }
char *bug_cond2(void) { return (a.c ? : 0); }
int bug_not(void) { return !a.c; }
int bug_bool(void) { return (_Bool) a.c; }
