// RUN: %clang_cc1 -triple x86_64-apple-darwin -fsyntax-only -verify  %s
// rdar://18716393

extern int a[] __attribute__((weak));
int b[] = {8,13,21};
struct {
  int x[10];
} c;
const char str[] = "text";

void ignore() {
  if (!a) {}
}
void test() {
  if (!b) {} // expected-warning {{address of array 'b' will always evaluate to 'true'}}
  if (b == 0) {} // expected-warning {{comparison of array 'b' equal to a null pointer is always false}}
  if (!c.x) {} // expected-warning {{address of array 'c.x' will always evaluate to 'true'}}
  if (c.x == 0) {} // expected-warning {{comparison of array 'c.x' equal to a null pointer is always false}}
  if (!str) {} // expected-warning {{address of array 'str' will always evaluate to 'true'}}
  if (0 == str) {} // expected-warning {{comparison of array 'str' equal to a null pointer is always false}}
}

int array[2];
int test1()
{
  if (!array) { // expected-warning {{address of array 'array' will always evaluate to 'true'}}
    return array[0];
  } else if (array != 0) { // expected-warning {{comparison of array 'array' not equal to a null pointer is always true}}
    return array[1];
  }
  if (array == 0) // expected-warning {{comparison of array 'array' equal to a null pointer is always false}}
    return 1;
  return 0;
}

#define NULL (void*)0

int test2(int* pointer, char ch, void * pv) {
   if (!&pointer) {  // expected-warning {{address of 'pointer' will always evaluate to 'true'}}
     return 0;
   }

   if (&pointer) {  // expected-warning {{address of 'pointer' will always evaluate to 'true'}}
     return 0;
   }

   if (&pointer == NULL) {} // expected-warning {{comparison of address of 'pointer' equal to a null pointer is always false}}

   if (&pointer != NULL) {} // expected-warning {{comparison of address of 'pointer' not equal to a null pointer is always true}}

   return 1;
}

void test3() {
   if (array) { } // expected-warning {{address of array 'array' will always evaluate to 'true'}}
   if (array != 0) {} // expected-warning {{comparison of array 'array' not equal to a null pointer is always true}}
   if (!array) { } // expected-warning {{address of array 'array' will always evaluate to 'true'}}
   if (array == 0) {} // expected-warning {{comparison of array 'array' equal to a null pointer is always false}}

   if (array[0] &&
       array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}}

   if (array[0] ||
       array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}}

   if (array[0] &&
       !array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}}
   if (array[0] ||
       !array) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}}

   if (array && // expected-warning {{address of array 'array' will always evaluate to 'true'}}
       array[0]) {}
   if (!array || // expected-warning {{address of array 'array' will always evaluate to 'true'}}
       array[0]) {}

   if (array ||  // expected-warning {{address of array 'array' will always evaluate to 'true'}}
       (!array && array[0])) {} // expected-warning {{address of array 'array' will always evaluate to 'true'}}
 }

// rdar://19256338
#define SAVE_READ(PTR) if( (PTR) && (&result) ) *result=*PTR;
void _HTTPClientErrorHandler(int me)
{
  int *result;
  SAVE_READ(&me);
}

void test_conditional_operator() {
  int x;
  x = b ? 1 : 0;     // expected-warning {{address of array}}
  x = c.x ? 1 : 0;   // expected-warning {{address of array}}
  x = str ? 1 : 0;   // expected-warning {{address of array}}
  x = array ? 1 : 0; // expected-warning {{address of array}}
  x = &x ? 1 : 0;    // expected-warning {{address of 'x'}}
}
