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