1 2 3/* Test that (p!=0) + (q!=0) is computed as int, 4 not boolean */ 5/* { dg-options "-O3" } */ 6/* { dg-do run } */ 7extern void abort (void); 8char *foo(char *p, char *q) { 9 int x = (p !=0) + (q != 0); 10 if (x==2) return "a"; else return 0; 11} 12extern char *bar(char*, char*) __attribute__((noinline)); 13char *bar(char *first, char *last) 14{ 15 int y; 16 if (!first) return last; 17 if (!last) return first; 18 if (*first == 'a') 19 return foo(first, last); 20 return 0; 21} 22int 23main() { 24 char *p = "a", *q = "b"; 25 if (p) 26 if (bar(p,q)) 27 return 0; 28 abort(); 29} 30