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