1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -fsyntax-only -fblocks -std=c++11 -verify %s
23e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
32af68e4761ed30181540dafb5572993daffa4910Chandler Carruthvoid foo() {
43e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  int a;
53e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  bool b;
63e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
73e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr + a : a + nullptr; // expected-error 2{{invalid operands to binary expression}}
83e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr - a : a - nullptr; // expected-error 2{{invalid operands to binary expression}}
93e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr / a : a / nullptr; // expected-error 2{{invalid operands to binary expression}}
103e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr * a : a * nullptr; // expected-error 2{{invalid operands to binary expression}}
113e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr >> a : a >> nullptr; // expected-error 2{{invalid operands to binary expression}}
123e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr << a : a << nullptr; // expected-error 2{{invalid operands to binary expression}}
133e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr % a : a % nullptr; // expected-error 2{{invalid operands to binary expression}}
143e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr & a : a & nullptr; // expected-error 2{{invalid operands to binary expression}}
153e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr | a : a | nullptr; // expected-error 2{{invalid operands to binary expression}}
163e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = 0 ? nullptr ^ a : a ^ nullptr; // expected-error 2{{invalid operands to binary expression}}
173e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
183e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  // Using two nullptrs should only give one error instead of two.
193e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr + nullptr; // expected-error{{invalid operands to binary expression}}
203e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr - nullptr; // expected-error{{invalid operands to binary expression}}
213e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr / nullptr; // expected-error{{invalid operands to binary expression}}
223e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr * nullptr; // expected-error{{invalid operands to binary expression}}
233e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr >> nullptr; // expected-error{{invalid operands to binary expression}}
243e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr << nullptr; // expected-error{{invalid operands to binary expression}}
253e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr % nullptr; // expected-error{{invalid operands to binary expression}}
263e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr & nullptr; // expected-error{{invalid operands to binary expression}}
273e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr | nullptr; // expected-error{{invalid operands to binary expression}}
283e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a = nullptr ^ nullptr; // expected-error{{invalid operands to binary expression}}
293e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
303e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a += nullptr; // expected-error{{invalid operands to binary expression}}
313e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a -= nullptr; // expected-error{{invalid operands to binary expression}}
323e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a /= nullptr; // expected-error{{invalid operands to binary expression}}
333e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a *= nullptr; // expected-error{{invalid operands to binary expression}}
343e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a >>= nullptr; // expected-error{{invalid operands to binary expression}}
353e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a <<= nullptr; // expected-error{{invalid operands to binary expression}}
363e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a %= nullptr; // expected-error{{invalid operands to binary expression}}
373e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a &= nullptr; // expected-error{{invalid operands to binary expression}}
383e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a |= nullptr; // expected-error{{invalid operands to binary expression}}
393e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  a ^= nullptr; // expected-error{{invalid operands to binary expression}}
403e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
413e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a < nullptr || nullptr < a; // expected-error 2{{invalid operands to binary expression}}
423e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a > nullptr || nullptr > a; // expected-error 2{{invalid operands to binary expression}}
433e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a <= nullptr || nullptr <= a; // expected-error 2{{invalid operands to binary expression}}
443e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a >= nullptr || nullptr >= a; // expected-error 2{{invalid operands to binary expression}}
453e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a == nullptr || nullptr == a; // expected-error 2{{invalid operands to binary expression}}
463e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = a != nullptr || nullptr != a; // expected-error 2{{invalid operands to binary expression}}
473e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
483e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = &a < nullptr || nullptr < &a || &a > nullptr || nullptr > &a;
493e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = &a <= nullptr || nullptr <= &a || &a >= nullptr || nullptr >= &a;
503e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = &a == nullptr || nullptr == &a || &a != nullptr || nullptr != &a;
513e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
522af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = nullptr < nullptr || nullptr > nullptr;
532af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = nullptr <= nullptr || nullptr >= nullptr;
542af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = nullptr == nullptr || nullptr != nullptr;
553e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
563e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = ((nullptr)) != a;  // expected-error{{invalid operands to binary expression}}
573e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
583e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  void (^c)();
593e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  c = nullptr;
603e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = c == nullptr || nullptr == c || c != nullptr || nullptr != c;
613e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu
623e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  class X;
633e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  void (X::*d) ();
643e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  d = nullptr;
653e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu  b = d == nullptr || nullptr == d || d != nullptr || nullptr != d;
662af68e4761ed30181540dafb5572993daffa4910Chandler Carruth
672af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  extern void e();
682af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = e == nullptr || nullptr == e || e != nullptr || nullptr != e;
692af68e4761ed30181540dafb5572993daffa4910Chandler Carruth
702af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  int f[2];
712af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = f == nullptr || nullptr == f || f != nullptr || nullptr != f;
722af68e4761ed30181540dafb5572993daffa4910Chandler Carruth  b = "f" == nullptr || nullptr == "f" || "f" != nullptr || nullptr != "f";
733e95ba94fd34c5f6420c57d7732f601875074681Richard Trieu}
74