[clang] Retrieve BinaryOperator::getOpcode and BinaryOperator::getOpcodeStr via libclang and its python interface (PR #98489)

Thomas Wucher via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 11 10:55:26 PDT 2024


https://github.com/thomaswucher updated https://github.com/llvm/llvm-project/pull/98489

>From d0e2b8328f33bb062aa14fbd49124c45ab71395f Mon Sep 17 00:00:00 2001
From: Thomas Wucher <thomas.wucher at gtd-gmbh.de>
Date: Thu, 23 May 2024 11:47:57 +0200
Subject: [PATCH] [libclang/python] Retrieve BinaryOperator::getOpcode and
 BinaryOperator::getOpcodeStr via libclang and its python interface

---
 clang/bindings/python/clang/cindex.py         |   66 +
 .../python/tests/cindex/test_cursor.py        |  104 +
 clang/docs/ReleaseNotes.rst                   |    2 +
 clang/include/clang-c/Index.h                 |   53 +
 clang/test/Index/binop.cpp                    |   92 +
 clang/test/Index/blocks.c                     |    3 +-
 clang/test/Index/c-index-api-loadTU-test.m    |    2 +-
 clang/test/Index/index-concepts.cpp           |    6 +-
 clang/test/Index/load-staticassert.cpp        |    4 +-
 clang/test/Index/nested-binaryoperators.cpp   | 1961 +++++++++++------
 clang/test/Index/preamble.c                   |    2 +-
 clang/test/Index/print-type.c                 |    4 +-
 clang/test/Index/print-type.cpp               |    2 +-
 .../test/Index/recursive-cxx-member-calls.cpp |   66 +-
 clang/test/Index/remap-load.c                 |    2 +-
 clang/test/Index/usrs.m                       |    2 +-
 clang/tools/c-index-test/c-index-test.c       |   18 +
 clang/tools/libclang/CIndex.cpp               |   35 +
 clang/tools/libclang/libclang.map             |    2 +
 19 files changed, 1655 insertions(+), 771 deletions(-)
 create mode 100644 clang/test/Index/binop.cpp

diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index b3d51e4d2a668..e3caed3394c8a 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -1892,6 +1892,18 @@ def availability(self):
 
         return AvailabilityKind.from_id(self._availability)
 
+    @property
+    def binary_operator(self):
+        """
+        Retrieves the opcode if this cursor points to a binary operator
+        :return:
+        """
+
+        if not hasattr(self, '_binopcode'):
+            self._binopcode = conf.lib.clang_Cursor_getBinaryOpcode(self)
+
+        return BinaryOperator.from_id(self._binopcode)
+
     @property
     def access_specifier(self):
         """
@@ -2181,6 +2193,60 @@ def from_cursor_result(res, fn, args):
         res._tu = args[0]._tu
         return res
 
+class BinaryOperator(BaseEnumeration):
+    """
+    Describes the BinaryOperator of a declaration
+    """
+
+    # The unique kind objects, index by id.
+    _kinds = []
+    _name_map = None
+
+    def __nonzero__(self):
+        """ Allows checks of the kind ```if cursor.binary_operator:```"""
+        return self.value != 0
+
+    @property
+    def is_assignment(self):
+        return BinaryOperator.Assign.value <= self.value < BinaryOperator.Comma.value
+
+    def __repr__(self):
+        return 'BinaryOperator.%s' % (self.name,)
+
+BinaryOperator.Invalid = BinaryOperator(0)
+BinaryOperator.PtrMemD = BinaryOperator(1)
+BinaryOperator.PtrMemI = BinaryOperator(2)
+BinaryOperator.Mul = BinaryOperator(3)
+BinaryOperator.Div = BinaryOperator(4)
+BinaryOperator.Rem = BinaryOperator(5)
+BinaryOperator.Add = BinaryOperator(6)
+BinaryOperator.Sub = BinaryOperator(7)
+BinaryOperator.Shl = BinaryOperator(8)
+BinaryOperator.Shr = BinaryOperator(9)
+BinaryOperator.Cmp = BinaryOperator(10)
+BinaryOperator.LT = BinaryOperator(11)
+BinaryOperator.GT = BinaryOperator(12)
+BinaryOperator.LE = BinaryOperator(13)
+BinaryOperator.GE = BinaryOperator(14)
+BinaryOperator.EQ = BinaryOperator(15)
+BinaryOperator.NE = BinaryOperator(16)
+BinaryOperator.And = BinaryOperator(17)
+BinaryOperator.Xor = BinaryOperator(18)
+BinaryOperator.Or = BinaryOperator(19)
+BinaryOperator.LAnd = BinaryOperator(20)
+BinaryOperator.LOr = BinaryOperator(21)
+BinaryOperator.Assign = BinaryOperator(22)
+BinaryOperator.MulAssign = BinaryOperator(23)
+BinaryOperator.DivAssign = BinaryOperator(24)
+BinaryOperator.RemAssign = BinaryOperator(25)
+BinaryOperator.AddAssign = BinaryOperator(26)
+BinaryOperator.SubAssign = BinaryOperator(27)
+BinaryOperator.ShlAssign = BinaryOperator(28)
+BinaryOperator.ShrAssign = BinaryOperator(29)
+BinaryOperator.AndAssign = BinaryOperator(30)
+BinaryOperator.XorAssign = BinaryOperator(31)
+BinaryOperator.OrAssign = BinaryOperator(32)
+BinaryOperator.Comma = BinaryOperator(33)
 
 class StorageClass:
     """
diff --git a/clang/bindings/python/tests/cindex/test_cursor.py b/clang/bindings/python/tests/cindex/test_cursor.py
index 84cd813941844..7476947bde2ea 100644
--- a/clang/bindings/python/tests/cindex/test_cursor.py
+++ b/clang/bindings/python/tests/cindex/test_cursor.py
@@ -13,6 +13,7 @@
 from clang.cindex import TemplateArgumentKind
 from clang.cindex import TranslationUnit
 from clang.cindex import TypeKind
+from clang.cindex import BinaryOperator
 from .util import get_cursor
 from .util import get_cursors
 from .util import get_tu
@@ -54,6 +55,64 @@ class C {
         void foo<-7, float, true>();
     """
 
+kBinops = """\
+struct C {
+   int m;
+ };
+
+ void func(void){
+   int a, b;
+   int C::* p = &C::
+
+   C c;
+   c.*p;
+
+   C* pc;
+   pc->*p;
+
+   a * b;
+   a / b;
+   a % b;
+   a + b;
+   a - b;
+
+   a << b;
+   a >> b;
+
+   a < b;
+   a > b;
+
+   a <= b;
+   a >= b;
+   a == b;
+   a != b;
+
+   a & b;
+   a ^ b;
+   a | b;
+
+   a && b;
+   a || b;
+
+   a = b;
+
+   a *= b;
+   a /= b;
+   a %= b;
+   a += b;
+   a -= b;
+
+   a <<= b;
+   a >>= b;
+
+   a &= b;
+   a ^= b;
+   a |= b;
+   a , b;
+
+ }
+ """
+
 
 class TestCursor(unittest.TestCase):
     def test_get_children(self):
@@ -695,3 +754,48 @@ def test_mangled_name(self):
         self.assertIn(
             foo.mangled_name, ("_Z3fooii", "__Z3fooii", "?foo@@YAHHH", "?foo@@YAHHH at Z")
         )
+
+    def test_binop(self):
+        tu = get_tu(kBinops, lang="cpp")
+
+        operators = {
+            # not exposed yet
+            # ".*" : BinaryOperator.PtrMemD,
+            "->*": BinaryOperator.PtrMemI,
+            "*": BinaryOperator.Mul,
+            "/": BinaryOperator.Div,
+            "%": BinaryOperator.Rem,
+            "+": BinaryOperator.Add,
+            "-": BinaryOperator.Sub,
+            "<<": BinaryOperator.Shl,
+            ">>": BinaryOperator.Shr,
+            # tests do not run in C++2a mode so this operator is not available
+            # "<=>" : BinaryOperator.Cmp,
+            "<": BinaryOperator.LT,
+            ">": BinaryOperator.GT,
+            "<=": BinaryOperator.LE,
+            ">=": BinaryOperator.GE,
+            "==": BinaryOperator.EQ,
+            "!=": BinaryOperator.NE,
+            "&": BinaryOperator.And,
+            "^": BinaryOperator.Xor,
+            "|": BinaryOperator.Or,
+            "&&": BinaryOperator.LAnd,
+            "||": BinaryOperator.LOr,
+            "=": BinaryOperator.Assign,
+            "*=": BinaryOperator.MulAssign,
+            "/=": BinaryOperator.DivAssign,
+            "%=": BinaryOperator.RemAssign,
+            "+=": BinaryOperator.AddAssign,
+            "-=": BinaryOperator.SubAssign,
+            "<<=": BinaryOperator.ShlAssign,
+            ">>=": BinaryOperator.ShrAssign,
+            "&=": BinaryOperator.AndAssign,
+            "^=": BinaryOperator.XorAssign,
+            "|=": BinaryOperator.OrAssign,
+            ",": BinaryOperator.Comma,
+        }
+
+        for op, typ in operators.items():
+            c = get_cursor(tu, op)
+            assert c.binary_operator == typ
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 6adf57da42e65..f19fcd900a953 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -1289,6 +1289,8 @@ Python Binding Changes
 - Exposed `CXRewriter` API as `class Rewriter`.
 - Add some missing kinds from Index.h (CursorKind: 149-156, 272-320, 420-437.
   TemplateArgumentKind: 5-9. TypeKind: 161-175 and 178).
+- Add support for retrieving binary operator information through
+  Cursor.binary_operator().
 
 OpenMP Support
 --------------
diff --git a/clang/include/clang-c/Index.h b/clang/include/clang-c/Index.h
index ce2282937f86c..24ed23a628728 100644
--- a/clang/include/clang-c/Index.h
+++ b/clang/include/clang-c/Index.h
@@ -3750,6 +3750,59 @@ enum CX_StorageClass {
   CX_SC_Register
 };
 
+/**
+ * Represents a specific kind of binary operator which can appear at a cursor.
+ */
+enum CX_BinaryOperatorKind {
+  CX_BO_Invalid = 0,
+  CX_BO_PtrMemD = 1,
+  CX_BO_PtrMemI = 2,
+  CX_BO_Mul = 3,
+  CX_BO_Div = 4,
+  CX_BO_Rem = 5,
+  CX_BO_Add = 6,
+  CX_BO_Sub = 7,
+  CX_BO_Shl = 8,
+  CX_BO_Shr = 9,
+  CX_BO_Cmp = 10,
+  CX_BO_LT = 11,
+  CX_BO_GT = 12,
+  CX_BO_LE = 13,
+  CX_BO_GE = 14,
+  CX_BO_EQ = 15,
+  CX_BO_NE = 16,
+  CX_BO_And = 17,
+  CX_BO_Xor = 18,
+  CX_BO_Or = 19,
+  CX_BO_LAnd = 20,
+  CX_BO_LOr = 21,
+  CX_BO_Assign = 22,
+  CX_BO_MulAssign = 23,
+  CX_BO_DivAssign = 24,
+  CX_BO_RemAssign = 25,
+  CX_BO_AddAssign = 26,
+  CX_BO_SubAssign = 27,
+  CX_BO_ShlAssign = 28,
+  CX_BO_ShrAssign = 29,
+  CX_BO_AndAssign = 30,
+  CX_BO_XorAssign = 31,
+  CX_BO_OrAssign = 32,
+  CX_BO_Comma = 33,
+  CX_BO_LAST = CX_BO_Comma
+};
+
+/**
+ * \brief Returns the operator code for the binary operator.
+ */
+CINDEX_LINKAGE enum CX_BinaryOperatorKind
+clang_Cursor_getBinaryOpcode(CXCursor C);
+
+/**
+ * \brief Returns a string containing the spelling of the binary operator.
+ */
+CINDEX_LINKAGE CXString
+clang_Cursor_getBinaryOpcodeStr(enum CX_BinaryOperatorKind Op);
+
 /**
  * Returns the storage class for a function or variable declaration.
  *
diff --git a/clang/test/Index/binop.cpp b/clang/test/Index/binop.cpp
new file mode 100644
index 0000000000000..576fd73cc2abf
--- /dev/null
+++ b/clang/test/Index/binop.cpp
@@ -0,0 +1,92 @@
+// RUN: c-index-test -test-print-binops %s | FileCheck %s
+
+struct C {
+  int m;
+};
+
+void func(void) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-value"
+  int a, b;
+  int C::*p = &C::m;
+
+  C c;
+  c.*p;
+
+  C *pc;
+  pc->*p;
+
+  a *b;
+  a / b;
+  a % b;
+  a + b;
+  a - b;
+
+  a << b;
+  a >> b;
+
+  a < b;
+  a > b;
+
+  a <= b;
+  a >= b;
+  a == b;
+  a != b;
+
+  a &b;
+  a ^ b;
+  a | b;
+
+  a &&b;
+  a || b;
+
+  a = b;
+
+  a *= b;
+  a /= b;
+  a %= b;
+  a += b;
+  a -= b;
+
+  a <<= b;
+  a >>= b;
+
+  a &= b;
+  a ^= b;
+  a |= b;
+  a, b;
+#pragma clang diagnostic pop
+}
+
+// CHECK: BinaryOperator=.* BinOp=.* 1
+// CHECK: BinaryOperator=->* BinOp=->* 2
+// CHECK: BinaryOperator=* BinOp=* 3
+// CHECK: BinaryOperator=/ BinOp=/ 4
+// CHECK: BinaryOperator=% BinOp=% 5
+// CHECK: BinaryOperator=+ BinOp=+ 6
+// CHECK: BinaryOperator=- BinOp=- 7
+// CHECK: BinaryOperator=<< BinOp=<< 8
+// CHECK: BinaryOperator=>> BinOp=>> 9
+// CHECK: BinaryOperator=< BinOp=< 11
+// CHECK: BinaryOperator=> BinOp=> 12
+// CHECK: BinaryOperator=<= BinOp=<= 13
+// CHECK: BinaryOperator=>= BinOp=>= 14
+// CHECK: BinaryOperator=== BinOp=== 15
+// CHECK: BinaryOperator=!= BinOp=!= 16
+// CHECK: BinaryOperator=& BinOp=& 17
+// CHECK: BinaryOperator=^ BinOp=^ 18
+// CHECK: BinaryOperator=| BinOp=| 19
+// CHECK: BinaryOperator=&& BinOp=&& 20
+// CHECK: BinaryOperator=|| BinOp=|| 21
+// CHECK: BinaryOperator== BinOp== 22
+// CHECK: CompoundAssignOperator=*= BinOp=*= 23
+// CHECK: CompoundAssignOperator=/= BinOp=/= 24
+// CHECK: CompoundAssignOperator=%= BinOp=%= 25
+// CHECK: CompoundAssignOperator=+= BinOp=+= 26
+// CHECK: CompoundAssignOperator=-= BinOp=-= 27
+// CHECK: CompoundAssignOperator=<<= BinOp=<<= 28
+// CHECK: CompoundAssignOperator=>>= BinOp=>>= 29
+// CHECK: CompoundAssignOperator=&= BinOp=&= 30
+// CHECK: CompoundAssignOperator=^= BinOp=^= 31
+// CHECK: CompoundAssignOperator=|= BinOp=|= 32
+// CHECK: BinaryOperator=, BinOp=, 33
diff --git a/clang/test/Index/blocks.c b/clang/test/Index/blocks.c
index 3f33e48e4ced0..304c7800cb700 100644
--- a/clang/test/Index/blocks.c
+++ b/clang/test/Index/blocks.c
@@ -23,7 +23,7 @@ void test() {
 // CHECK: blocks.c:9:18: TypeRef=struct foo:4:8 Extent=[9:18 - 9:21]
 // CHECK: blocks.c:9:28: CompoundStmt= Extent=[9:28 - 9:58]
 // CHECK: blocks.c:9:30: ReturnStmt= Extent=[9:30 - 9:55]
-// CHECK: blocks.c:9:37: BinaryOperator= Extent=[9:37 - 9:55]
+// CHECK: blocks.c:9:37: BinaryOperator=+ Extent=[9:37 - 9:55]
 // CHECK: blocks.c:9:37: CStyleCastExpr= Extent=[9:37 - 9:51]
 // CHECK: blocks.c:9:38: TypeRef=int_t:3:13 Extent=[9:38 - 9:43]
 // CHECK: blocks.c:9:50: MemberRefExpr=x:4:19 SingleRefName=[9:50 - 9:51] RefName=[9:50 - 9:51] Extent=[9:45 - 9:51]
@@ -31,4 +31,3 @@ void test() {
 // CHECK: blocks.c:9:54: DeclRefExpr=i:8:11 Extent=[9:54 - 9:55]
 // CHECK: blocks.c:9:59: UnaryOperator= Extent=[9:59 - 9:64]
 // CHECK: blocks.c:9:60: DeclRefExpr=_foo:7:21 Extent=[9:60 - 9:64]
-
diff --git a/clang/test/Index/c-index-api-loadTU-test.m b/clang/test/Index/c-index-api-loadTU-test.m
index 7aa8f800e037c..7ec57cf3ab63d 100644
--- a/clang/test/Index/c-index-api-loadTU-test.m
+++ b/clang/test/Index/c-index-api-loadTU-test.m
@@ -130,7 +130,7 @@ @interface TestAttributes()
 // CHECK: c-index-api-loadTU-test.m:50:13: VarDecl=d:50:13 (Definition) Extent=[50:2 - 50:14]
 // CHECK: c-index-api-loadTU-test.m:50:2: TypeRef=id:0:0 Extent=[50:2 - 50:4]
 // CHECK: c-index-api-loadTU-test.m:50:6: ObjCProtocolRef=Proto:25:11 Extent=[50:6 - 50:11]
-// CHECK: c-index-api-loadTU-test.m:51:2: BinaryOperator= Extent=[51:2 - 51:7]
+// CHECK: c-index-api-loadTU-test.m:51:2: BinaryOperator== Extent=[51:2 - 51:7]
 // CHECK: c-index-api-loadTU-test.m:51:2: DeclRefExpr=d:50:13 Extent=[51:2 - 51:3]
 // CHECK: c-index-api-loadTU-test.m:51:6: UnexposedExpr=c:49:12 Extent=[51:6 - 51:7]
 // CHECK: c-index-api-loadTU-test.m:51:6: UnexposedExpr=c:49:12 Extent=[51:6 - 51:7]
diff --git a/clang/test/Index/index-concepts.cpp b/clang/test/Index/index-concepts.cpp
index d29b9dcf79522..17fbd02f34fe8 100644
--- a/clang/test/Index/index-concepts.cpp
+++ b/clang/test/Index/index-concepts.cpp
@@ -41,10 +41,10 @@ template <class T>
 concept ConWithLogicalAnd = Con1<T> && sizeof(T) > sizeFunc();
 // CHECK: index-concepts.cpp:[[@LINE-1]]:9: ConceptDecl=ConWithLogicalAnd:[[@LINE-1]]:9 (Definition) Extent=[[[@LINE-2]]:1 - [[@LINE-1]]:62]
 // CHECK: index-concepts.cpp:[[@LINE-3]]:17: TemplateTypeParameter=T:[[@LINE-3]]:17 (Definition) Extent=[[[@LINE-3]]:11 - [[@LINE-3]]:18] [access=public]
-// CHECK: index-concepts.cpp:[[@LINE-3]]:29: BinaryOperator= Extent=[[[@LINE-3]]:29 - [[@LINE-3]]:62]
+// CHECK: index-concepts.cpp:[[@LINE-3]]:29: BinaryOperator=&& Extent=[[[@LINE-3]]:29 - [[@LINE-3]]:62]
 // CHECK: index-concepts.cpp:[[@LINE-4]]:29: ConceptSpecializationExpr= Extent=[[[@LINE-4]]:29 - [[@LINE-4]]:36]
 // CHECK: index-concepts.cpp:[[@LINE-5]]:29: TemplateRef=Con1:31:9 Extent=[[[@LINE-5]]:29 - [[@LINE-5]]:33]
-// CHECK: index-concepts.cpp:[[@LINE-6]]:40: BinaryOperator= Extent=[[[@LINE-6]]:40 - [[@LINE-6]]:62]
+// CHECK: index-concepts.cpp:[[@LINE-6]]:40: BinaryOperator=> Extent=[[[@LINE-6]]:40 - [[@LINE-6]]:62]
 // CHECK: index-concepts.cpp:[[@LINE-7]]:40: UnaryExpr= Extent=[[[@LINE-7]]:40 - [[@LINE-7]]:49]
 // CHECK: index-concepts.cpp:[[@LINE-8]]:47: TypeRef=T:40:17 Extent=[[[@LINE-8]]:47 - [[@LINE-8]]:48]
 // CHECK: index-concepts.cpp:[[@LINE-9]]:52: UnexposedExpr=sizeFunc:38:15 Extent=[[[@LINE-9]]:52 - [[@LINE-9]]:62]
@@ -64,7 +64,7 @@ concept ConTwoTemplateParams = ns::ConInNamespace<T1> && ConWithLogicalAnd<T2>;
 // CHECK: index-concepts.cpp:[[@LINE-1]]:9: ConceptDecl=ConTwoTemplateParams:[[@LINE-1]]:9 (Definition) Extent=[[[@LINE-2]]:1 - [[@LINE-1]]:79]
 // CHECK: index-concepts.cpp:[[@LINE-3]]:17: TemplateTypeParameter=T1:[[@LINE-3]]:17 (Definition) Extent=[[[@LINE-3]]:11 - [[@LINE-3]]:19] [access=public]
 // CHECK: index-concepts.cpp:[[@LINE-4]]:27: TemplateTypeParameter=T2:[[@LINE-4]]:27 (Definition) Extent=[[[@LINE-4]]:21 - [[@LINE-4]]:29] [access=public]
-// CHECK: index-concepts.cpp:[[@LINE-4]]:32: BinaryOperator= Extent=[[[@LINE-4]]:32 - [[@LINE-4]]:79]
+// CHECK: index-concepts.cpp:[[@LINE-4]]:32: BinaryOperator=&& Extent=[[[@LINE-4]]:32 - [[@LINE-4]]:79]
 // CHECK: index-concepts.cpp:[[@LINE-5]]:32: ConceptSpecializationExpr= Extent=[[[@LINE-5]]:32 - [[@LINE-5]]:54]
 // CHECK: index-concepts.cpp:[[@LINE-6]]:32: NamespaceRef=ns:55:11 Extent=[[[@LINE-6]]:32 - [[@LINE-6]]:34]
 // CHECK: index-concepts.cpp:[[@LINE-7]]:36: TemplateRef=ConInNamespace:58:9 Extent=[[[@LINE-7]]:36 - [[@LINE-7]]:50]
diff --git a/clang/test/Index/load-staticassert.cpp b/clang/test/Index/load-staticassert.cpp
index 04e45c2d74714..99f59885eaed5 100644
--- a/clang/test/Index/load-staticassert.cpp
+++ b/clang/test/Index/load-staticassert.cpp
@@ -3,8 +3,8 @@ static_assert(2 + 2 == 4, "Simple maths");
 
 // RUN: c-index-test -test-load-source all -fno-delayed-template-parsing -std=c++11 %s | FileCheck %s
 // CHECK: load-staticassert.cpp:2:1: StaticAssert=:2:1 (Definition) Extent=[2:1 - 2:42]
-// CHECK: load-staticassert.cpp:2:15: BinaryOperator= Extent=[2:15 - 2:25]
-// CHECK: load-staticassert.cpp:2:15: BinaryOperator= Extent=[2:15 - 2:20]
+// CHECK: load-staticassert.cpp:2:15: BinaryOperator=== Extent=[2:15 - 2:25]
+// CHECK: load-staticassert.cpp:2:15: BinaryOperator=+ Extent=[2:15 - 2:20]
 // CHECK: load-staticassert.cpp:2:15: IntegerLiteral= Extent=[2:15 - 2:16]
 // CHECK: load-staticassert.cpp:2:19: IntegerLiteral= Extent=[2:19 - 2:20]
 // CHECK: load-staticassert.cpp:2:24: IntegerLiteral= Extent=[2:24 - 2:25]
diff --git a/clang/test/Index/nested-binaryoperators.cpp b/clang/test/Index/nested-binaryoperators.cpp
index 57adc6b54664a..443e565744a49 100644
--- a/clang/test/Index/nested-binaryoperators.cpp
+++ b/clang/test/Index/nested-binaryoperators.cpp
@@ -169,1815 +169,2328 @@ int foo(uint c) {
 // CHECK: 3:3: ReturnStmt= Extent=[3:3 - 160:52]
 // CHECK: 3:10: UnexposedExpr= Extent=[3:10 - 160:52]
 // CHECK: 3:10: ParenExpr= Extent=[3:10 - 160:52]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 160:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 160:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 159:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 158:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 158:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 157:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 156:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 155:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 154:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 153:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 152:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 152:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 151:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 151:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 150:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 149:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 148:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 147:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 146:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 145:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 144:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 144:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 143:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 142:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 141:81]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 141:49]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 141:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 141:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 140:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 139:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 138:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 137:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 136:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 135:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 134:81]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 134:49]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 134:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 134:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 133:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 133:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 132:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 131:33]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 130:64]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 130:49]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 130:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 130:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 129:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 128:33]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 127:64]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 127:49]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 127:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 127:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 126:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 126:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 125:63]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 125:31]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 125:16]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 124:64]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 124:49]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 124:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 124:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 123:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 122:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 122:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 121:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 120:51]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 120:19]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 119:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 118:36]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 117:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 116:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 115:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 115:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 114:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 114:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 113:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 112:62]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 112:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 112:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 111:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 110:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 109:62]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 109:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 109:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 108:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 108:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 107:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 106:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 105:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 105:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 104:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 103:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 102:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 101:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 100:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 99:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 98:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 98:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 97:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 96:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 95:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 94:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 93:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 92:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 91:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 90:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 89:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 88:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 87:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 86:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 85:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 84:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 83:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 82:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 82:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 81:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 80:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 79:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 78:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 77:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 76:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 76:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 75:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 74:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 73:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 72:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 71:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 70:62]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 70:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 70:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 69:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 68:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 67:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 66:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 65:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 65:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 64:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 63:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 63:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 62:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 61:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 60:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 59:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 58:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 57:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 56:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 55:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 54:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 53:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 52:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 51:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 51:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 50:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 49:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 48:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 47:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 46:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 46:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 45:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 44:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 44:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 43:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 42:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 41:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 40:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 39:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 38:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 37:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 36:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 35:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 35:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 34:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 33:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 32:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 31:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 30:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 29:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 28:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 27:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 26:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 25:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 24:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 23:45]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 23:15]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 22:46]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 22:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 22:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 21:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 20:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 19:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 19:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 18:48]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 18:18]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 17:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 16:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 15:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 14:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 13:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 12:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 11:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 10:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 9:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 8:34]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 7:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 6:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 5:32]
-// CHECK: 3:11: BinaryOperator= Extent=[3:11 - 4:32]
-// CHECK: 3:12: BinaryOperator= Extent=[3:12 - 3:34]
-// CHECK: 3:12: BinaryOperator= Extent=[3:12 - 3:21]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 160:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 160:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 159:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 158:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 158:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 157:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 156:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 155:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 154:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 153:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 152:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 152:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 151:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 151:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 150:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 149:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 148:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 147:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 146:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 145:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 144:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 144:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 143:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 142:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 141:81]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 141:49]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 141:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 141:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 140:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 139:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 138:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 137:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 136:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 135:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 134:81]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 134:49]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 134:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 134:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 133:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 133:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 132:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 131:33]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 130:64]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 130:49]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 130:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 130:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 129:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 128:33]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 127:64]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 127:49]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 127:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 127:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 126:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 126:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 125:63]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 125:31]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 125:16]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 124:64]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 124:49]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 124:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 124:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 123:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 122:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 122:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 121:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 120:51]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 120:19]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 119:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 118:36]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 117:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 116:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 115:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 115:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 114:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 114:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 113:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 112:62]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 112:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 112:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 111:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 110:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 109:62]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 109:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 109:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 108:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 108:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 107:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 106:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 105:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 105:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 104:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 103:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 102:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 101:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 100:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 99:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 98:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 98:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 97:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 96:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 95:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 94:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 93:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 92:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 91:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 90:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 89:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 88:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 87:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 86:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 85:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 84:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 83:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 82:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 82:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 81:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 80:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 79:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 78:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 77:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 76:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 76:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 75:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 74:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 73:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 72:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 71:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 70:62]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 70:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 70:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 69:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 68:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 67:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 66:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 65:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 65:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 64:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 63:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 63:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 62:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 61:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 60:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 59:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 58:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 57:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 56:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 55:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 54:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 53:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 52:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 51:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 51:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 50:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 49:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 48:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 47:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 46:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 46:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 45:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 44:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 44:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 43:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 42:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 41:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 40:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 39:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 38:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 37:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 36:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 35:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 35:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 34:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 33:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 32:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 31:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 30:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 29:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 28:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 27:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 26:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 25:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 24:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 23:45]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 23:15]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 22:46]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 22:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 22:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 21:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 20:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 19:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 19:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 18:48]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 18:18]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 17:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 16:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 15:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 14:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 13:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 12:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 11:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 10:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 9:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 8:34]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 7:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 6:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 5:32]
+// CHECK: 3:11: BinaryOperator=|| Extent=[3:11 - 4:32]
+// CHECK: 3:11: ParenExpr= Extent=[3:11 - 3:35]
+// CHECK: 3:12: BinaryOperator=&& Extent=[3:12 - 3:34]
+// CHECK: 3:12: BinaryOperator=>= Extent=[3:12 - 3:21]
+// CHECK: 3:12: UnexposedExpr=c:2:14 Extent=[3:12 - 3:13]
 // CHECK: 3:12: DeclRefExpr=c:2:14 Extent=[3:12 - 3:13]
 // CHECK: 3:17: UnexposedExpr= Extent=[3:17 - 3:21]
 // CHECK: 3:17: IntegerLiteral= Extent=[3:17 - 3:21]
-// CHECK: 3:25: BinaryOperator= Extent=[3:25 - 3:34]
+// CHECK: 3:25: BinaryOperator=<= Extent=[3:25 - 3:34]
+// CHECK: 3:25: UnexposedExpr=c:2:14 Extent=[3:25 - 3:26]
 // CHECK: 3:25: DeclRefExpr=c:2:14 Extent=[3:25 - 3:26]
 // CHECK: 3:30: UnexposedExpr= Extent=[3:30 - 3:34]
 // CHECK: 3:30: IntegerLiteral= Extent=[3:30 - 3:34]
-// CHECK: 4:9: BinaryOperator= Extent=[4:9 - 4:31]
-// CHECK: 4:9: BinaryOperator= Extent=[4:9 - 4:18]
+// CHECK: 4:8: ParenExpr= Extent=[4:8 - 4:32]
+// CHECK: 4:9: BinaryOperator=&& Extent=[4:9 - 4:31]
+// CHECK: 4:9: BinaryOperator=>= Extent=[4:9 - 4:18]
+// CHECK: 4:9: UnexposedExpr=c:2:14 Extent=[4:9 - 4:10]
 // CHECK: 4:9: DeclRefExpr=c:2:14 Extent=[4:9 - 4:10]
 // CHECK: 4:14: UnexposedExpr= Extent=[4:14 - 4:18]
 // CHECK: 4:14: IntegerLiteral= Extent=[4:14 - 4:18]
-// CHECK: 4:22: BinaryOperator= Extent=[4:22 - 4:31]
+// CHECK: 4:22: BinaryOperator=<= Extent=[4:22 - 4:31]
+// CHECK: 4:22: UnexposedExpr=c:2:14 Extent=[4:22 - 4:23]
 // CHECK: 4:22: DeclRefExpr=c:2:14 Extent=[4:22 - 4:23]
 // CHECK: 4:27: UnexposedExpr= Extent=[4:27 - 4:31]
 // CHECK: 4:27: IntegerLiteral= Extent=[4:27 - 4:31]
 // CHECK: 5:8: ParenExpr= Extent=[5:8 - 5:32]
-// CHECK: 5:9: BinaryOperator= Extent=[5:9 - 5:31]
-// CHECK: 5:9: BinaryOperator= Extent=[5:9 - 5:18]
+// CHECK: 5:9: BinaryOperator=&& Extent=[5:9 - 5:31]
+// CHECK: 5:9: BinaryOperator=>= Extent=[5:9 - 5:18]
+// CHECK: 5:9: UnexposedExpr=c:2:14 Extent=[5:9 - 5:10]
 // CHECK: 5:9: DeclRefExpr=c:2:14 Extent=[5:9 - 5:10]
 // CHECK: 5:14: UnexposedExpr= Extent=[5:14 - 5:18]
 // CHECK: 5:14: IntegerLiteral= Extent=[5:14 - 5:18]
-// CHECK: 5:22: BinaryOperator= Extent=[5:22 - 5:31]
+// CHECK: 5:22: BinaryOperator=<= Extent=[5:22 - 5:31]
+// CHECK: 5:22: UnexposedExpr=c:2:14 Extent=[5:22 - 5:23]
 // CHECK: 5:22: DeclRefExpr=c:2:14 Extent=[5:22 - 5:23]
 // CHECK: 5:27: UnexposedExpr= Extent=[5:27 - 5:31]
 // CHECK: 5:27: IntegerLiteral= Extent=[5:27 - 5:31]
-// CHECK: 6:9: BinaryOperator= Extent=[6:9 - 6:31]
-// CHECK: 6:9: BinaryOperator= Extent=[6:9 - 6:18]
+// CHECK: 6:8: ParenExpr= Extent=[6:8 - 6:32]
+// CHECK: 6:9: BinaryOperator=&& Extent=[6:9 - 6:31]
+// CHECK: 6:9: BinaryOperator=>= Extent=[6:9 - 6:18]
+// CHECK: 6:9: UnexposedExpr=c:2:14 Extent=[6:9 - 6:10]
 // CHECK: 6:9: DeclRefExpr=c:2:14 Extent=[6:9 - 6:10]
 // CHECK: 6:14: UnexposedExpr= Extent=[6:14 - 6:18]
 // CHECK: 6:14: IntegerLiteral= Extent=[6:14 - 6:18]
-// CHECK: 6:22: BinaryOperator= Extent=[6:22 - 6:31]
+// CHECK: 6:22: BinaryOperator=<= Extent=[6:22 - 6:31]
+// CHECK: 6:22: UnexposedExpr=c:2:14 Extent=[6:22 - 6:23]
 // CHECK: 6:22: DeclRefExpr=c:2:14 Extent=[6:22 - 6:23]
 // CHECK: 6:27: UnexposedExpr= Extent=[6:27 - 6:31]
 // CHECK: 6:27: IntegerLiteral= Extent=[6:27 - 6:31]
-// CHECK: 7:9: BinaryOperator= Extent=[7:9 - 7:31]
-// CHECK: 7:9: BinaryOperator= Extent=[7:9 - 7:18]
+// CHECK: 7:8: ParenExpr= Extent=[7:8 - 7:32]
+// CHECK: 7:9: BinaryOperator=&& Extent=[7:9 - 7:31]
+// CHECK: 7:9: BinaryOperator=>= Extent=[7:9 - 7:18]
+// CHECK: 7:9: UnexposedExpr=c:2:14 Extent=[7:9 - 7:10]
 // CHECK: 7:9: DeclRefExpr=c:2:14 Extent=[7:9 - 7:10]
 // CHECK: 7:14: UnexposedExpr= Extent=[7:14 - 7:18]
 // CHECK: 7:14: IntegerLiteral= Extent=[7:14 - 7:18]
-// CHECK: 7:22: BinaryOperator= Extent=[7:22 - 7:31]
+// CHECK: 7:22: BinaryOperator=<= Extent=[7:22 - 7:31]
+// CHECK: 7:22: UnexposedExpr=c:2:14 Extent=[7:22 - 7:23]
 // CHECK: 7:22: DeclRefExpr=c:2:14 Extent=[7:22 - 7:23]
 // CHECK: 7:27: UnexposedExpr= Extent=[7:27 - 7:31]
 // CHECK: 7:27: IntegerLiteral= Extent=[7:27 - 7:31]
-// CHECK: 8:9: BinaryOperator= Extent=[8:9 - 8:33]
-// CHECK: 8:9: BinaryOperator= Extent=[8:9 - 8:19]
+// CHECK: 8:8: ParenExpr= Extent=[8:8 - 8:34]
+// CHECK: 8:9: BinaryOperator=&& Extent=[8:9 - 8:33]
+// CHECK: 8:9: BinaryOperator=>= Extent=[8:9 - 8:19]
+// CHECK: 8:9: UnexposedExpr=c:2:14 Extent=[8:9 - 8:10]
 // CHECK: 8:9: DeclRefExpr=c:2:14 Extent=[8:9 - 8:10]
 // CHECK: 8:14: UnexposedExpr= Extent=[8:14 - 8:19]
 // CHECK: 8:14: IntegerLiteral= Extent=[8:14 - 8:19]
-// CHECK: 8:23: BinaryOperator= Extent=[8:23 - 8:33]
+// CHECK: 8:23: BinaryOperator=<= Extent=[8:23 - 8:33]
+// CHECK: 8:23: UnexposedExpr=c:2:14 Extent=[8:23 - 8:24]
 // CHECK: 8:23: DeclRefExpr=c:2:14 Extent=[8:23 - 8:24]
 // CHECK: 8:28: UnexposedExpr= Extent=[8:28 - 8:33]
 // CHECK: 8:28: IntegerLiteral= Extent=[8:28 - 8:33]
-// CHECK: 9:9: BinaryOperator= Extent=[9:9 - 9:33]
-// CHECK: 9:9: BinaryOperator= Extent=[9:9 - 9:19]
+// CHECK: 9:8: ParenExpr= Extent=[9:8 - 9:34]
+// CHECK: 9:9: BinaryOperator=&& Extent=[9:9 - 9:33]
+// CHECK: 9:9: BinaryOperator=>= Extent=[9:9 - 9:19]
+// CHECK: 9:9: UnexposedExpr=c:2:14 Extent=[9:9 - 9:10]
 // CHECK: 9:9: DeclRefExpr=c:2:14 Extent=[9:9 - 9:10]
 // CHECK: 9:14: UnexposedExpr= Extent=[9:14 - 9:19]
 // CHECK: 9:14: IntegerLiteral= Extent=[9:14 - 9:19]
-// CHECK: 9:23: BinaryOperator= Extent=[9:23 - 9:33]
+// CHECK: 9:23: BinaryOperator=<= Extent=[9:23 - 9:33]
+// CHECK: 9:23: UnexposedExpr=c:2:14 Extent=[9:23 - 9:24]
 // CHECK: 9:23: DeclRefExpr=c:2:14 Extent=[9:23 - 9:24]
 // CHECK: 9:28: UnexposedExpr= Extent=[9:28 - 9:33]
 // CHECK: 9:28: IntegerLiteral= Extent=[9:28 - 9:33]
-// CHECK: 10:9: BinaryOperator= Extent=[10:9 - 10:33]
-// CHECK: 10:9: BinaryOperator= Extent=[10:9 - 10:19]
+// CHECK: 10:8: ParenExpr= Extent=[10:8 - 10:34]
+// CHECK: 10:9: BinaryOperator=&& Extent=[10:9 - 10:33]
+// CHECK: 10:9: BinaryOperator=>= Extent=[10:9 - 10:19]
+// CHECK: 10:9: UnexposedExpr=c:2:14 Extent=[10:9 - 10:10]
 // CHECK: 10:9: DeclRefExpr=c:2:14 Extent=[10:9 - 10:10]
 // CHECK: 10:14: UnexposedExpr= Extent=[10:14 - 10:19]
 // CHECK: 10:14: IntegerLiteral= Extent=[10:14 - 10:19]
-// CHECK: 10:23: BinaryOperator= Extent=[10:23 - 10:33]
+// CHECK: 10:23: BinaryOperator=<= Extent=[10:23 - 10:33]
+// CHECK: 10:23: UnexposedExpr=c:2:14 Extent=[10:23 - 10:24]
 // CHECK: 10:23: DeclRefExpr=c:2:14 Extent=[10:23 - 10:24]
 // CHECK: 10:28: UnexposedExpr= Extent=[10:28 - 10:33]
 // CHECK: 10:28: IntegerLiteral= Extent=[10:28 - 10:33]
-// CHECK: 11:9: BinaryOperator= Extent=[11:9 - 11:33]
-// CHECK: 11:9: BinaryOperator= Extent=[11:9 - 11:19]
+// CHECK: 11:8: ParenExpr= Extent=[11:8 - 11:34]
+// CHECK: 11:9: BinaryOperator=&& Extent=[11:9 - 11:33]
+// CHECK: 11:9: BinaryOperator=>= Extent=[11:9 - 11:19]
+// CHECK: 11:9: UnexposedExpr=c:2:14 Extent=[11:9 - 11:10]
 // CHECK: 11:9: DeclRefExpr=c:2:14 Extent=[11:9 - 11:10]
 // CHECK: 11:14: UnexposedExpr= Extent=[11:14 - 11:19]
 // CHECK: 11:14: IntegerLiteral= Extent=[11:14 - 11:19]
-// CHECK: 11:23: BinaryOperator= Extent=[11:23 - 11:33]
+// CHECK: 11:23: BinaryOperator=<= Extent=[11:23 - 11:33]
+// CHECK: 11:23: UnexposedExpr=c:2:14 Extent=[11:23 - 11:24]
 // CHECK: 11:23: DeclRefExpr=c:2:14 Extent=[11:23 - 11:24]
 // CHECK: 11:28: UnexposedExpr= Extent=[11:28 - 11:33]
 // CHECK: 11:28: IntegerLiteral= Extent=[11:28 - 11:33]
-// CHECK: 12:9: BinaryOperator= Extent=[12:9 - 12:33]
-// CHECK: 12:9: BinaryOperator= Extent=[12:9 - 12:19]
+// CHECK: 12:8: ParenExpr= Extent=[12:8 - 12:34]
+// CHECK: 12:9: BinaryOperator=&& Extent=[12:9 - 12:33]
+// CHECK: 12:9: BinaryOperator=>= Extent=[12:9 - 12:19]
+// CHECK: 12:9: UnexposedExpr=c:2:14 Extent=[12:9 - 12:10]
 // CHECK: 12:9: DeclRefExpr=c:2:14 Extent=[12:9 - 12:10]
 // CHECK: 12:14: UnexposedExpr= Extent=[12:14 - 12:19]
 // CHECK: 12:14: IntegerLiteral= Extent=[12:14 - 12:19]
-// CHECK: 12:23: BinaryOperator= Extent=[12:23 - 12:33]
+// CHECK: 12:23: BinaryOperator=<= Extent=[12:23 - 12:33]
+// CHECK: 12:23: UnexposedExpr=c:2:14 Extent=[12:23 - 12:24]
 // CHECK: 12:23: DeclRefExpr=c:2:14 Extent=[12:23 - 12:24]
 // CHECK: 12:28: UnexposedExpr= Extent=[12:28 - 12:33]
 // CHECK: 12:28: IntegerLiteral= Extent=[12:28 - 12:33]
-// CHECK: 13:9: BinaryOperator= Extent=[13:9 - 13:33]
-// CHECK: 13:9: BinaryOperator= Extent=[13:9 - 13:19]
+// CHECK: 13:8: ParenExpr= Extent=[13:8 - 13:34]
+// CHECK: 13:9: BinaryOperator=&& Extent=[13:9 - 13:33]
+// CHECK: 13:9: BinaryOperator=>= Extent=[13:9 - 13:19]
+// CHECK: 13:9: UnexposedExpr=c:2:14 Extent=[13:9 - 13:10]
 // CHECK: 13:9: DeclRefExpr=c:2:14 Extent=[13:9 - 13:10]
 // CHECK: 13:14: UnexposedExpr= Extent=[13:14 - 13:19]
 // CHECK: 13:14: IntegerLiteral= Extent=[13:14 - 13:19]
-// CHECK: 13:23: BinaryOperator= Extent=[13:23 - 13:33]
+// CHECK: 13:23: BinaryOperator=<= Extent=[13:23 - 13:33]
+// CHECK: 13:23: UnexposedExpr=c:2:14 Extent=[13:23 - 13:24]
 // CHECK: 13:23: DeclRefExpr=c:2:14 Extent=[13:23 - 13:24]
 // CHECK: 13:28: UnexposedExpr= Extent=[13:28 - 13:33]
 // CHECK: 13:28: IntegerLiteral= Extent=[13:28 - 13:33]
-// CHECK: 14:9: BinaryOperator= Extent=[14:9 - 14:33]
-// CHECK: 14:9: BinaryOperator= Extent=[14:9 - 14:19]
+// CHECK: 14:8: ParenExpr= Extent=[14:8 - 14:34]
+// CHECK: 14:9: BinaryOperator=&& Extent=[14:9 - 14:33]
+// CHECK: 14:9: BinaryOperator=>= Extent=[14:9 - 14:19]
+// CHECK: 14:9: UnexposedExpr=c:2:14 Extent=[14:9 - 14:10]
 // CHECK: 14:9: DeclRefExpr=c:2:14 Extent=[14:9 - 14:10]
 // CHECK: 14:14: UnexposedExpr= Extent=[14:14 - 14:19]
 // CHECK: 14:14: IntegerLiteral= Extent=[14:14 - 14:19]
-// CHECK: 14:23: BinaryOperator= Extent=[14:23 - 14:33]
+// CHECK: 14:23: BinaryOperator=<= Extent=[14:23 - 14:33]
+// CHECK: 14:23: UnexposedExpr=c:2:14 Extent=[14:23 - 14:24]
 // CHECK: 14:23: DeclRefExpr=c:2:14 Extent=[14:23 - 14:24]
 // CHECK: 14:28: UnexposedExpr= Extent=[14:28 - 14:33]
 // CHECK: 14:28: IntegerLiteral= Extent=[14:28 - 14:33]
-// CHECK: 15:9: BinaryOperator= Extent=[15:9 - 15:33]
-// CHECK: 15:9: BinaryOperator= Extent=[15:9 - 15:19]
+// CHECK: 15:8: ParenExpr= Extent=[15:8 - 15:34]
+// CHECK: 15:9: BinaryOperator=&& Extent=[15:9 - 15:33]
+// CHECK: 15:9: BinaryOperator=>= Extent=[15:9 - 15:19]
+// CHECK: 15:9: UnexposedExpr=c:2:14 Extent=[15:9 - 15:10]
 // CHECK: 15:9: DeclRefExpr=c:2:14 Extent=[15:9 - 15:10]
 // CHECK: 15:14: UnexposedExpr= Extent=[15:14 - 15:19]
 // CHECK: 15:14: IntegerLiteral= Extent=[15:14 - 15:19]
-// CHECK: 15:23: BinaryOperator= Extent=[15:23 - 15:33]
+// CHECK: 15:23: BinaryOperator=<= Extent=[15:23 - 15:33]
+// CHECK: 15:23: UnexposedExpr=c:2:14 Extent=[15:23 - 15:24]
 // CHECK: 15:23: DeclRefExpr=c:2:14 Extent=[15:23 - 15:24]
 // CHECK: 15:28: UnexposedExpr= Extent=[15:28 - 15:33]
 // CHECK: 15:28: IntegerLiteral= Extent=[15:28 - 15:33]
-// CHECK: 16:9: BinaryOperator= Extent=[16:9 - 16:33]
-// CHECK: 16:9: BinaryOperator= Extent=[16:9 - 16:19]
+// CHECK: 16:8: ParenExpr= Extent=[16:8 - 16:34]
+// CHECK: 16:9: BinaryOperator=&& Extent=[16:9 - 16:33]
+// CHECK: 16:9: BinaryOperator=>= Extent=[16:9 - 16:19]
+// CHECK: 16:9: UnexposedExpr=c:2:14 Extent=[16:9 - 16:10]
 // CHECK: 16:9: DeclRefExpr=c:2:14 Extent=[16:9 - 16:10]
 // CHECK: 16:14: UnexposedExpr= Extent=[16:14 - 16:19]
 // CHECK: 16:14: IntegerLiteral= Extent=[16:14 - 16:19]
-// CHECK: 16:23: BinaryOperator= Extent=[16:23 - 16:33]
+// CHECK: 16:23: BinaryOperator=<= Extent=[16:23 - 16:33]
+// CHECK: 16:23: UnexposedExpr=c:2:14 Extent=[16:23 - 16:24]
 // CHECK: 16:23: DeclRefExpr=c:2:14 Extent=[16:23 - 16:24]
 // CHECK: 16:28: UnexposedExpr= Extent=[16:28 - 16:33]
 // CHECK: 16:28: IntegerLiteral= Extent=[16:28 - 16:33]
-// CHECK: 17:9: BinaryOperator= Extent=[17:9 - 17:33]
-// CHECK: 17:9: BinaryOperator= Extent=[17:9 - 17:19]
+// CHECK: 17:8: ParenExpr= Extent=[17:8 - 17:34]
+// CHECK: 17:9: BinaryOperator=&& Extent=[17:9 - 17:33]
+// CHECK: 17:9: BinaryOperator=>= Extent=[17:9 - 17:19]
+// CHECK: 17:9: UnexposedExpr=c:2:14 Extent=[17:9 - 17:10]
 // CHECK: 17:9: DeclRefExpr=c:2:14 Extent=[17:9 - 17:10]
 // CHECK: 17:14: UnexposedExpr= Extent=[17:14 - 17:19]
 // CHECK: 17:14: IntegerLiteral= Extent=[17:14 - 17:19]
-// CHECK: 17:23: BinaryOperator= Extent=[17:23 - 17:33]
+// CHECK: 17:23: BinaryOperator=<= Extent=[17:23 - 17:33]
+// CHECK: 17:23: UnexposedExpr=c:2:14 Extent=[17:23 - 17:24]
 // CHECK: 17:23: DeclRefExpr=c:2:14 Extent=[17:23 - 17:24]
 // CHECK: 17:28: UnexposedExpr= Extent=[17:28 - 17:33]
 // CHECK: 17:28: IntegerLiteral= Extent=[17:28 - 17:33]
-// CHECK: 18:8: BinaryOperator= Extent=[18:8 - 18:18]
+// CHECK: 18:8: BinaryOperator=== Extent=[18:8 - 18:18]
+// CHECK: 18:8: UnexposedExpr=c:2:14 Extent=[18:8 - 18:9]
 // CHECK: 18:8: DeclRefExpr=c:2:14 Extent=[18:8 - 18:9]
 // CHECK: 18:13: UnexposedExpr= Extent=[18:13 - 18:18]
 // CHECK: 18:13: IntegerLiteral= Extent=[18:13 - 18:18]
-// CHECK: 18:23: BinaryOperator= Extent=[18:23 - 18:47]
-// CHECK: 18:23: BinaryOperator= Extent=[18:23 - 18:33]
+// CHECK: 18:22: ParenExpr= Extent=[18:22 - 18:48]
+// CHECK: 18:23: BinaryOperator=&& Extent=[18:23 - 18:47]
+// CHECK: 18:23: BinaryOperator=>= Extent=[18:23 - 18:33]
+// CHECK: 18:23: UnexposedExpr=c:2:14 Extent=[18:23 - 18:24]
 // CHECK: 18:23: DeclRefExpr=c:2:14 Extent=[18:23 - 18:24]
 // CHECK: 18:28: UnexposedExpr= Extent=[18:28 - 18:33]
 // CHECK: 18:28: IntegerLiteral= Extent=[18:28 - 18:33]
-// CHECK: 18:37: BinaryOperator= Extent=[18:37 - 18:47]
+// CHECK: 18:37: BinaryOperator=<= Extent=[18:37 - 18:47]
+// CHECK: 18:37: UnexposedExpr=c:2:14 Extent=[18:37 - 18:38]
 // CHECK: 18:37: DeclRefExpr=c:2:14 Extent=[18:37 - 18:38]
 // CHECK: 18:42: UnexposedExpr= Extent=[18:42 - 18:47]
 // CHECK: 18:42: IntegerLiteral= Extent=[18:42 - 18:47]
-// CHECK: 19:8: BinaryOperator= Extent=[19:8 - 19:18]
+// CHECK: 19:8: BinaryOperator=== Extent=[19:8 - 19:18]
+// CHECK: 19:8: UnexposedExpr=c:2:14 Extent=[19:8 - 19:9]
 // CHECK: 19:8: DeclRefExpr=c:2:14 Extent=[19:8 - 19:9]
 // CHECK: 19:13: UnexposedExpr= Extent=[19:13 - 19:18]
 // CHECK: 19:13: IntegerLiteral= Extent=[19:13 - 19:18]
-// CHECK: 19:23: BinaryOperator= Extent=[19:23 - 19:47]
-// CHECK: 19:23: BinaryOperator= Extent=[19:23 - 19:33]
+// CHECK: 19:22: ParenExpr= Extent=[19:22 - 19:48]
+// CHECK: 19:23: BinaryOperator=&& Extent=[19:23 - 19:47]
+// CHECK: 19:23: BinaryOperator=>= Extent=[19:23 - 19:33]
+// CHECK: 19:23: UnexposedExpr=c:2:14 Extent=[19:23 - 19:24]
 // CHECK: 19:23: DeclRefExpr=c:2:14 Extent=[19:23 - 19:24]
 // CHECK: 19:28: UnexposedExpr= Extent=[19:28 - 19:33]
 // CHECK: 19:28: IntegerLiteral= Extent=[19:28 - 19:33]
-// CHECK: 19:37: BinaryOperator= Extent=[19:37 - 19:47]
+// CHECK: 19:37: BinaryOperator=<= Extent=[19:37 - 19:47]
+// CHECK: 19:37: UnexposedExpr=c:2:14 Extent=[19:37 - 19:38]
 // CHECK: 19:37: DeclRefExpr=c:2:14 Extent=[19:37 - 19:38]
 // CHECK: 19:42: UnexposedExpr= Extent=[19:42 - 19:47]
 // CHECK: 19:42: IntegerLiteral= Extent=[19:42 - 19:47]
-// CHECK: 20:9: BinaryOperator= Extent=[20:9 - 20:33]
-// CHECK: 20:9: BinaryOperator= Extent=[20:9 - 20:19]
+// CHECK: 20:8: ParenExpr= Extent=[20:8 - 20:34]
+// CHECK: 20:9: BinaryOperator=&& Extent=[20:9 - 20:33]
+// CHECK: 20:9: BinaryOperator=>= Extent=[20:9 - 20:19]
+// CHECK: 20:9: UnexposedExpr=c:2:14 Extent=[20:9 - 20:10]
 // CHECK: 20:9: DeclRefExpr=c:2:14 Extent=[20:9 - 20:10]
 // CHECK: 20:14: UnexposedExpr= Extent=[20:14 - 20:19]
 // CHECK: 20:14: IntegerLiteral= Extent=[20:14 - 20:19]
-// CHECK: 20:23: BinaryOperator= Extent=[20:23 - 20:33]
+// CHECK: 20:23: BinaryOperator=<= Extent=[20:23 - 20:33]
+// CHECK: 20:23: UnexposedExpr=c:2:14 Extent=[20:23 - 20:24]
 // CHECK: 20:23: DeclRefExpr=c:2:14 Extent=[20:23 - 20:24]
 // CHECK: 20:28: UnexposedExpr= Extent=[20:28 - 20:33]
 // CHECK: 20:28: IntegerLiteral= Extent=[20:28 - 20:33]
-// CHECK: 21:9: BinaryOperator= Extent=[21:9 - 21:33]
-// CHECK: 21:9: BinaryOperator= Extent=[21:9 - 21:19]
+// CHECK: 21:8: ParenExpr= Extent=[21:8 - 21:34]
+// CHECK: 21:9: BinaryOperator=&& Extent=[21:9 - 21:33]
+// CHECK: 21:9: BinaryOperator=>= Extent=[21:9 - 21:19]
+// CHECK: 21:9: UnexposedExpr=c:2:14 Extent=[21:9 - 21:10]
 // CHECK: 21:9: DeclRefExpr=c:2:14 Extent=[21:9 - 21:10]
 // CHECK: 21:14: UnexposedExpr= Extent=[21:14 - 21:19]
 // CHECK: 21:14: IntegerLiteral= Extent=[21:14 - 21:19]
-// CHECK: 21:23: BinaryOperator= Extent=[21:23 - 21:33]
+// CHECK: 21:23: BinaryOperator=<= Extent=[21:23 - 21:33]
+// CHECK: 21:23: UnexposedExpr=c:2:14 Extent=[21:23 - 21:24]
 // CHECK: 21:23: DeclRefExpr=c:2:14 Extent=[21:23 - 21:24]
 // CHECK: 21:28: UnexposedExpr= Extent=[21:28 - 21:33]
 // CHECK: 21:28: IntegerLiteral= Extent=[21:28 - 21:33]
-// CHECK: 22:8: BinaryOperator= Extent=[22:8 - 22:18]
+// CHECK: 22:8: BinaryOperator=== Extent=[22:8 - 22:18]
+// CHECK: 22:8: UnexposedExpr=c:2:14 Extent=[22:8 - 22:9]
 // CHECK: 22:8: DeclRefExpr=c:2:14 Extent=[22:8 - 22:9]
 // CHECK: 22:13: UnexposedExpr= Extent=[22:13 - 22:18]
 // CHECK: 22:13: IntegerLiteral= Extent=[22:13 - 22:18]
-// CHECK: 22:22: BinaryOperator= Extent=[22:22 - 22:32]
+// CHECK: 22:22: BinaryOperator=== Extent=[22:22 - 22:32]
+// CHECK: 22:22: UnexposedExpr=c:2:14 Extent=[22:22 - 22:23]
 // CHECK: 22:22: DeclRefExpr=c:2:14 Extent=[22:22 - 22:23]
 // CHECK: 22:27: UnexposedExpr= Extent=[22:27 - 22:32]
 // CHECK: 22:27: IntegerLiteral= Extent=[22:27 - 22:32]
-// CHECK: 22:36: BinaryOperator= Extent=[22:36 - 22:46]
+// CHECK: 22:36: BinaryOperator=== Extent=[22:36 - 22:46]
+// CHECK: 22:36: UnexposedExpr=c:2:14 Extent=[22:36 - 22:37]
 // CHECK: 22:36: DeclRefExpr=c:2:14 Extent=[22:36 - 22:37]
 // CHECK: 22:41: UnexposedExpr= Extent=[22:41 - 22:46]
 // CHECK: 22:41: IntegerLiteral= Extent=[22:41 - 22:46]
-// CHECK: 23:5: BinaryOperator= Extent=[23:5 - 23:15]
+// CHECK: 23:5: BinaryOperator=== Extent=[23:5 - 23:15]
+// CHECK: 23:5: UnexposedExpr=c:2:14 Extent=[23:5 - 23:6]
 // CHECK: 23:5: DeclRefExpr=c:2:14 Extent=[23:5 - 23:6]
 // CHECK: 23:10: UnexposedExpr= Extent=[23:10 - 23:15]
 // CHECK: 23:10: IntegerLiteral= Extent=[23:10 - 23:15]
-// CHECK: 23:20: BinaryOperator= Extent=[23:20 - 23:44]
-// CHECK: 23:20: BinaryOperator= Extent=[23:20 - 23:30]
+// CHECK: 23:19: ParenExpr= Extent=[23:19 - 23:45]
+// CHECK: 23:20: BinaryOperator=&& Extent=[23:20 - 23:44]
+// CHECK: 23:20: BinaryOperator=>= Extent=[23:20 - 23:30]
+// CHECK: 23:20: UnexposedExpr=c:2:14 Extent=[23:20 - 23:21]
 // CHECK: 23:20: DeclRefExpr=c:2:14 Extent=[23:20 - 23:21]
 // CHECK: 23:25: UnexposedExpr= Extent=[23:25 - 23:30]
 // CHECK: 23:25: IntegerLiteral= Extent=[23:25 - 23:30]
-// CHECK: 23:34: BinaryOperator= Extent=[23:34 - 23:44]
+// CHECK: 23:34: BinaryOperator=<= Extent=[23:34 - 23:44]
+// CHECK: 23:34: UnexposedExpr=c:2:14 Extent=[23:34 - 23:35]
 // CHECK: 23:34: DeclRefExpr=c:2:14 Extent=[23:34 - 23:35]
 // CHECK: 23:39: UnexposedExpr= Extent=[23:39 - 23:44]
 // CHECK: 23:39: IntegerLiteral= Extent=[23:39 - 23:44]
-// CHECK: 24:9: BinaryOperator= Extent=[24:9 - 24:33]
-// CHECK: 24:9: BinaryOperator= Extent=[24:9 - 24:19]
+// CHECK: 24:8: ParenExpr= Extent=[24:8 - 24:34]
+// CHECK: 24:9: BinaryOperator=&& Extent=[24:9 - 24:33]
+// CHECK: 24:9: BinaryOperator=>= Extent=[24:9 - 24:19]
+// CHECK: 24:9: UnexposedExpr=c:2:14 Extent=[24:9 - 24:10]
 // CHECK: 24:9: DeclRefExpr=c:2:14 Extent=[24:9 - 24:10]
 // CHECK: 24:14: UnexposedExpr= Extent=[24:14 - 24:19]
 // CHECK: 24:14: IntegerLiteral= Extent=[24:14 - 24:19]
-// CHECK: 24:23: BinaryOperator= Extent=[24:23 - 24:33]
+// CHECK: 24:23: BinaryOperator=<= Extent=[24:23 - 24:33]
+// CHECK: 24:23: UnexposedExpr=c:2:14 Extent=[24:23 - 24:24]
 // CHECK: 24:23: DeclRefExpr=c:2:14 Extent=[24:23 - 24:24]
 // CHECK: 24:28: UnexposedExpr= Extent=[24:28 - 24:33]
 // CHECK: 24:28: IntegerLiteral= Extent=[24:28 - 24:33]
-// CHECK: 25:9: BinaryOperator= Extent=[25:9 - 25:33]
-// CHECK: 25:9: BinaryOperator= Extent=[25:9 - 25:19]
+// CHECK: 25:8: ParenExpr= Extent=[25:8 - 25:34]
+// CHECK: 25:9: BinaryOperator=&& Extent=[25:9 - 25:33]
+// CHECK: 25:9: BinaryOperator=>= Extent=[25:9 - 25:19]
+// CHECK: 25:9: UnexposedExpr=c:2:14 Extent=[25:9 - 25:10]
 // CHECK: 25:9: DeclRefExpr=c:2:14 Extent=[25:9 - 25:10]
 // CHECK: 25:14: UnexposedExpr= Extent=[25:14 - 25:19]
 // CHECK: 25:14: IntegerLiteral= Extent=[25:14 - 25:19]
-// CHECK: 25:23: BinaryOperator= Extent=[25:23 - 25:33]
+// CHECK: 25:23: BinaryOperator=<= Extent=[25:23 - 25:33]
+// CHECK: 25:23: UnexposedExpr=c:2:14 Extent=[25:23 - 25:24]
 // CHECK: 25:23: DeclRefExpr=c:2:14 Extent=[25:23 - 25:24]
 // CHECK: 25:28: UnexposedExpr= Extent=[25:28 - 25:33]
 // CHECK: 25:28: IntegerLiteral= Extent=[25:28 - 25:33]
-// CHECK: 26:9: BinaryOperator= Extent=[26:9 - 26:33]
-// CHECK: 26:9: BinaryOperator= Extent=[26:9 - 26:19]
+// CHECK: 26:8: ParenExpr= Extent=[26:8 - 26:34]
+// CHECK: 26:9: BinaryOperator=&& Extent=[26:9 - 26:33]
+// CHECK: 26:9: BinaryOperator=>= Extent=[26:9 - 26:19]
+// CHECK: 26:9: UnexposedExpr=c:2:14 Extent=[26:9 - 26:10]
 // CHECK: 26:9: DeclRefExpr=c:2:14 Extent=[26:9 - 26:10]
 // CHECK: 26:14: UnexposedExpr= Extent=[26:14 - 26:19]
 // CHECK: 26:14: IntegerLiteral= Extent=[26:14 - 26:19]
-// CHECK: 26:23: BinaryOperator= Extent=[26:23 - 26:33]
+// CHECK: 26:23: BinaryOperator=<= Extent=[26:23 - 26:33]
+// CHECK: 26:23: UnexposedExpr=c:2:14 Extent=[26:23 - 26:24]
 // CHECK: 26:23: DeclRefExpr=c:2:14 Extent=[26:23 - 26:24]
 // CHECK: 26:28: UnexposedExpr= Extent=[26:28 - 26:33]
 // CHECK: 26:28: IntegerLiteral= Extent=[26:28 - 26:33]
-// CHECK: 27:9: BinaryOperator= Extent=[27:9 - 27:33]
-// CHECK: 27:9: BinaryOperator= Extent=[27:9 - 27:19]
+// CHECK: 27:8: ParenExpr= Extent=[27:8 - 27:34]
+// CHECK: 27:9: BinaryOperator=&& Extent=[27:9 - 27:33]
+// CHECK: 27:9: BinaryOperator=>= Extent=[27:9 - 27:19]
+// CHECK: 27:9: UnexposedExpr=c:2:14 Extent=[27:9 - 27:10]
 // CHECK: 27:9: DeclRefExpr=c:2:14 Extent=[27:9 - 27:10]
 // CHECK: 27:14: UnexposedExpr= Extent=[27:14 - 27:19]
 // CHECK: 27:14: IntegerLiteral= Extent=[27:14 - 27:19]
-// CHECK: 27:23: BinaryOperator= Extent=[27:23 - 27:33]
+// CHECK: 27:23: BinaryOperator=<= Extent=[27:23 - 27:33]
+// CHECK: 27:23: UnexposedExpr=c:2:14 Extent=[27:23 - 27:24]
 // CHECK: 27:23: DeclRefExpr=c:2:14 Extent=[27:23 - 27:24]
 // CHECK: 27:28: UnexposedExpr= Extent=[27:28 - 27:33]
 // CHECK: 27:28: IntegerLiteral= Extent=[27:28 - 27:33]
-// CHECK: 28:9: BinaryOperator= Extent=[28:9 - 28:33]
-// CHECK: 28:9: BinaryOperator= Extent=[28:9 - 28:19]
+// CHECK: 28:8: ParenExpr= Extent=[28:8 - 28:34]
+// CHECK: 28:9: BinaryOperator=&& Extent=[28:9 - 28:33]
+// CHECK: 28:9: BinaryOperator=>= Extent=[28:9 - 28:19]
+// CHECK: 28:9: UnexposedExpr=c:2:14 Extent=[28:9 - 28:10]
 // CHECK: 28:9: DeclRefExpr=c:2:14 Extent=[28:9 - 28:10]
 // CHECK: 28:14: UnexposedExpr= Extent=[28:14 - 28:19]
 // CHECK: 28:14: IntegerLiteral= Extent=[28:14 - 28:19]
-// CHECK: 28:23: BinaryOperator= Extent=[28:23 - 28:33]
+// CHECK: 28:23: BinaryOperator=<= Extent=[28:23 - 28:33]
+// CHECK: 28:23: UnexposedExpr=c:2:14 Extent=[28:23 - 28:24]
 // CHECK: 28:23: DeclRefExpr=c:2:14 Extent=[28:23 - 28:24]
 // CHECK: 28:28: UnexposedExpr= Extent=[28:28 - 28:33]
 // CHECK: 28:28: IntegerLiteral= Extent=[28:28 - 28:33]
-// CHECK: 29:9: BinaryOperator= Extent=[29:9 - 29:33]
-// CHECK: 29:9: BinaryOperator= Extent=[29:9 - 29:19]
+// CHECK: 29:8: ParenExpr= Extent=[29:8 - 29:34]
+// CHECK: 29:9: BinaryOperator=&& Extent=[29:9 - 29:33]
+// CHECK: 29:9: BinaryOperator=>= Extent=[29:9 - 29:19]
+// CHECK: 29:9: UnexposedExpr=c:2:14 Extent=[29:9 - 29:10]
 // CHECK: 29:9: DeclRefExpr=c:2:14 Extent=[29:9 - 29:10]
 // CHECK: 29:14: UnexposedExpr= Extent=[29:14 - 29:19]
 // CHECK: 29:14: IntegerLiteral= Extent=[29:14 - 29:19]
-// CHECK: 29:23: BinaryOperator= Extent=[29:23 - 29:33]
+// CHECK: 29:23: BinaryOperator=<= Extent=[29:23 - 29:33]
+// CHECK: 29:23: UnexposedExpr=c:2:14 Extent=[29:23 - 29:24]
 // CHECK: 29:23: DeclRefExpr=c:2:14 Extent=[29:23 - 29:24]
 // CHECK: 29:28: UnexposedExpr= Extent=[29:28 - 29:33]
 // CHECK: 29:28: IntegerLiteral= Extent=[29:28 - 29:33]
-// CHECK: 30:9: BinaryOperator= Extent=[30:9 - 30:33]
-// CHECK: 30:9: BinaryOperator= Extent=[30:9 - 30:19]
+// CHECK: 30:8: ParenExpr= Extent=[30:8 - 30:34]
+// CHECK: 30:9: BinaryOperator=&& Extent=[30:9 - 30:33]
+// CHECK: 30:9: BinaryOperator=>= Extent=[30:9 - 30:19]
+// CHECK: 30:9: UnexposedExpr=c:2:14 Extent=[30:9 - 30:10]
 // CHECK: 30:9: DeclRefExpr=c:2:14 Extent=[30:9 - 30:10]
 // CHECK: 30:14: UnexposedExpr= Extent=[30:14 - 30:19]
 // CHECK: 30:14: IntegerLiteral= Extent=[30:14 - 30:19]
-// CHECK: 30:23: BinaryOperator= Extent=[30:23 - 30:33]
+// CHECK: 30:23: BinaryOperator=<= Extent=[30:23 - 30:33]
+// CHECK: 30:23: UnexposedExpr=c:2:14 Extent=[30:23 - 30:24]
 // CHECK: 30:23: DeclRefExpr=c:2:14 Extent=[30:23 - 30:24]
 // CHECK: 30:28: UnexposedExpr= Extent=[30:28 - 30:33]
 // CHECK: 30:28: IntegerLiteral= Extent=[30:28 - 30:33]
-// CHECK: 31:9: BinaryOperator= Extent=[31:9 - 31:33]
-// CHECK: 31:9: BinaryOperator= Extent=[31:9 - 31:19]
+// CHECK: 31:8: ParenExpr= Extent=[31:8 - 31:34]
+// CHECK: 31:9: BinaryOperator=&& Extent=[31:9 - 31:33]
+// CHECK: 31:9: BinaryOperator=>= Extent=[31:9 - 31:19]
+// CHECK: 31:9: UnexposedExpr=c:2:14 Extent=[31:9 - 31:10]
 // CHECK: 31:9: DeclRefExpr=c:2:14 Extent=[31:9 - 31:10]
 // CHECK: 31:14: UnexposedExpr= Extent=[31:14 - 31:19]
 // CHECK: 31:14: IntegerLiteral= Extent=[31:14 - 31:19]
-// CHECK: 31:23: BinaryOperator= Extent=[31:23 - 31:33]
+// CHECK: 31:23: BinaryOperator=<= Extent=[31:23 - 31:33]
+// CHECK: 31:23: UnexposedExpr=c:2:14 Extent=[31:23 - 31:24]
 // CHECK: 31:23: DeclRefExpr=c:2:14 Extent=[31:23 - 31:24]
 // CHECK: 31:28: UnexposedExpr= Extent=[31:28 - 31:33]
 // CHECK: 31:28: IntegerLiteral= Extent=[31:28 - 31:33]
-// CHECK: 32:9: BinaryOperator= Extent=[32:9 - 32:33]
-// CHECK: 32:9: BinaryOperator= Extent=[32:9 - 32:19]
+// CHECK: 32:8: ParenExpr= Extent=[32:8 - 32:34]
+// CHECK: 32:9: BinaryOperator=&& Extent=[32:9 - 32:33]
+// CHECK: 32:9: BinaryOperator=>= Extent=[32:9 - 32:19]
+// CHECK: 32:9: UnexposedExpr=c:2:14 Extent=[32:9 - 32:10]
 // CHECK: 32:9: DeclRefExpr=c:2:14 Extent=[32:9 - 32:10]
 // CHECK: 32:14: UnexposedExpr= Extent=[32:14 - 32:19]
 // CHECK: 32:14: IntegerLiteral= Extent=[32:14 - 32:19]
-// CHECK: 32:23: BinaryOperator= Extent=[32:23 - 32:33]
+// CHECK: 32:23: BinaryOperator=<= Extent=[32:23 - 32:33]
+// CHECK: 32:23: UnexposedExpr=c:2:14 Extent=[32:23 - 32:24]
 // CHECK: 32:23: DeclRefExpr=c:2:14 Extent=[32:23 - 32:24]
 // CHECK: 32:28: UnexposedExpr= Extent=[32:28 - 32:33]
 // CHECK: 32:28: IntegerLiteral= Extent=[32:28 - 32:33]
-// CHECK: 33:9: BinaryOperator= Extent=[33:9 - 33:33]
-// CHECK: 33:9: BinaryOperator= Extent=[33:9 - 33:19]
+// CHECK: 33:8: ParenExpr= Extent=[33:8 - 33:34]
+// CHECK: 33:9: BinaryOperator=&& Extent=[33:9 - 33:33]
+// CHECK: 33:9: BinaryOperator=>= Extent=[33:9 - 33:19]
+// CHECK: 33:9: UnexposedExpr=c:2:14 Extent=[33:9 - 33:10]
 // CHECK: 33:9: DeclRefExpr=c:2:14 Extent=[33:9 - 33:10]
 // CHECK: 33:14: UnexposedExpr= Extent=[33:14 - 33:19]
 // CHECK: 33:14: IntegerLiteral= Extent=[33:14 - 33:19]
-// CHECK: 33:23: BinaryOperator= Extent=[33:23 - 33:33]
+// CHECK: 33:23: BinaryOperator=<= Extent=[33:23 - 33:33]
+// CHECK: 33:23: UnexposedExpr=c:2:14 Extent=[33:23 - 33:24]
 // CHECK: 33:23: DeclRefExpr=c:2:14 Extent=[33:23 - 33:24]
 // CHECK: 33:28: UnexposedExpr= Extent=[33:28 - 33:33]
 // CHECK: 33:28: IntegerLiteral= Extent=[33:28 - 33:33]
-// CHECK: 34:9: BinaryOperator= Extent=[34:9 - 34:33]
-// CHECK: 34:9: BinaryOperator= Extent=[34:9 - 34:19]
+// CHECK: 34:8: ParenExpr= Extent=[34:8 - 34:34]
+// CHECK: 34:9: BinaryOperator=&& Extent=[34:9 - 34:33]
+// CHECK: 34:9: BinaryOperator=>= Extent=[34:9 - 34:19]
+// CHECK: 34:9: UnexposedExpr=c:2:14 Extent=[34:9 - 34:10]
 // CHECK: 34:9: DeclRefExpr=c:2:14 Extent=[34:9 - 34:10]
 // CHECK: 34:14: UnexposedExpr= Extent=[34:14 - 34:19]
 // CHECK: 34:14: IntegerLiteral= Extent=[34:14 - 34:19]
-// CHECK: 34:23: BinaryOperator= Extent=[34:23 - 34:33]
+// CHECK: 34:23: BinaryOperator=<= Extent=[34:23 - 34:33]
+// CHECK: 34:23: UnexposedExpr=c:2:14 Extent=[34:23 - 34:24]
 // CHECK: 34:23: DeclRefExpr=c:2:14 Extent=[34:23 - 34:24]
 // CHECK: 34:28: UnexposedExpr= Extent=[34:28 - 34:33]
 // CHECK: 34:28: IntegerLiteral= Extent=[34:28 - 34:33]
-// CHECK: 35:8: BinaryOperator= Extent=[35:8 - 35:18]
+// CHECK: 35:8: BinaryOperator=== Extent=[35:8 - 35:18]
+// CHECK: 35:8: UnexposedExpr=c:2:14 Extent=[35:8 - 35:9]
 // CHECK: 35:8: DeclRefExpr=c:2:14 Extent=[35:8 - 35:9]
 // CHECK: 35:13: UnexposedExpr= Extent=[35:13 - 35:18]
 // CHECK: 35:13: IntegerLiteral= Extent=[35:13 - 35:18]
-// CHECK: 35:23: BinaryOperator= Extent=[35:23 - 35:47]
-// CHECK: 35:23: BinaryOperator= Extent=[35:23 - 35:33]
+// CHECK: 35:22: ParenExpr= Extent=[35:22 - 35:48]
+// CHECK: 35:23: BinaryOperator=&& Extent=[35:23 - 35:47]
+// CHECK: 35:23: BinaryOperator=>= Extent=[35:23 - 35:33]
+// CHECK: 35:23: UnexposedExpr=c:2:14 Extent=[35:23 - 35:24]
 // CHECK: 35:23: DeclRefExpr=c:2:14 Extent=[35:23 - 35:24]
 // CHECK: 35:28: UnexposedExpr= Extent=[35:28 - 35:33]
 // CHECK: 35:28: IntegerLiteral= Extent=[35:28 - 35:33]
-// CHECK: 35:37: BinaryOperator= Extent=[35:37 - 35:47]
+// CHECK: 35:37: BinaryOperator=<= Extent=[35:37 - 35:47]
+// CHECK: 35:37: UnexposedExpr=c:2:14 Extent=[35:37 - 35:38]
 // CHECK: 35:37: DeclRefExpr=c:2:14 Extent=[35:37 - 35:38]
 // CHECK: 35:42: UnexposedExpr= Extent=[35:42 - 35:47]
 // CHECK: 35:42: IntegerLiteral= Extent=[35:42 - 35:47]
-// CHECK: 36:9: BinaryOperator= Extent=[36:9 - 36:33]
-// CHECK: 36:9: BinaryOperator= Extent=[36:9 - 36:19]
+// CHECK: 36:8: ParenExpr= Extent=[36:8 - 36:34]
+// CHECK: 36:9: BinaryOperator=&& Extent=[36:9 - 36:33]
+// CHECK: 36:9: BinaryOperator=>= Extent=[36:9 - 36:19]
+// CHECK: 36:9: UnexposedExpr=c:2:14 Extent=[36:9 - 36:10]
 // CHECK: 36:9: DeclRefExpr=c:2:14 Extent=[36:9 - 36:10]
 // CHECK: 36:14: UnexposedExpr= Extent=[36:14 - 36:19]
 // CHECK: 36:14: IntegerLiteral= Extent=[36:14 - 36:19]
-// CHECK: 36:23: BinaryOperator= Extent=[36:23 - 36:33]
+// CHECK: 36:23: BinaryOperator=<= Extent=[36:23 - 36:33]
+// CHECK: 36:23: UnexposedExpr=c:2:14 Extent=[36:23 - 36:24]
 // CHECK: 36:23: DeclRefExpr=c:2:14 Extent=[36:23 - 36:24]
 // CHECK: 36:28: UnexposedExpr= Extent=[36:28 - 36:33]
 // CHECK: 36:28: IntegerLiteral= Extent=[36:28 - 36:33]
-// CHECK: 37:9: BinaryOperator= Extent=[37:9 - 37:33]
-// CHECK: 37:9: BinaryOperator= Extent=[37:9 - 37:19]
+// CHECK: 37:8: ParenExpr= Extent=[37:8 - 37:34]
+// CHECK: 37:9: BinaryOperator=&& Extent=[37:9 - 37:33]
+// CHECK: 37:9: BinaryOperator=>= Extent=[37:9 - 37:19]
+// CHECK: 37:9: UnexposedExpr=c:2:14 Extent=[37:9 - 37:10]
 // CHECK: 37:9: DeclRefExpr=c:2:14 Extent=[37:9 - 37:10]
 // CHECK: 37:14: UnexposedExpr= Extent=[37:14 - 37:19]
 // CHECK: 37:14: IntegerLiteral= Extent=[37:14 - 37:19]
-// CHECK: 37:23: BinaryOperator= Extent=[37:23 - 37:33]
+// CHECK: 37:23: BinaryOperator=<= Extent=[37:23 - 37:33]
+// CHECK: 37:23: UnexposedExpr=c:2:14 Extent=[37:23 - 37:24]
 // CHECK: 37:23: DeclRefExpr=c:2:14 Extent=[37:23 - 37:24]
 // CHECK: 37:28: UnexposedExpr= Extent=[37:28 - 37:33]
 // CHECK: 37:28: IntegerLiteral= Extent=[37:28 - 37:33]
-// CHECK: 38:9: BinaryOperator= Extent=[38:9 - 38:33]
-// CHECK: 38:9: BinaryOperator= Extent=[38:9 - 38:19]
+// CHECK: 38:8: ParenExpr= Extent=[38:8 - 38:34]
+// CHECK: 38:9: BinaryOperator=&& Extent=[38:9 - 38:33]
+// CHECK: 38:9: BinaryOperator=>= Extent=[38:9 - 38:19]
+// CHECK: 38:9: UnexposedExpr=c:2:14 Extent=[38:9 - 38:10]
 // CHECK: 38:9: DeclRefExpr=c:2:14 Extent=[38:9 - 38:10]
 // CHECK: 38:14: UnexposedExpr= Extent=[38:14 - 38:19]
 // CHECK: 38:14: IntegerLiteral= Extent=[38:14 - 38:19]
-// CHECK: 38:23: BinaryOperator= Extent=[38:23 - 38:33]
+// CHECK: 38:23: BinaryOperator=<= Extent=[38:23 - 38:33]
+// CHECK: 38:23: UnexposedExpr=c:2:14 Extent=[38:23 - 38:24]
 // CHECK: 38:23: DeclRefExpr=c:2:14 Extent=[38:23 - 38:24]
 // CHECK: 38:28: UnexposedExpr= Extent=[38:28 - 38:33]
 // CHECK: 38:28: IntegerLiteral= Extent=[38:28 - 38:33]
-// CHECK: 39:9: BinaryOperator= Extent=[39:9 - 39:33]
-// CHECK: 39:9: BinaryOperator= Extent=[39:9 - 39:19]
+// CHECK: 39:8: ParenExpr= Extent=[39:8 - 39:34]
+// CHECK: 39:9: BinaryOperator=&& Extent=[39:9 - 39:33]
+// CHECK: 39:9: BinaryOperator=>= Extent=[39:9 - 39:19]
+// CHECK: 39:9: UnexposedExpr=c:2:14 Extent=[39:9 - 39:10]
 // CHECK: 39:9: DeclRefExpr=c:2:14 Extent=[39:9 - 39:10]
 // CHECK: 39:14: UnexposedExpr= Extent=[39:14 - 39:19]
 // CHECK: 39:14: IntegerLiteral= Extent=[39:14 - 39:19]
-// CHECK: 39:23: BinaryOperator= Extent=[39:23 - 39:33]
+// CHECK: 39:23: BinaryOperator=<= Extent=[39:23 - 39:33]
+// CHECK: 39:23: UnexposedExpr=c:2:14 Extent=[39:23 - 39:24]
 // CHECK: 39:23: DeclRefExpr=c:2:14 Extent=[39:23 - 39:24]
 // CHECK: 39:28: UnexposedExpr= Extent=[39:28 - 39:33]
 // CHECK: 39:28: IntegerLiteral= Extent=[39:28 - 39:33]
-// CHECK: 40:9: BinaryOperator= Extent=[40:9 - 40:33]
-// CHECK: 40:9: BinaryOperator= Extent=[40:9 - 40:19]
+// CHECK: 40:8: ParenExpr= Extent=[40:8 - 40:34]
+// CHECK: 40:9: BinaryOperator=&& Extent=[40:9 - 40:33]
+// CHECK: 40:9: BinaryOperator=>= Extent=[40:9 - 40:19]
+// CHECK: 40:9: UnexposedExpr=c:2:14 Extent=[40:9 - 40:10]
 // CHECK: 40:9: DeclRefExpr=c:2:14 Extent=[40:9 - 40:10]
 // CHECK: 40:14: UnexposedExpr= Extent=[40:14 - 40:19]
 // CHECK: 40:14: IntegerLiteral= Extent=[40:14 - 40:19]
-// CHECK: 40:23: BinaryOperator= Extent=[40:23 - 40:33]
+// CHECK: 40:23: BinaryOperator=<= Extent=[40:23 - 40:33]
+// CHECK: 40:23: UnexposedExpr=c:2:14 Extent=[40:23 - 40:24]
 // CHECK: 40:23: DeclRefExpr=c:2:14 Extent=[40:23 - 40:24]
 // CHECK: 40:28: UnexposedExpr= Extent=[40:28 - 40:33]
 // CHECK: 40:28: IntegerLiteral= Extent=[40:28 - 40:33]
-// CHECK: 41:9: BinaryOperator= Extent=[41:9 - 41:33]
-// CHECK: 41:9: BinaryOperator= Extent=[41:9 - 41:19]
+// CHECK: 41:8: ParenExpr= Extent=[41:8 - 41:34]
+// CHECK: 41:9: BinaryOperator=&& Extent=[41:9 - 41:33]
+// CHECK: 41:9: BinaryOperator=>= Extent=[41:9 - 41:19]
+// CHECK: 41:9: UnexposedExpr=c:2:14 Extent=[41:9 - 41:10]
 // CHECK: 41:9: DeclRefExpr=c:2:14 Extent=[41:9 - 41:10]
 // CHECK: 41:14: UnexposedExpr= Extent=[41:14 - 41:19]
 // CHECK: 41:14: IntegerLiteral= Extent=[41:14 - 41:19]
-// CHECK: 41:23: BinaryOperator= Extent=[41:23 - 41:33]
+// CHECK: 41:23: BinaryOperator=<= Extent=[41:23 - 41:33]
+// CHECK: 41:23: UnexposedExpr=c:2:14 Extent=[41:23 - 41:24]
 // CHECK: 41:23: DeclRefExpr=c:2:14 Extent=[41:23 - 41:24]
 // CHECK: 41:28: UnexposedExpr= Extent=[41:28 - 41:33]
 // CHECK: 41:28: IntegerLiteral= Extent=[41:28 - 41:33]
-// CHECK: 42:9: BinaryOperator= Extent=[42:9 - 42:33]
-// CHECK: 42:9: BinaryOperator= Extent=[42:9 - 42:19]
+// CHECK: 42:8: ParenExpr= Extent=[42:8 - 42:34]
+// CHECK: 42:9: BinaryOperator=&& Extent=[42:9 - 42:33]
+// CHECK: 42:9: BinaryOperator=>= Extent=[42:9 - 42:19]
+// CHECK: 42:9: UnexposedExpr=c:2:14 Extent=[42:9 - 42:10]
 // CHECK: 42:9: DeclRefExpr=c:2:14 Extent=[42:9 - 42:10]
 // CHECK: 42:14: UnexposedExpr= Extent=[42:14 - 42:19]
 // CHECK: 42:14: IntegerLiteral= Extent=[42:14 - 42:19]
-// CHECK: 42:23: BinaryOperator= Extent=[42:23 - 42:33]
+// CHECK: 42:23: BinaryOperator=<= Extent=[42:23 - 42:33]
+// CHECK: 42:23: UnexposedExpr=c:2:14 Extent=[42:23 - 42:24]
 // CHECK: 42:23: DeclRefExpr=c:2:14 Extent=[42:23 - 42:24]
 // CHECK: 42:28: UnexposedExpr= Extent=[42:28 - 42:33]
 // CHECK: 42:28: IntegerLiteral= Extent=[42:28 - 42:33]
-// CHECK: 43:9: BinaryOperator= Extent=[43:9 - 43:33]
-// CHECK: 43:9: BinaryOperator= Extent=[43:9 - 43:19]
+// CHECK: 43:8: ParenExpr= Extent=[43:8 - 43:34]
+// CHECK: 43:9: BinaryOperator=&& Extent=[43:9 - 43:33]
+// CHECK: 43:9: BinaryOperator=>= Extent=[43:9 - 43:19]
+// CHECK: 43:9: UnexposedExpr=c:2:14 Extent=[43:9 - 43:10]
 // CHECK: 43:9: DeclRefExpr=c:2:14 Extent=[43:9 - 43:10]
 // CHECK: 43:14: UnexposedExpr= Extent=[43:14 - 43:19]
 // CHECK: 43:14: IntegerLiteral= Extent=[43:14 - 43:19]
-// CHECK: 43:23: BinaryOperator= Extent=[43:23 - 43:33]
+// CHECK: 43:23: BinaryOperator=<= Extent=[43:23 - 43:33]
+// CHECK: 43:23: UnexposedExpr=c:2:14 Extent=[43:23 - 43:24]
 // CHECK: 43:23: DeclRefExpr=c:2:14 Extent=[43:23 - 43:24]
 // CHECK: 43:28: UnexposedExpr= Extent=[43:28 - 43:33]
 // CHECK: 43:28: IntegerLiteral= Extent=[43:28 - 43:33]
-// CHECK: 44:8: BinaryOperator= Extent=[44:8 - 44:18]
+// CHECK: 44:8: BinaryOperator=== Extent=[44:8 - 44:18]
+// CHECK: 44:8: UnexposedExpr=c:2:14 Extent=[44:8 - 44:9]
 // CHECK: 44:8: DeclRefExpr=c:2:14 Extent=[44:8 - 44:9]
 // CHECK: 44:13: UnexposedExpr= Extent=[44:13 - 44:18]
 // CHECK: 44:13: IntegerLiteral= Extent=[44:13 - 44:18]
-// CHECK: 44:23: BinaryOperator= Extent=[44:23 - 44:47]
-// CHECK: 44:23: BinaryOperator= Extent=[44:23 - 44:33]
+// CHECK: 44:22: ParenExpr= Extent=[44:22 - 44:48]
+// CHECK: 44:23: BinaryOperator=&& Extent=[44:23 - 44:47]
+// CHECK: 44:23: BinaryOperator=>= Extent=[44:23 - 44:33]
+// CHECK: 44:23: UnexposedExpr=c:2:14 Extent=[44:23 - 44:24]
 // CHECK: 44:23: DeclRefExpr=c:2:14 Extent=[44:23 - 44:24]
 // CHECK: 44:28: UnexposedExpr= Extent=[44:28 - 44:33]
 // CHECK: 44:28: IntegerLiteral= Extent=[44:28 - 44:33]
-// CHECK: 44:37: BinaryOperator= Extent=[44:37 - 44:47]
+// CHECK: 44:37: BinaryOperator=<= Extent=[44:37 - 44:47]
+// CHECK: 44:37: UnexposedExpr=c:2:14 Extent=[44:37 - 44:38]
 // CHECK: 44:37: DeclRefExpr=c:2:14 Extent=[44:37 - 44:38]
 // CHECK: 44:42: UnexposedExpr= Extent=[44:42 - 44:47]
 // CHECK: 44:42: IntegerLiteral= Extent=[44:42 - 44:47]
-// CHECK: 45:9: BinaryOperator= Extent=[45:9 - 45:33]
-// CHECK: 45:9: BinaryOperator= Extent=[45:9 - 45:19]
+// CHECK: 45:8: ParenExpr= Extent=[45:8 - 45:34]
+// CHECK: 45:9: BinaryOperator=&& Extent=[45:9 - 45:33]
+// CHECK: 45:9: BinaryOperator=>= Extent=[45:9 - 45:19]
+// CHECK: 45:9: UnexposedExpr=c:2:14 Extent=[45:9 - 45:10]
 // CHECK: 45:9: DeclRefExpr=c:2:14 Extent=[45:9 - 45:10]
 // CHECK: 45:14: UnexposedExpr= Extent=[45:14 - 45:19]
 // CHECK: 45:14: IntegerLiteral= Extent=[45:14 - 45:19]
-// CHECK: 45:23: BinaryOperator= Extent=[45:23 - 45:33]
+// CHECK: 45:23: BinaryOperator=<= Extent=[45:23 - 45:33]
+// CHECK: 45:23: UnexposedExpr=c:2:14 Extent=[45:23 - 45:24]
 // CHECK: 45:23: DeclRefExpr=c:2:14 Extent=[45:23 - 45:24]
 // CHECK: 45:28: UnexposedExpr= Extent=[45:28 - 45:33]
 // CHECK: 45:28: IntegerLiteral= Extent=[45:28 - 45:33]
-// CHECK: 46:8: BinaryOperator= Extent=[46:8 - 46:18]
+// CHECK: 46:8: BinaryOperator=== Extent=[46:8 - 46:18]
+// CHECK: 46:8: UnexposedExpr=c:2:14 Extent=[46:8 - 46:9]
 // CHECK: 46:8: DeclRefExpr=c:2:14 Extent=[46:8 - 46:9]
 // CHECK: 46:13: UnexposedExpr= Extent=[46:13 - 46:18]
 // CHECK: 46:13: IntegerLiteral= Extent=[46:13 - 46:18]
-// CHECK: 46:23: BinaryOperator= Extent=[46:23 - 46:47]
-// CHECK: 46:23: BinaryOperator= Extent=[46:23 - 46:33]
+// CHECK: 46:22: ParenExpr= Extent=[46:22 - 46:48]
+// CHECK: 46:23: BinaryOperator=&& Extent=[46:23 - 46:47]
+// CHECK: 46:23: BinaryOperator=>= Extent=[46:23 - 46:33]
+// CHECK: 46:23: UnexposedExpr=c:2:14 Extent=[46:23 - 46:24]
 // CHECK: 46:23: DeclRefExpr=c:2:14 Extent=[46:23 - 46:24]
 // CHECK: 46:28: UnexposedExpr= Extent=[46:28 - 46:33]
 // CHECK: 46:28: IntegerLiteral= Extent=[46:28 - 46:33]
-// CHECK: 46:37: BinaryOperator= Extent=[46:37 - 46:47]
+// CHECK: 46:37: BinaryOperator=<= Extent=[46:37 - 46:47]
+// CHECK: 46:37: UnexposedExpr=c:2:14 Extent=[46:37 - 46:38]
 // CHECK: 46:37: DeclRefExpr=c:2:14 Extent=[46:37 - 46:38]
 // CHECK: 46:42: UnexposedExpr= Extent=[46:42 - 46:47]
 // CHECK: 46:42: IntegerLiteral= Extent=[46:42 - 46:47]
-// CHECK: 47:9: BinaryOperator= Extent=[47:9 - 47:33]
-// CHECK: 47:9: BinaryOperator= Extent=[47:9 - 47:19]
+// CHECK: 47:8: ParenExpr= Extent=[47:8 - 47:34]
+// CHECK: 47:9: BinaryOperator=&& Extent=[47:9 - 47:33]
+// CHECK: 47:9: BinaryOperator=>= Extent=[47:9 - 47:19]
+// CHECK: 47:9: UnexposedExpr=c:2:14 Extent=[47:9 - 47:10]
 // CHECK: 47:9: DeclRefExpr=c:2:14 Extent=[47:9 - 47:10]
 // CHECK: 47:14: UnexposedExpr= Extent=[47:14 - 47:19]
 // CHECK: 47:14: IntegerLiteral= Extent=[47:14 - 47:19]
-// CHECK: 47:23: BinaryOperator= Extent=[47:23 - 47:33]
+// CHECK: 47:23: BinaryOperator=<= Extent=[47:23 - 47:33]
+// CHECK: 47:23: UnexposedExpr=c:2:14 Extent=[47:23 - 47:24]
 // CHECK: 47:23: DeclRefExpr=c:2:14 Extent=[47:23 - 47:24]
 // CHECK: 47:28: UnexposedExpr= Extent=[47:28 - 47:33]
 // CHECK: 47:28: IntegerLiteral= Extent=[47:28 - 47:33]
-// CHECK: 48:9: BinaryOperator= Extent=[48:9 - 48:33]
-// CHECK: 48:9: BinaryOperator= Extent=[48:9 - 48:19]
+// CHECK: 48:8: ParenExpr= Extent=[48:8 - 48:34]
+// CHECK: 48:9: BinaryOperator=&& Extent=[48:9 - 48:33]
+// CHECK: 48:9: BinaryOperator=>= Extent=[48:9 - 48:19]
+// CHECK: 48:9: UnexposedExpr=c:2:14 Extent=[48:9 - 48:10]
 // CHECK: 48:9: DeclRefExpr=c:2:14 Extent=[48:9 - 48:10]
 // CHECK: 48:14: UnexposedExpr= Extent=[48:14 - 48:19]
 // CHECK: 48:14: IntegerLiteral= Extent=[48:14 - 48:19]
-// CHECK: 48:23: BinaryOperator= Extent=[48:23 - 48:33]
+// CHECK: 48:23: BinaryOperator=<= Extent=[48:23 - 48:33]
+// CHECK: 48:23: UnexposedExpr=c:2:14 Extent=[48:23 - 48:24]
 // CHECK: 48:23: DeclRefExpr=c:2:14 Extent=[48:23 - 48:24]
 // CHECK: 48:28: UnexposedExpr= Extent=[48:28 - 48:33]
 // CHECK: 48:28: IntegerLiteral= Extent=[48:28 - 48:33]
-// CHECK: 49:9: BinaryOperator= Extent=[49:9 - 49:33]
-// CHECK: 49:9: BinaryOperator= Extent=[49:9 - 49:19]
+// CHECK: 49:8: ParenExpr= Extent=[49:8 - 49:34]
+// CHECK: 49:9: BinaryOperator=&& Extent=[49:9 - 49:33]
+// CHECK: 49:9: BinaryOperator=>= Extent=[49:9 - 49:19]
+// CHECK: 49:9: UnexposedExpr=c:2:14 Extent=[49:9 - 49:10]
 // CHECK: 49:9: DeclRefExpr=c:2:14 Extent=[49:9 - 49:10]
 // CHECK: 49:14: UnexposedExpr= Extent=[49:14 - 49:19]
 // CHECK: 49:14: IntegerLiteral= Extent=[49:14 - 49:19]
-// CHECK: 49:23: BinaryOperator= Extent=[49:23 - 49:33]
+// CHECK: 49:23: BinaryOperator=<= Extent=[49:23 - 49:33]
+// CHECK: 49:23: UnexposedExpr=c:2:14 Extent=[49:23 - 49:24]
 // CHECK: 49:23: DeclRefExpr=c:2:14 Extent=[49:23 - 49:24]
 // CHECK: 49:28: UnexposedExpr= Extent=[49:28 - 49:33]
 // CHECK: 49:28: IntegerLiteral= Extent=[49:28 - 49:33]
-// CHECK: 50:9: BinaryOperator= Extent=[50:9 - 50:33]
-// CHECK: 50:9: BinaryOperator= Extent=[50:9 - 50:19]
+// CHECK: 50:8: ParenExpr= Extent=[50:8 - 50:34]
+// CHECK: 50:9: BinaryOperator=&& Extent=[50:9 - 50:33]
+// CHECK: 50:9: BinaryOperator=>= Extent=[50:9 - 50:19]
+// CHECK: 50:9: UnexposedExpr=c:2:14 Extent=[50:9 - 50:10]
 // CHECK: 50:9: DeclRefExpr=c:2:14 Extent=[50:9 - 50:10]
 // CHECK: 50:14: UnexposedExpr= Extent=[50:14 - 50:19]
 // CHECK: 50:14: IntegerLiteral= Extent=[50:14 - 50:19]
-// CHECK: 50:23: BinaryOperator= Extent=[50:23 - 50:33]
+// CHECK: 50:23: BinaryOperator=<= Extent=[50:23 - 50:33]
+// CHECK: 50:23: UnexposedExpr=c:2:14 Extent=[50:23 - 50:24]
 // CHECK: 50:23: DeclRefExpr=c:2:14 Extent=[50:23 - 50:24]
 // CHECK: 50:28: UnexposedExpr= Extent=[50:28 - 50:33]
 // CHECK: 50:28: IntegerLiteral= Extent=[50:28 - 50:33]
-// CHECK: 51:8: BinaryOperator= Extent=[51:8 - 51:18]
+// CHECK: 51:8: BinaryOperator=== Extent=[51:8 - 51:18]
+// CHECK: 51:8: UnexposedExpr=c:2:14 Extent=[51:8 - 51:9]
 // CHECK: 51:8: DeclRefExpr=c:2:14 Extent=[51:8 - 51:9]
 // CHECK: 51:13: UnexposedExpr= Extent=[51:13 - 51:18]
 // CHECK: 51:13: IntegerLiteral= Extent=[51:13 - 51:18]
-// CHECK: 51:23: BinaryOperator= Extent=[51:23 - 51:47]
-// CHECK: 51:23: BinaryOperator= Extent=[51:23 - 51:33]
+// CHECK: 51:22: ParenExpr= Extent=[51:22 - 51:48]
+// CHECK: 51:23: BinaryOperator=&& Extent=[51:23 - 51:47]
+// CHECK: 51:23: BinaryOperator=>= Extent=[51:23 - 51:33]
+// CHECK: 51:23: UnexposedExpr=c:2:14 Extent=[51:23 - 51:24]
 // CHECK: 51:23: DeclRefExpr=c:2:14 Extent=[51:23 - 51:24]
 // CHECK: 51:28: UnexposedExpr= Extent=[51:28 - 51:33]
 // CHECK: 51:28: IntegerLiteral= Extent=[51:28 - 51:33]
-// CHECK: 51:37: BinaryOperator= Extent=[51:37 - 51:47]
+// CHECK: 51:37: BinaryOperator=<= Extent=[51:37 - 51:47]
+// CHECK: 51:37: UnexposedExpr=c:2:14 Extent=[51:37 - 51:38]
 // CHECK: 51:37: DeclRefExpr=c:2:14 Extent=[51:37 - 51:38]
 // CHECK: 51:42: UnexposedExpr= Extent=[51:42 - 51:47]
 // CHECK: 51:42: IntegerLiteral= Extent=[51:42 - 51:47]
-// CHECK: 52:9: BinaryOperator= Extent=[52:9 - 52:33]
-// CHECK: 52:9: BinaryOperator= Extent=[52:9 - 52:19]
+// CHECK: 52:8: ParenExpr= Extent=[52:8 - 52:34]
+// CHECK: 52:9: BinaryOperator=&& Extent=[52:9 - 52:33]
+// CHECK: 52:9: BinaryOperator=>= Extent=[52:9 - 52:19]
+// CHECK: 52:9: UnexposedExpr=c:2:14 Extent=[52:9 - 52:10]
 // CHECK: 52:9: DeclRefExpr=c:2:14 Extent=[52:9 - 52:10]
 // CHECK: 52:14: UnexposedExpr= Extent=[52:14 - 52:19]
 // CHECK: 52:14: IntegerLiteral= Extent=[52:14 - 52:19]
-// CHECK: 52:23: BinaryOperator= Extent=[52:23 - 52:33]
+// CHECK: 52:23: BinaryOperator=<= Extent=[52:23 - 52:33]
+// CHECK: 52:23: UnexposedExpr=c:2:14 Extent=[52:23 - 52:24]
 // CHECK: 52:23: DeclRefExpr=c:2:14 Extent=[52:23 - 52:24]
 // CHECK: 52:28: UnexposedExpr= Extent=[52:28 - 52:33]
 // CHECK: 52:28: IntegerLiteral= Extent=[52:28 - 52:33]
-// CHECK: 53:9: BinaryOperator= Extent=[53:9 - 53:33]
-// CHECK: 53:9: BinaryOperator= Extent=[53:9 - 53:19]
+// CHECK: 53:8: ParenExpr= Extent=[53:8 - 53:34]
+// CHECK: 53:9: BinaryOperator=&& Extent=[53:9 - 53:33]
+// CHECK: 53:9: BinaryOperator=>= Extent=[53:9 - 53:19]
+// CHECK: 53:9: UnexposedExpr=c:2:14 Extent=[53:9 - 53:10]
 // CHECK: 53:9: DeclRefExpr=c:2:14 Extent=[53:9 - 53:10]
 // CHECK: 53:14: UnexposedExpr= Extent=[53:14 - 53:19]
 // CHECK: 53:14: IntegerLiteral= Extent=[53:14 - 53:19]
-// CHECK: 53:23: BinaryOperator= Extent=[53:23 - 53:33]
+// CHECK: 53:23: BinaryOperator=<= Extent=[53:23 - 53:33]
+// CHECK: 53:23: UnexposedExpr=c:2:14 Extent=[53:23 - 53:24]
 // CHECK: 53:23: DeclRefExpr=c:2:14 Extent=[53:23 - 53:24]
 // CHECK: 53:28: UnexposedExpr= Extent=[53:28 - 53:33]
 // CHECK: 53:28: IntegerLiteral= Extent=[53:28 - 53:33]
-// CHECK: 54:9: BinaryOperator= Extent=[54:9 - 54:33]
-// CHECK: 54:9: BinaryOperator= Extent=[54:9 - 54:19]
+// CHECK: 54:8: ParenExpr= Extent=[54:8 - 54:34]
+// CHECK: 54:9: BinaryOperator=&& Extent=[54:9 - 54:33]
+// CHECK: 54:9: BinaryOperator=>= Extent=[54:9 - 54:19]
+// CHECK: 54:9: UnexposedExpr=c:2:14 Extent=[54:9 - 54:10]
 // CHECK: 54:9: DeclRefExpr=c:2:14 Extent=[54:9 - 54:10]
 // CHECK: 54:14: UnexposedExpr= Extent=[54:14 - 54:19]
 // CHECK: 54:14: IntegerLiteral= Extent=[54:14 - 54:19]
-// CHECK: 54:23: BinaryOperator= Extent=[54:23 - 54:33]
+// CHECK: 54:23: BinaryOperator=<= Extent=[54:23 - 54:33]
+// CHECK: 54:23: UnexposedExpr=c:2:14 Extent=[54:23 - 54:24]
 // CHECK: 54:23: DeclRefExpr=c:2:14 Extent=[54:23 - 54:24]
 // CHECK: 54:28: UnexposedExpr= Extent=[54:28 - 54:33]
 // CHECK: 54:28: IntegerLiteral= Extent=[54:28 - 54:33]
-// CHECK: 55:9: BinaryOperator= Extent=[55:9 - 55:33]
-// CHECK: 55:9: BinaryOperator= Extent=[55:9 - 55:19]
+// CHECK: 55:8: ParenExpr= Extent=[55:8 - 55:34]
+// CHECK: 55:9: BinaryOperator=&& Extent=[55:9 - 55:33]
+// CHECK: 55:9: BinaryOperator=>= Extent=[55:9 - 55:19]
+// CHECK: 55:9: UnexposedExpr=c:2:14 Extent=[55:9 - 55:10]
 // CHECK: 55:9: DeclRefExpr=c:2:14 Extent=[55:9 - 55:10]
 // CHECK: 55:14: UnexposedExpr= Extent=[55:14 - 55:19]
 // CHECK: 55:14: IntegerLiteral= Extent=[55:14 - 55:19]
-// CHECK: 55:23: BinaryOperator= Extent=[55:23 - 55:33]
+// CHECK: 55:23: BinaryOperator=<= Extent=[55:23 - 55:33]
+// CHECK: 55:23: UnexposedExpr=c:2:14 Extent=[55:23 - 55:24]
 // CHECK: 55:23: DeclRefExpr=c:2:14 Extent=[55:23 - 55:24]
 // CHECK: 55:28: UnexposedExpr= Extent=[55:28 - 55:33]
 // CHECK: 55:28: IntegerLiteral= Extent=[55:28 - 55:33]
-// CHECK: 56:9: BinaryOperator= Extent=[56:9 - 56:33]
-// CHECK: 56:9: BinaryOperator= Extent=[56:9 - 56:19]
+// CHECK: 56:8: ParenExpr= Extent=[56:8 - 56:34]
+// CHECK: 56:9: BinaryOperator=&& Extent=[56:9 - 56:33]
+// CHECK: 56:9: BinaryOperator=>= Extent=[56:9 - 56:19]
+// CHECK: 56:9: UnexposedExpr=c:2:14 Extent=[56:9 - 56:10]
 // CHECK: 56:9: DeclRefExpr=c:2:14 Extent=[56:9 - 56:10]
 // CHECK: 56:14: UnexposedExpr= Extent=[56:14 - 56:19]
 // CHECK: 56:14: IntegerLiteral= Extent=[56:14 - 56:19]
-// CHECK: 56:23: BinaryOperator= Extent=[56:23 - 56:33]
+// CHECK: 56:23: BinaryOperator=<= Extent=[56:23 - 56:33]
+// CHECK: 56:23: UnexposedExpr=c:2:14 Extent=[56:23 - 56:24]
 // CHECK: 56:23: DeclRefExpr=c:2:14 Extent=[56:23 - 56:24]
 // CHECK: 56:28: UnexposedExpr= Extent=[56:28 - 56:33]
 // CHECK: 56:28: IntegerLiteral= Extent=[56:28 - 56:33]
-// CHECK: 57:9: BinaryOperator= Extent=[57:9 - 57:33]
-// CHECK: 57:9: BinaryOperator= Extent=[57:9 - 57:19]
+// CHECK: 57:8: ParenExpr= Extent=[57:8 - 57:34]
+// CHECK: 57:9: BinaryOperator=&& Extent=[57:9 - 57:33]
+// CHECK: 57:9: BinaryOperator=>= Extent=[57:9 - 57:19]
+// CHECK: 57:9: UnexposedExpr=c:2:14 Extent=[57:9 - 57:10]
 // CHECK: 57:9: DeclRefExpr=c:2:14 Extent=[57:9 - 57:10]
 // CHECK: 57:14: UnexposedExpr= Extent=[57:14 - 57:19]
 // CHECK: 57:14: IntegerLiteral= Extent=[57:14 - 57:19]
-// CHECK: 57:23: BinaryOperator= Extent=[57:23 - 57:33]
+// CHECK: 57:23: BinaryOperator=<= Extent=[57:23 - 57:33]
+// CHECK: 57:23: UnexposedExpr=c:2:14 Extent=[57:23 - 57:24]
 // CHECK: 57:23: DeclRefExpr=c:2:14 Extent=[57:23 - 57:24]
 // CHECK: 57:28: UnexposedExpr= Extent=[57:28 - 57:33]
 // CHECK: 57:28: IntegerLiteral= Extent=[57:28 - 57:33]
-// CHECK: 58:9: BinaryOperator= Extent=[58:9 - 58:33]
-// CHECK: 58:9: BinaryOperator= Extent=[58:9 - 58:19]
+// CHECK: 58:8: ParenExpr= Extent=[58:8 - 58:34]
+// CHECK: 58:9: BinaryOperator=&& Extent=[58:9 - 58:33]
+// CHECK: 58:9: BinaryOperator=>= Extent=[58:9 - 58:19]
+// CHECK: 58:9: UnexposedExpr=c:2:14 Extent=[58:9 - 58:10]
 // CHECK: 58:9: DeclRefExpr=c:2:14 Extent=[58:9 - 58:10]
 // CHECK: 58:14: UnexposedExpr= Extent=[58:14 - 58:19]
 // CHECK: 58:14: IntegerLiteral= Extent=[58:14 - 58:19]
-// CHECK: 58:23: BinaryOperator= Extent=[58:23 - 58:33]
+// CHECK: 58:23: BinaryOperator=<= Extent=[58:23 - 58:33]
+// CHECK: 58:23: UnexposedExpr=c:2:14 Extent=[58:23 - 58:24]
 // CHECK: 58:23: DeclRefExpr=c:2:14 Extent=[58:23 - 58:24]
 // CHECK: 58:28: UnexposedExpr= Extent=[58:28 - 58:33]
 // CHECK: 58:28: IntegerLiteral= Extent=[58:28 - 58:33]
-// CHECK: 59:9: BinaryOperator= Extent=[59:9 - 59:33]
-// CHECK: 59:9: BinaryOperator= Extent=[59:9 - 59:19]
+// CHECK: 59:8: ParenExpr= Extent=[59:8 - 59:34]
+// CHECK: 59:9: BinaryOperator=&& Extent=[59:9 - 59:33]
+// CHECK: 59:9: BinaryOperator=>= Extent=[59:9 - 59:19]
+// CHECK: 59:9: UnexposedExpr=c:2:14 Extent=[59:9 - 59:10]
 // CHECK: 59:9: DeclRefExpr=c:2:14 Extent=[59:9 - 59:10]
 // CHECK: 59:14: UnexposedExpr= Extent=[59:14 - 59:19]
 // CHECK: 59:14: IntegerLiteral= Extent=[59:14 - 59:19]
-// CHECK: 59:23: BinaryOperator= Extent=[59:23 - 59:33]
+// CHECK: 59:23: BinaryOperator=<= Extent=[59:23 - 59:33]
+// CHECK: 59:23: UnexposedExpr=c:2:14 Extent=[59:23 - 59:24]
 // CHECK: 59:23: DeclRefExpr=c:2:14 Extent=[59:23 - 59:24]
 // CHECK: 59:28: UnexposedExpr= Extent=[59:28 - 59:33]
 // CHECK: 59:28: IntegerLiteral= Extent=[59:28 - 59:33]
-// CHECK: 60:9: BinaryOperator= Extent=[60:9 - 60:33]
-// CHECK: 60:9: BinaryOperator= Extent=[60:9 - 60:19]
+// CHECK: 60:8: ParenExpr= Extent=[60:8 - 60:34]
+// CHECK: 60:9: BinaryOperator=&& Extent=[60:9 - 60:33]
+// CHECK: 60:9: BinaryOperator=>= Extent=[60:9 - 60:19]
+// CHECK: 60:9: UnexposedExpr=c:2:14 Extent=[60:9 - 60:10]
 // CHECK: 60:9: DeclRefExpr=c:2:14 Extent=[60:9 - 60:10]
 // CHECK: 60:14: UnexposedExpr= Extent=[60:14 - 60:19]
 // CHECK: 60:14: IntegerLiteral= Extent=[60:14 - 60:19]
-// CHECK: 60:23: BinaryOperator= Extent=[60:23 - 60:33]
+// CHECK: 60:23: BinaryOperator=<= Extent=[60:23 - 60:33]
+// CHECK: 60:23: UnexposedExpr=c:2:14 Extent=[60:23 - 60:24]
 // CHECK: 60:23: DeclRefExpr=c:2:14 Extent=[60:23 - 60:24]
 // CHECK: 60:28: UnexposedExpr= Extent=[60:28 - 60:33]
 // CHECK: 60:28: IntegerLiteral= Extent=[60:28 - 60:33]
-// CHECK: 61:9: BinaryOperator= Extent=[61:9 - 61:33]
-// CHECK: 61:9: BinaryOperator= Extent=[61:9 - 61:19]
+// CHECK: 61:8: ParenExpr= Extent=[61:8 - 61:34]
+// CHECK: 61:9: BinaryOperator=&& Extent=[61:9 - 61:33]
+// CHECK: 61:9: BinaryOperator=>= Extent=[61:9 - 61:19]
+// CHECK: 61:9: UnexposedExpr=c:2:14 Extent=[61:9 - 61:10]
 // CHECK: 61:9: DeclRefExpr=c:2:14 Extent=[61:9 - 61:10]
 // CHECK: 61:14: UnexposedExpr= Extent=[61:14 - 61:19]
 // CHECK: 61:14: IntegerLiteral= Extent=[61:14 - 61:19]
-// CHECK: 61:23: BinaryOperator= Extent=[61:23 - 61:33]
+// CHECK: 61:23: BinaryOperator=<= Extent=[61:23 - 61:33]
+// CHECK: 61:23: UnexposedExpr=c:2:14 Extent=[61:23 - 61:24]
 // CHECK: 61:23: DeclRefExpr=c:2:14 Extent=[61:23 - 61:24]
 // CHECK: 61:28: UnexposedExpr= Extent=[61:28 - 61:33]
 // CHECK: 61:28: IntegerLiteral= Extent=[61:28 - 61:33]
-// CHECK: 62:9: BinaryOperator= Extent=[62:9 - 62:33]
-// CHECK: 62:9: BinaryOperator= Extent=[62:9 - 62:19]
+// CHECK: 62:8: ParenExpr= Extent=[62:8 - 62:34]
+// CHECK: 62:9: BinaryOperator=&& Extent=[62:9 - 62:33]
+// CHECK: 62:9: BinaryOperator=>= Extent=[62:9 - 62:19]
+// CHECK: 62:9: UnexposedExpr=c:2:14 Extent=[62:9 - 62:10]
 // CHECK: 62:9: DeclRefExpr=c:2:14 Extent=[62:9 - 62:10]
 // CHECK: 62:14: UnexposedExpr= Extent=[62:14 - 62:19]
 // CHECK: 62:14: IntegerLiteral= Extent=[62:14 - 62:19]
-// CHECK: 62:23: BinaryOperator= Extent=[62:23 - 62:33]
+// CHECK: 62:23: BinaryOperator=<= Extent=[62:23 - 62:33]
+// CHECK: 62:23: UnexposedExpr=c:2:14 Extent=[62:23 - 62:24]
 // CHECK: 62:23: DeclRefExpr=c:2:14 Extent=[62:23 - 62:24]
 // CHECK: 62:28: UnexposedExpr= Extent=[62:28 - 62:33]
 // CHECK: 62:28: IntegerLiteral= Extent=[62:28 - 62:33]
-// CHECK: 63:8: BinaryOperator= Extent=[63:8 - 63:18]
+// CHECK: 63:8: BinaryOperator=== Extent=[63:8 - 63:18]
+// CHECK: 63:8: UnexposedExpr=c:2:14 Extent=[63:8 - 63:9]
 // CHECK: 63:8: DeclRefExpr=c:2:14 Extent=[63:8 - 63:9]
 // CHECK: 63:13: UnexposedExpr= Extent=[63:13 - 63:18]
 // CHECK: 63:13: IntegerLiteral= Extent=[63:13 - 63:18]
-// CHECK: 63:23: BinaryOperator= Extent=[63:23 - 63:47]
-// CHECK: 63:23: BinaryOperator= Extent=[63:23 - 63:33]
+// CHECK: 63:22: ParenExpr= Extent=[63:22 - 63:48]
+// CHECK: 63:23: BinaryOperator=&& Extent=[63:23 - 63:47]
+// CHECK: 63:23: BinaryOperator=>= Extent=[63:23 - 63:33]
+// CHECK: 63:23: UnexposedExpr=c:2:14 Extent=[63:23 - 63:24]
 // CHECK: 63:23: DeclRefExpr=c:2:14 Extent=[63:23 - 63:24]
 // CHECK: 63:28: UnexposedExpr= Extent=[63:28 - 63:33]
 // CHECK: 63:28: IntegerLiteral= Extent=[63:28 - 63:33]
-// CHECK: 63:37: BinaryOperator= Extent=[63:37 - 63:47]
+// CHECK: 63:37: BinaryOperator=<= Extent=[63:37 - 63:47]
+// CHECK: 63:37: UnexposedExpr=c:2:14 Extent=[63:37 - 63:38]
 // CHECK: 63:37: DeclRefExpr=c:2:14 Extent=[63:37 - 63:38]
 // CHECK: 63:42: UnexposedExpr= Extent=[63:42 - 63:47]
 // CHECK: 63:42: IntegerLiteral= Extent=[63:42 - 63:47]
-// CHECK: 64:9: BinaryOperator= Extent=[64:9 - 64:33]
-// CHECK: 64:9: BinaryOperator= Extent=[64:9 - 64:19]
+// CHECK: 64:8: ParenExpr= Extent=[64:8 - 64:34]
+// CHECK: 64:9: BinaryOperator=&& Extent=[64:9 - 64:33]
+// CHECK: 64:9: BinaryOperator=>= Extent=[64:9 - 64:19]
+// CHECK: 64:9: UnexposedExpr=c:2:14 Extent=[64:9 - 64:10]
 // CHECK: 64:9: DeclRefExpr=c:2:14 Extent=[64:9 - 64:10]
 // CHECK: 64:14: UnexposedExpr= Extent=[64:14 - 64:19]
 // CHECK: 64:14: IntegerLiteral= Extent=[64:14 - 64:19]
-// CHECK: 64:23: BinaryOperator= Extent=[64:23 - 64:33]
+// CHECK: 64:23: BinaryOperator=<= Extent=[64:23 - 64:33]
+// CHECK: 64:23: UnexposedExpr=c:2:14 Extent=[64:23 - 64:24]
 // CHECK: 64:23: DeclRefExpr=c:2:14 Extent=[64:23 - 64:24]
 // CHECK: 64:28: UnexposedExpr= Extent=[64:28 - 64:33]
 // CHECK: 64:28: IntegerLiteral= Extent=[64:28 - 64:33]
-// CHECK: 65:8: BinaryOperator= Extent=[65:8 - 65:18]
+// CHECK: 65:8: BinaryOperator=== Extent=[65:8 - 65:18]
+// CHECK: 65:8: UnexposedExpr=c:2:14 Extent=[65:8 - 65:9]
 // CHECK: 65:8: DeclRefExpr=c:2:14 Extent=[65:8 - 65:9]
 // CHECK: 65:13: UnexposedExpr= Extent=[65:13 - 65:18]
 // CHECK: 65:13: IntegerLiteral= Extent=[65:13 - 65:18]
-// CHECK: 65:23: BinaryOperator= Extent=[65:23 - 65:47]
-// CHECK: 65:23: BinaryOperator= Extent=[65:23 - 65:33]
+// CHECK: 65:22: ParenExpr= Extent=[65:22 - 65:48]
+// CHECK: 65:23: BinaryOperator=&& Extent=[65:23 - 65:47]
+// CHECK: 65:23: BinaryOperator=>= Extent=[65:23 - 65:33]
+// CHECK: 65:23: UnexposedExpr=c:2:14 Extent=[65:23 - 65:24]
 // CHECK: 65:23: DeclRefExpr=c:2:14 Extent=[65:23 - 65:24]
 // CHECK: 65:28: UnexposedExpr= Extent=[65:28 - 65:33]
 // CHECK: 65:28: IntegerLiteral= Extent=[65:28 - 65:33]
-// CHECK: 65:37: BinaryOperator= Extent=[65:37 - 65:47]
+// CHECK: 65:37: BinaryOperator=<= Extent=[65:37 - 65:47]
+// CHECK: 65:37: UnexposedExpr=c:2:14 Extent=[65:37 - 65:38]
 // CHECK: 65:37: DeclRefExpr=c:2:14 Extent=[65:37 - 65:38]
 // CHECK: 65:42: UnexposedExpr= Extent=[65:42 - 65:47]
 // CHECK: 65:42: IntegerLiteral= Extent=[65:42 - 65:47]
-// CHECK: 66:9: BinaryOperator= Extent=[66:9 - 66:33]
-// CHECK: 66:9: BinaryOperator= Extent=[66:9 - 66:19]
+// CHECK: 66:8: ParenExpr= Extent=[66:8 - 66:34]
+// CHECK: 66:9: BinaryOperator=&& Extent=[66:9 - 66:33]
+// CHECK: 66:9: BinaryOperator=>= Extent=[66:9 - 66:19]
+// CHECK: 66:9: UnexposedExpr=c:2:14 Extent=[66:9 - 66:10]
 // CHECK: 66:9: DeclRefExpr=c:2:14 Extent=[66:9 - 66:10]
 // CHECK: 66:14: UnexposedExpr= Extent=[66:14 - 66:19]
 // CHECK: 66:14: IntegerLiteral= Extent=[66:14 - 66:19]
-// CHECK: 66:23: BinaryOperator= Extent=[66:23 - 66:33]
+// CHECK: 66:23: BinaryOperator=<= Extent=[66:23 - 66:33]
+// CHECK: 66:23: UnexposedExpr=c:2:14 Extent=[66:23 - 66:24]
 // CHECK: 66:23: DeclRefExpr=c:2:14 Extent=[66:23 - 66:24]
 // CHECK: 66:28: UnexposedExpr= Extent=[66:28 - 66:33]
 // CHECK: 66:28: IntegerLiteral= Extent=[66:28 - 66:33]
-// CHECK: 67:9: BinaryOperator= Extent=[67:9 - 67:33]
-// CHECK: 67:9: BinaryOperator= Extent=[67:9 - 67:19]
+// CHECK: 67:8: ParenExpr= Extent=[67:8 - 67:34]
+// CHECK: 67:9: BinaryOperator=&& Extent=[67:9 - 67:33]
+// CHECK: 67:9: BinaryOperator=>= Extent=[67:9 - 67:19]
+// CHECK: 67:9: UnexposedExpr=c:2:14 Extent=[67:9 - 67:10]
 // CHECK: 67:9: DeclRefExpr=c:2:14 Extent=[67:9 - 67:10]
 // CHECK: 67:14: UnexposedExpr= Extent=[67:14 - 67:19]
 // CHECK: 67:14: IntegerLiteral= Extent=[67:14 - 67:19]
-// CHECK: 67:23: BinaryOperator= Extent=[67:23 - 67:33]
+// CHECK: 67:23: BinaryOperator=<= Extent=[67:23 - 67:33]
+// CHECK: 67:23: UnexposedExpr=c:2:14 Extent=[67:23 - 67:24]
 // CHECK: 67:23: DeclRefExpr=c:2:14 Extent=[67:23 - 67:24]
 // CHECK: 67:28: UnexposedExpr= Extent=[67:28 - 67:33]
 // CHECK: 67:28: IntegerLiteral= Extent=[67:28 - 67:33]
-// CHECK: 68:9: BinaryOperator= Extent=[68:9 - 68:33]
-// CHECK: 68:9: BinaryOperator= Extent=[68:9 - 68:19]
+// CHECK: 68:8: ParenExpr= Extent=[68:8 - 68:34]
+// CHECK: 68:9: BinaryOperator=&& Extent=[68:9 - 68:33]
+// CHECK: 68:9: BinaryOperator=>= Extent=[68:9 - 68:19]
+// CHECK: 68:9: UnexposedExpr=c:2:14 Extent=[68:9 - 68:10]
 // CHECK: 68:9: DeclRefExpr=c:2:14 Extent=[68:9 - 68:10]
 // CHECK: 68:14: UnexposedExpr= Extent=[68:14 - 68:19]
 // CHECK: 68:14: IntegerLiteral= Extent=[68:14 - 68:19]
-// CHECK: 68:23: BinaryOperator= Extent=[68:23 - 68:33]
+// CHECK: 68:23: BinaryOperator=<= Extent=[68:23 - 68:33]
+// CHECK: 68:23: UnexposedExpr=c:2:14 Extent=[68:23 - 68:24]
 // CHECK: 68:23: DeclRefExpr=c:2:14 Extent=[68:23 - 68:24]
 // CHECK: 68:28: UnexposedExpr= Extent=[68:28 - 68:33]
 // CHECK: 68:28: IntegerLiteral= Extent=[68:28 - 68:33]
-// CHECK: 69:9: BinaryOperator= Extent=[69:9 - 69:33]
-// CHECK: 69:9: BinaryOperator= Extent=[69:9 - 69:19]
+// CHECK: 69:8: ParenExpr= Extent=[69:8 - 69:34]
+// CHECK: 69:9: BinaryOperator=&& Extent=[69:9 - 69:33]
+// CHECK: 69:9: BinaryOperator=>= Extent=[69:9 - 69:19]
+// CHECK: 69:9: UnexposedExpr=c:2:14 Extent=[69:9 - 69:10]
 // CHECK: 69:9: DeclRefExpr=c:2:14 Extent=[69:9 - 69:10]
 // CHECK: 69:14: UnexposedExpr= Extent=[69:14 - 69:19]
 // CHECK: 69:14: IntegerLiteral= Extent=[69:14 - 69:19]
-// CHECK: 69:23: BinaryOperator= Extent=[69:23 - 69:33]
+// CHECK: 69:23: BinaryOperator=<= Extent=[69:23 - 69:33]
+// CHECK: 69:23: UnexposedExpr=c:2:14 Extent=[69:23 - 69:24]
 // CHECK: 69:23: DeclRefExpr=c:2:14 Extent=[69:23 - 69:24]
 // CHECK: 69:28: UnexposedExpr= Extent=[69:28 - 69:33]
 // CHECK: 69:28: IntegerLiteral= Extent=[69:28 - 69:33]
-// CHECK: 70:8: BinaryOperator= Extent=[70:8 - 70:18]
+// CHECK: 70:8: BinaryOperator=== Extent=[70:8 - 70:18]
+// CHECK: 70:8: UnexposedExpr=c:2:14 Extent=[70:8 - 70:9]
 // CHECK: 70:8: DeclRefExpr=c:2:14 Extent=[70:8 - 70:9]
 // CHECK: 70:13: UnexposedExpr= Extent=[70:13 - 70:18]
 // CHECK: 70:13: IntegerLiteral= Extent=[70:13 - 70:18]
-// CHECK: 70:22: BinaryOperator= Extent=[70:22 - 70:32]
+// CHECK: 70:22: BinaryOperator=== Extent=[70:22 - 70:32]
+// CHECK: 70:22: UnexposedExpr=c:2:14 Extent=[70:22 - 70:23]
 // CHECK: 70:22: DeclRefExpr=c:2:14 Extent=[70:22 - 70:23]
 // CHECK: 70:27: UnexposedExpr= Extent=[70:27 - 70:32]
 // CHECK: 70:27: IntegerLiteral= Extent=[70:27 - 70:32]
-// CHECK: 70:37: BinaryOperator= Extent=[70:37 - 70:61]
-// CHECK: 70:37: BinaryOperator= Extent=[70:37 - 70:47]
+// CHECK: 70:36: ParenExpr= Extent=[70:36 - 70:62]
+// CHECK: 70:37: BinaryOperator=&& Extent=[70:37 - 70:61]
+// CHECK: 70:37: BinaryOperator=>= Extent=[70:37 - 70:47]
+// CHECK: 70:37: UnexposedExpr=c:2:14 Extent=[70:37 - 70:38]
 // CHECK: 70:37: DeclRefExpr=c:2:14 Extent=[70:37 - 70:38]
 // CHECK: 70:42: UnexposedExpr= Extent=[70:42 - 70:47]
 // CHECK: 70:42: IntegerLiteral= Extent=[70:42 - 70:47]
-// CHECK: 70:51: BinaryOperator= Extent=[70:51 - 70:61]
+// CHECK: 70:51: BinaryOperator=<= Extent=[70:51 - 70:61]
+// CHECK: 70:51: UnexposedExpr=c:2:14 Extent=[70:51 - 70:52]
 // CHECK: 70:51: DeclRefExpr=c:2:14 Extent=[70:51 - 70:52]
 // CHECK: 70:56: UnexposedExpr= Extent=[70:56 - 70:61]
 // CHECK: 70:56: IntegerLiteral= Extent=[70:56 - 70:61]
-// CHECK: 71:9: BinaryOperator= Extent=[71:9 - 71:33]
-// CHECK: 71:9: BinaryOperator= Extent=[71:9 - 71:19]
+// CHECK: 71:8: ParenExpr= Extent=[71:8 - 71:34]
+// CHECK: 71:9: BinaryOperator=&& Extent=[71:9 - 71:33]
+// CHECK: 71:9: BinaryOperator=>= Extent=[71:9 - 71:19]
+// CHECK: 71:9: UnexposedExpr=c:2:14 Extent=[71:9 - 71:10]
 // CHECK: 71:9: DeclRefExpr=c:2:14 Extent=[71:9 - 71:10]
 // CHECK: 71:14: UnexposedExpr= Extent=[71:14 - 71:19]
 // CHECK: 71:14: IntegerLiteral= Extent=[71:14 - 71:19]
-// CHECK: 71:23: BinaryOperator= Extent=[71:23 - 71:33]
+// CHECK: 71:23: BinaryOperator=<= Extent=[71:23 - 71:33]
+// CHECK: 71:23: UnexposedExpr=c:2:14 Extent=[71:23 - 71:24]
 // CHECK: 71:23: DeclRefExpr=c:2:14 Extent=[71:23 - 71:24]
 // CHECK: 71:28: UnexposedExpr= Extent=[71:28 - 71:33]
 // CHECK: 71:28: IntegerLiteral= Extent=[71:28 - 71:33]
-// CHECK: 72:9: BinaryOperator= Extent=[72:9 - 72:33]
-// CHECK: 72:9: BinaryOperator= Extent=[72:9 - 72:19]
+// CHECK: 72:8: ParenExpr= Extent=[72:8 - 72:34]
+// CHECK: 72:9: BinaryOperator=&& Extent=[72:9 - 72:33]
+// CHECK: 72:9: BinaryOperator=>= Extent=[72:9 - 72:19]
+// CHECK: 72:9: UnexposedExpr=c:2:14 Extent=[72:9 - 72:10]
 // CHECK: 72:9: DeclRefExpr=c:2:14 Extent=[72:9 - 72:10]
 // CHECK: 72:14: UnexposedExpr= Extent=[72:14 - 72:19]
 // CHECK: 72:14: IntegerLiteral= Extent=[72:14 - 72:19]
-// CHECK: 72:23: BinaryOperator= Extent=[72:23 - 72:33]
+// CHECK: 72:23: BinaryOperator=<= Extent=[72:23 - 72:33]
+// CHECK: 72:23: UnexposedExpr=c:2:14 Extent=[72:23 - 72:24]
 // CHECK: 72:23: DeclRefExpr=c:2:14 Extent=[72:23 - 72:24]
 // CHECK: 72:28: UnexposedExpr= Extent=[72:28 - 72:33]
 // CHECK: 72:28: IntegerLiteral= Extent=[72:28 - 72:33]
-// CHECK: 73:9: BinaryOperator= Extent=[73:9 - 73:33]
-// CHECK: 73:9: BinaryOperator= Extent=[73:9 - 73:19]
+// CHECK: 73:8: ParenExpr= Extent=[73:8 - 73:34]
+// CHECK: 73:9: BinaryOperator=&& Extent=[73:9 - 73:33]
+// CHECK: 73:9: BinaryOperator=>= Extent=[73:9 - 73:19]
+// CHECK: 73:9: UnexposedExpr=c:2:14 Extent=[73:9 - 73:10]
 // CHECK: 73:9: DeclRefExpr=c:2:14 Extent=[73:9 - 73:10]
 // CHECK: 73:14: UnexposedExpr= Extent=[73:14 - 73:19]
 // CHECK: 73:14: IntegerLiteral= Extent=[73:14 - 73:19]
-// CHECK: 73:23: BinaryOperator= Extent=[73:23 - 73:33]
+// CHECK: 73:23: BinaryOperator=<= Extent=[73:23 - 73:33]
+// CHECK: 73:23: UnexposedExpr=c:2:14 Extent=[73:23 - 73:24]
 // CHECK: 73:23: DeclRefExpr=c:2:14 Extent=[73:23 - 73:24]
 // CHECK: 73:28: UnexposedExpr= Extent=[73:28 - 73:33]
 // CHECK: 73:28: IntegerLiteral= Extent=[73:28 - 73:33]
-// CHECK: 74:9: BinaryOperator= Extent=[74:9 - 74:33]
-// CHECK: 74:9: BinaryOperator= Extent=[74:9 - 74:19]
+// CHECK: 74:8: ParenExpr= Extent=[74:8 - 74:34]
+// CHECK: 74:9: BinaryOperator=&& Extent=[74:9 - 74:33]
+// CHECK: 74:9: BinaryOperator=>= Extent=[74:9 - 74:19]
+// CHECK: 74:9: UnexposedExpr=c:2:14 Extent=[74:9 - 74:10]
 // CHECK: 74:9: DeclRefExpr=c:2:14 Extent=[74:9 - 74:10]
 // CHECK: 74:14: UnexposedExpr= Extent=[74:14 - 74:19]
 // CHECK: 74:14: IntegerLiteral= Extent=[74:14 - 74:19]
-// CHECK: 74:23: BinaryOperator= Extent=[74:23 - 74:33]
+// CHECK: 74:23: BinaryOperator=<= Extent=[74:23 - 74:33]
+// CHECK: 74:23: UnexposedExpr=c:2:14 Extent=[74:23 - 74:24]
 // CHECK: 74:23: DeclRefExpr=c:2:14 Extent=[74:23 - 74:24]
 // CHECK: 74:28: UnexposedExpr= Extent=[74:28 - 74:33]
 // CHECK: 74:28: IntegerLiteral= Extent=[74:28 - 74:33]
-// CHECK: 75:9: BinaryOperator= Extent=[75:9 - 75:33]
-// CHECK: 75:9: BinaryOperator= Extent=[75:9 - 75:19]
+// CHECK: 75:8: ParenExpr= Extent=[75:8 - 75:34]
+// CHECK: 75:9: BinaryOperator=&& Extent=[75:9 - 75:33]
+// CHECK: 75:9: BinaryOperator=>= Extent=[75:9 - 75:19]
+// CHECK: 75:9: UnexposedExpr=c:2:14 Extent=[75:9 - 75:10]
 // CHECK: 75:9: DeclRefExpr=c:2:14 Extent=[75:9 - 75:10]
 // CHECK: 75:14: UnexposedExpr= Extent=[75:14 - 75:19]
 // CHECK: 75:14: IntegerLiteral= Extent=[75:14 - 75:19]
-// CHECK: 75:23: BinaryOperator= Extent=[75:23 - 75:33]
+// CHECK: 75:23: BinaryOperator=<= Extent=[75:23 - 75:33]
+// CHECK: 75:23: UnexposedExpr=c:2:14 Extent=[75:23 - 75:24]
 // CHECK: 75:23: DeclRefExpr=c:2:14 Extent=[75:23 - 75:24]
 // CHECK: 75:28: UnexposedExpr= Extent=[75:28 - 75:33]
 // CHECK: 75:28: IntegerLiteral= Extent=[75:28 - 75:33]
-// CHECK: 76:8: BinaryOperator= Extent=[76:8 - 76:18]
+// CHECK: 76:8: BinaryOperator=== Extent=[76:8 - 76:18]
+// CHECK: 76:8: UnexposedExpr=c:2:14 Extent=[76:8 - 76:9]
 // CHECK: 76:8: DeclRefExpr=c:2:14 Extent=[76:8 - 76:9]
 // CHECK: 76:13: UnexposedExpr= Extent=[76:13 - 76:18]
 // CHECK: 76:13: IntegerLiteral= Extent=[76:13 - 76:18]
-// CHECK: 76:23: BinaryOperator= Extent=[76:23 - 76:47]
-// CHECK: 76:23: BinaryOperator= Extent=[76:23 - 76:33]
+// CHECK: 76:22: ParenExpr= Extent=[76:22 - 76:48]
+// CHECK: 76:23: BinaryOperator=&& Extent=[76:23 - 76:47]
+// CHECK: 76:23: BinaryOperator=>= Extent=[76:23 - 76:33]
+// CHECK: 76:23: UnexposedExpr=c:2:14 Extent=[76:23 - 76:24]
 // CHECK: 76:23: DeclRefExpr=c:2:14 Extent=[76:23 - 76:24]
 // CHECK: 76:28: UnexposedExpr= Extent=[76:28 - 76:33]
 // CHECK: 76:28: IntegerLiteral= Extent=[76:28 - 76:33]
-// CHECK: 76:37: BinaryOperator= Extent=[76:37 - 76:47]
+// CHECK: 76:37: BinaryOperator=<= Extent=[76:37 - 76:47]
+// CHECK: 76:37: UnexposedExpr=c:2:14 Extent=[76:37 - 76:38]
 // CHECK: 76:37: DeclRefExpr=c:2:14 Extent=[76:37 - 76:38]
 // CHECK: 76:42: UnexposedExpr= Extent=[76:42 - 76:47]
 // CHECK: 76:42: IntegerLiteral= Extent=[76:42 - 76:47]
-// CHECK: 77:9: BinaryOperator= Extent=[77:9 - 77:33]
-// CHECK: 77:9: BinaryOperator= Extent=[77:9 - 77:19]
+// CHECK: 77:8: ParenExpr= Extent=[77:8 - 77:34]
+// CHECK: 77:9: BinaryOperator=&& Extent=[77:9 - 77:33]
+// CHECK: 77:9: BinaryOperator=>= Extent=[77:9 - 77:19]
+// CHECK: 77:9: UnexposedExpr=c:2:14 Extent=[77:9 - 77:10]
 // CHECK: 77:9: DeclRefExpr=c:2:14 Extent=[77:9 - 77:10]
 // CHECK: 77:14: UnexposedExpr= Extent=[77:14 - 77:19]
 // CHECK: 77:14: IntegerLiteral= Extent=[77:14 - 77:19]
-// CHECK: 77:23: BinaryOperator= Extent=[77:23 - 77:33]
+// CHECK: 77:23: BinaryOperator=<= Extent=[77:23 - 77:33]
+// CHECK: 77:23: UnexposedExpr=c:2:14 Extent=[77:23 - 77:24]
 // CHECK: 77:23: DeclRefExpr=c:2:14 Extent=[77:23 - 77:24]
 // CHECK: 77:28: UnexposedExpr= Extent=[77:28 - 77:33]
 // CHECK: 77:28: IntegerLiteral= Extent=[77:28 - 77:33]
-// CHECK: 78:9: BinaryOperator= Extent=[78:9 - 78:33]
-// CHECK: 78:9: BinaryOperator= Extent=[78:9 - 78:19]
+// CHECK: 78:8: ParenExpr= Extent=[78:8 - 78:34]
+// CHECK: 78:9: BinaryOperator=&& Extent=[78:9 - 78:33]
+// CHECK: 78:9: BinaryOperator=>= Extent=[78:9 - 78:19]
+// CHECK: 78:9: UnexposedExpr=c:2:14 Extent=[78:9 - 78:10]
 // CHECK: 78:9: DeclRefExpr=c:2:14 Extent=[78:9 - 78:10]
 // CHECK: 78:14: UnexposedExpr= Extent=[78:14 - 78:19]
 // CHECK: 78:14: IntegerLiteral= Extent=[78:14 - 78:19]
-// CHECK: 78:23: BinaryOperator= Extent=[78:23 - 78:33]
+// CHECK: 78:23: BinaryOperator=<= Extent=[78:23 - 78:33]
+// CHECK: 78:23: UnexposedExpr=c:2:14 Extent=[78:23 - 78:24]
 // CHECK: 78:23: DeclRefExpr=c:2:14 Extent=[78:23 - 78:24]
 // CHECK: 78:28: UnexposedExpr= Extent=[78:28 - 78:33]
 // CHECK: 78:28: IntegerLiteral= Extent=[78:28 - 78:33]
-// CHECK: 79:9: BinaryOperator= Extent=[79:9 - 79:33]
-// CHECK: 79:9: BinaryOperator= Extent=[79:9 - 79:19]
+// CHECK: 79:8: ParenExpr= Extent=[79:8 - 79:34]
+// CHECK: 79:9: BinaryOperator=&& Extent=[79:9 - 79:33]
+// CHECK: 79:9: BinaryOperator=>= Extent=[79:9 - 79:19]
+// CHECK: 79:9: UnexposedExpr=c:2:14 Extent=[79:9 - 79:10]
 // CHECK: 79:9: DeclRefExpr=c:2:14 Extent=[79:9 - 79:10]
 // CHECK: 79:14: UnexposedExpr= Extent=[79:14 - 79:19]
 // CHECK: 79:14: IntegerLiteral= Extent=[79:14 - 79:19]
-// CHECK: 79:23: BinaryOperator= Extent=[79:23 - 79:33]
+// CHECK: 79:23: BinaryOperator=<= Extent=[79:23 - 79:33]
+// CHECK: 79:23: UnexposedExpr=c:2:14 Extent=[79:23 - 79:24]
 // CHECK: 79:23: DeclRefExpr=c:2:14 Extent=[79:23 - 79:24]
 // CHECK: 79:28: UnexposedExpr= Extent=[79:28 - 79:33]
 // CHECK: 79:28: IntegerLiteral= Extent=[79:28 - 79:33]
-// CHECK: 80:9: BinaryOperator= Extent=[80:9 - 80:33]
-// CHECK: 80:9: BinaryOperator= Extent=[80:9 - 80:19]
+// CHECK: 80:8: ParenExpr= Extent=[80:8 - 80:34]
+// CHECK: 80:9: BinaryOperator=&& Extent=[80:9 - 80:33]
+// CHECK: 80:9: BinaryOperator=>= Extent=[80:9 - 80:19]
+// CHECK: 80:9: UnexposedExpr=c:2:14 Extent=[80:9 - 80:10]
 // CHECK: 80:9: DeclRefExpr=c:2:14 Extent=[80:9 - 80:10]
 // CHECK: 80:14: UnexposedExpr= Extent=[80:14 - 80:19]
 // CHECK: 80:14: IntegerLiteral= Extent=[80:14 - 80:19]
-// CHECK: 80:23: BinaryOperator= Extent=[80:23 - 80:33]
+// CHECK: 80:23: BinaryOperator=<= Extent=[80:23 - 80:33]
+// CHECK: 80:23: UnexposedExpr=c:2:14 Extent=[80:23 - 80:24]
 // CHECK: 80:23: DeclRefExpr=c:2:14 Extent=[80:23 - 80:24]
 // CHECK: 80:28: UnexposedExpr= Extent=[80:28 - 80:33]
 // CHECK: 80:28: IntegerLiteral= Extent=[80:28 - 80:33]
-// CHECK: 81:9: BinaryOperator= Extent=[81:9 - 81:33]
-// CHECK: 81:9: BinaryOperator= Extent=[81:9 - 81:19]
+// CHECK: 81:8: ParenExpr= Extent=[81:8 - 81:34]
+// CHECK: 81:9: BinaryOperator=&& Extent=[81:9 - 81:33]
+// CHECK: 81:9: BinaryOperator=>= Extent=[81:9 - 81:19]
+// CHECK: 81:9: UnexposedExpr=c:2:14 Extent=[81:9 - 81:10]
 // CHECK: 81:9: DeclRefExpr=c:2:14 Extent=[81:9 - 81:10]
 // CHECK: 81:14: UnexposedExpr= Extent=[81:14 - 81:19]
 // CHECK: 81:14: IntegerLiteral= Extent=[81:14 - 81:19]
-// CHECK: 81:23: BinaryOperator= Extent=[81:23 - 81:33]
+// CHECK: 81:23: BinaryOperator=<= Extent=[81:23 - 81:33]
+// CHECK: 81:23: UnexposedExpr=c:2:14 Extent=[81:23 - 81:24]
 // CHECK: 81:23: DeclRefExpr=c:2:14 Extent=[81:23 - 81:24]
 // CHECK: 81:28: UnexposedExpr= Extent=[81:28 - 81:33]
 // CHECK: 81:28: IntegerLiteral= Extent=[81:28 - 81:33]
-// CHECK: 82:8: BinaryOperator= Extent=[82:8 - 82:18]
+// CHECK: 82:8: BinaryOperator=== Extent=[82:8 - 82:18]
+// CHECK: 82:8: UnexposedExpr=c:2:14 Extent=[82:8 - 82:9]
 // CHECK: 82:8: DeclRefExpr=c:2:14 Extent=[82:8 - 82:9]
 // CHECK: 82:13: UnexposedExpr= Extent=[82:13 - 82:18]
 // CHECK: 82:13: IntegerLiteral= Extent=[82:13 - 82:18]
-// CHECK: 82:23: BinaryOperator= Extent=[82:23 - 82:47]
-// CHECK: 82:23: BinaryOperator= Extent=[82:23 - 82:33]
+// CHECK: 82:22: ParenExpr= Extent=[82:22 - 82:48]
+// CHECK: 82:23: BinaryOperator=&& Extent=[82:23 - 82:47]
+// CHECK: 82:23: BinaryOperator=>= Extent=[82:23 - 82:33]
+// CHECK: 82:23: UnexposedExpr=c:2:14 Extent=[82:23 - 82:24]
 // CHECK: 82:23: DeclRefExpr=c:2:14 Extent=[82:23 - 82:24]
 // CHECK: 82:28: UnexposedExpr= Extent=[82:28 - 82:33]
 // CHECK: 82:28: IntegerLiteral= Extent=[82:28 - 82:33]
-// CHECK: 82:37: BinaryOperator= Extent=[82:37 - 82:47]
+// CHECK: 82:37: BinaryOperator=<= Extent=[82:37 - 82:47]
+// CHECK: 82:37: UnexposedExpr=c:2:14 Extent=[82:37 - 82:38]
 // CHECK: 82:37: DeclRefExpr=c:2:14 Extent=[82:37 - 82:38]
 // CHECK: 82:42: UnexposedExpr= Extent=[82:42 - 82:47]
 // CHECK: 82:42: IntegerLiteral= Extent=[82:42 - 82:47]
-// CHECK: 83:9: BinaryOperator= Extent=[83:9 - 83:33]
-// CHECK: 83:9: BinaryOperator= Extent=[83:9 - 83:19]
+// CHECK: 83:8: ParenExpr= Extent=[83:8 - 83:34]
+// CHECK: 83:9: BinaryOperator=&& Extent=[83:9 - 83:33]
+// CHECK: 83:9: BinaryOperator=>= Extent=[83:9 - 83:19]
+// CHECK: 83:9: UnexposedExpr=c:2:14 Extent=[83:9 - 83:10]
 // CHECK: 83:9: DeclRefExpr=c:2:14 Extent=[83:9 - 83:10]
 // CHECK: 83:14: UnexposedExpr= Extent=[83:14 - 83:19]
 // CHECK: 83:14: IntegerLiteral= Extent=[83:14 - 83:19]
-// CHECK: 83:23: BinaryOperator= Extent=[83:23 - 83:33]
+// CHECK: 83:23: BinaryOperator=<= Extent=[83:23 - 83:33]
+// CHECK: 83:23: UnexposedExpr=c:2:14 Extent=[83:23 - 83:24]
 // CHECK: 83:23: DeclRefExpr=c:2:14 Extent=[83:23 - 83:24]
 // CHECK: 83:28: UnexposedExpr= Extent=[83:28 - 83:33]
 // CHECK: 83:28: IntegerLiteral= Extent=[83:28 - 83:33]
-// CHECK: 84:9: BinaryOperator= Extent=[84:9 - 84:33]
-// CHECK: 84:9: BinaryOperator= Extent=[84:9 - 84:19]
+// CHECK: 84:8: ParenExpr= Extent=[84:8 - 84:34]
+// CHECK: 84:9: BinaryOperator=&& Extent=[84:9 - 84:33]
+// CHECK: 84:9: BinaryOperator=>= Extent=[84:9 - 84:19]
+// CHECK: 84:9: UnexposedExpr=c:2:14 Extent=[84:9 - 84:10]
 // CHECK: 84:9: DeclRefExpr=c:2:14 Extent=[84:9 - 84:10]
 // CHECK: 84:14: UnexposedExpr= Extent=[84:14 - 84:19]
 // CHECK: 84:14: IntegerLiteral= Extent=[84:14 - 84:19]
-// CHECK: 84:23: BinaryOperator= Extent=[84:23 - 84:33]
+// CHECK: 84:23: BinaryOperator=<= Extent=[84:23 - 84:33]
+// CHECK: 84:23: UnexposedExpr=c:2:14 Extent=[84:23 - 84:24]
 // CHECK: 84:23: DeclRefExpr=c:2:14 Extent=[84:23 - 84:24]
 // CHECK: 84:28: UnexposedExpr= Extent=[84:28 - 84:33]
 // CHECK: 84:28: IntegerLiteral= Extent=[84:28 - 84:33]
-// CHECK: 85:9: BinaryOperator= Extent=[85:9 - 85:33]
-// CHECK: 85:9: BinaryOperator= Extent=[85:9 - 85:19]
+// CHECK: 85:8: ParenExpr= Extent=[85:8 - 85:34]
+// CHECK: 85:9: BinaryOperator=&& Extent=[85:9 - 85:33]
+// CHECK: 85:9: BinaryOperator=>= Extent=[85:9 - 85:19]
+// CHECK: 85:9: UnexposedExpr=c:2:14 Extent=[85:9 - 85:10]
 // CHECK: 85:9: DeclRefExpr=c:2:14 Extent=[85:9 - 85:10]
 // CHECK: 85:14: UnexposedExpr= Extent=[85:14 - 85:19]
 // CHECK: 85:14: IntegerLiteral= Extent=[85:14 - 85:19]
-// CHECK: 85:23: BinaryOperator= Extent=[85:23 - 85:33]
+// CHECK: 85:23: BinaryOperator=<= Extent=[85:23 - 85:33]
+// CHECK: 85:23: UnexposedExpr=c:2:14 Extent=[85:23 - 85:24]
 // CHECK: 85:23: DeclRefExpr=c:2:14 Extent=[85:23 - 85:24]
 // CHECK: 85:28: UnexposedExpr= Extent=[85:28 - 85:33]
 // CHECK: 85:28: IntegerLiteral= Extent=[85:28 - 85:33]
-// CHECK: 86:9: BinaryOperator= Extent=[86:9 - 86:33]
-// CHECK: 86:9: BinaryOperator= Extent=[86:9 - 86:19]
+// CHECK: 86:8: ParenExpr= Extent=[86:8 - 86:34]
+// CHECK: 86:9: BinaryOperator=&& Extent=[86:9 - 86:33]
+// CHECK: 86:9: BinaryOperator=>= Extent=[86:9 - 86:19]
+// CHECK: 86:9: UnexposedExpr=c:2:14 Extent=[86:9 - 86:10]
 // CHECK: 86:9: DeclRefExpr=c:2:14 Extent=[86:9 - 86:10]
 // CHECK: 86:14: UnexposedExpr= Extent=[86:14 - 86:19]
 // CHECK: 86:14: IntegerLiteral= Extent=[86:14 - 86:19]
-// CHECK: 86:23: BinaryOperator= Extent=[86:23 - 86:33]
+// CHECK: 86:23: BinaryOperator=<= Extent=[86:23 - 86:33]
+// CHECK: 86:23: UnexposedExpr=c:2:14 Extent=[86:23 - 86:24]
 // CHECK: 86:23: DeclRefExpr=c:2:14 Extent=[86:23 - 86:24]
 // CHECK: 86:28: UnexposedExpr= Extent=[86:28 - 86:33]
 // CHECK: 86:28: IntegerLiteral= Extent=[86:28 - 86:33]
-// CHECK: 87:9: BinaryOperator= Extent=[87:9 - 87:33]
-// CHECK: 87:9: BinaryOperator= Extent=[87:9 - 87:19]
+// CHECK: 87:8: ParenExpr= Extent=[87:8 - 87:34]
+// CHECK: 87:9: BinaryOperator=&& Extent=[87:9 - 87:33]
+// CHECK: 87:9: BinaryOperator=>= Extent=[87:9 - 87:19]
+// CHECK: 87:9: UnexposedExpr=c:2:14 Extent=[87:9 - 87:10]
 // CHECK: 87:9: DeclRefExpr=c:2:14 Extent=[87:9 - 87:10]
 // CHECK: 87:14: UnexposedExpr= Extent=[87:14 - 87:19]
 // CHECK: 87:14: IntegerLiteral= Extent=[87:14 - 87:19]
-// CHECK: 87:23: BinaryOperator= Extent=[87:23 - 87:33]
+// CHECK: 87:23: BinaryOperator=<= Extent=[87:23 - 87:33]
+// CHECK: 87:23: UnexposedExpr=c:2:14 Extent=[87:23 - 87:24]
 // CHECK: 87:23: DeclRefExpr=c:2:14 Extent=[87:23 - 87:24]
 // CHECK: 87:28: UnexposedExpr= Extent=[87:28 - 87:33]
 // CHECK: 87:28: IntegerLiteral= Extent=[87:28 - 87:33]
-// CHECK: 88:9: BinaryOperator= Extent=[88:9 - 88:33]
-// CHECK: 88:9: BinaryOperator= Extent=[88:9 - 88:19]
+// CHECK: 88:8: ParenExpr= Extent=[88:8 - 88:34]
+// CHECK: 88:9: BinaryOperator=&& Extent=[88:9 - 88:33]
+// CHECK: 88:9: BinaryOperator=>= Extent=[88:9 - 88:19]
+// CHECK: 88:9: UnexposedExpr=c:2:14 Extent=[88:9 - 88:10]
 // CHECK: 88:9: DeclRefExpr=c:2:14 Extent=[88:9 - 88:10]
 // CHECK: 88:14: UnexposedExpr= Extent=[88:14 - 88:19]
 // CHECK: 88:14: IntegerLiteral= Extent=[88:14 - 88:19]
-// CHECK: 88:23: BinaryOperator= Extent=[88:23 - 88:33]
+// CHECK: 88:23: BinaryOperator=<= Extent=[88:23 - 88:33]
+// CHECK: 88:23: UnexposedExpr=c:2:14 Extent=[88:23 - 88:24]
 // CHECK: 88:23: DeclRefExpr=c:2:14 Extent=[88:23 - 88:24]
 // CHECK: 88:28: UnexposedExpr= Extent=[88:28 - 88:33]
 // CHECK: 88:28: IntegerLiteral= Extent=[88:28 - 88:33]
-// CHECK: 89:9: BinaryOperator= Extent=[89:9 - 89:33]
-// CHECK: 89:9: BinaryOperator= Extent=[89:9 - 89:19]
+// CHECK: 89:8: ParenExpr= Extent=[89:8 - 89:34]
+// CHECK: 89:9: BinaryOperator=&& Extent=[89:9 - 89:33]
+// CHECK: 89:9: BinaryOperator=>= Extent=[89:9 - 89:19]
+// CHECK: 89:9: UnexposedExpr=c:2:14 Extent=[89:9 - 89:10]
 // CHECK: 89:9: DeclRefExpr=c:2:14 Extent=[89:9 - 89:10]
 // CHECK: 89:14: UnexposedExpr= Extent=[89:14 - 89:19]
 // CHECK: 89:14: IntegerLiteral= Extent=[89:14 - 89:19]
-// CHECK: 89:23: BinaryOperator= Extent=[89:23 - 89:33]
+// CHECK: 89:23: BinaryOperator=<= Extent=[89:23 - 89:33]
+// CHECK: 89:23: UnexposedExpr=c:2:14 Extent=[89:23 - 89:24]
 // CHECK: 89:23: DeclRefExpr=c:2:14 Extent=[89:23 - 89:24]
 // CHECK: 89:28: UnexposedExpr= Extent=[89:28 - 89:33]
 // CHECK: 89:28: IntegerLiteral= Extent=[89:28 - 89:33]
-// CHECK: 90:9: BinaryOperator= Extent=[90:9 - 90:33]
-// CHECK: 90:9: BinaryOperator= Extent=[90:9 - 90:19]
+// CHECK: 90:8: ParenExpr= Extent=[90:8 - 90:34]
+// CHECK: 90:9: BinaryOperator=&& Extent=[90:9 - 90:33]
+// CHECK: 90:9: BinaryOperator=>= Extent=[90:9 - 90:19]
+// CHECK: 90:9: UnexposedExpr=c:2:14 Extent=[90:9 - 90:10]
 // CHECK: 90:9: DeclRefExpr=c:2:14 Extent=[90:9 - 90:10]
 // CHECK: 90:14: UnexposedExpr= Extent=[90:14 - 90:19]
 // CHECK: 90:14: IntegerLiteral= Extent=[90:14 - 90:19]
-// CHECK: 90:23: BinaryOperator= Extent=[90:23 - 90:33]
+// CHECK: 90:23: BinaryOperator=<= Extent=[90:23 - 90:33]
+// CHECK: 90:23: UnexposedExpr=c:2:14 Extent=[90:23 - 90:24]
 // CHECK: 90:23: DeclRefExpr=c:2:14 Extent=[90:23 - 90:24]
 // CHECK: 90:28: UnexposedExpr= Extent=[90:28 - 90:33]
 // CHECK: 90:28: IntegerLiteral= Extent=[90:28 - 90:33]
-// CHECK: 91:9: BinaryOperator= Extent=[91:9 - 91:33]
-// CHECK: 91:9: BinaryOperator= Extent=[91:9 - 91:19]
+// CHECK: 91:8: ParenExpr= Extent=[91:8 - 91:34]
+// CHECK: 91:9: BinaryOperator=&& Extent=[91:9 - 91:33]
+// CHECK: 91:9: BinaryOperator=>= Extent=[91:9 - 91:19]
+// CHECK: 91:9: UnexposedExpr=c:2:14 Extent=[91:9 - 91:10]
 // CHECK: 91:9: DeclRefExpr=c:2:14 Extent=[91:9 - 91:10]
 // CHECK: 91:14: UnexposedExpr= Extent=[91:14 - 91:19]
 // CHECK: 91:14: IntegerLiteral= Extent=[91:14 - 91:19]
-// CHECK: 91:23: BinaryOperator= Extent=[91:23 - 91:33]
+// CHECK: 91:23: BinaryOperator=<= Extent=[91:23 - 91:33]
+// CHECK: 91:23: UnexposedExpr=c:2:14 Extent=[91:23 - 91:24]
 // CHECK: 91:23: DeclRefExpr=c:2:14 Extent=[91:23 - 91:24]
 // CHECK: 91:28: UnexposedExpr= Extent=[91:28 - 91:33]
 // CHECK: 91:28: IntegerLiteral= Extent=[91:28 - 91:33]
-// CHECK: 92:9: BinaryOperator= Extent=[92:9 - 92:33]
-// CHECK: 92:9: BinaryOperator= Extent=[92:9 - 92:19]
+// CHECK: 92:8: ParenExpr= Extent=[92:8 - 92:34]
+// CHECK: 92:9: BinaryOperator=&& Extent=[92:9 - 92:33]
+// CHECK: 92:9: BinaryOperator=>= Extent=[92:9 - 92:19]
+// CHECK: 92:9: UnexposedExpr=c:2:14 Extent=[92:9 - 92:10]
 // CHECK: 92:9: DeclRefExpr=c:2:14 Extent=[92:9 - 92:10]
 // CHECK: 92:14: UnexposedExpr= Extent=[92:14 - 92:19]
 // CHECK: 92:14: IntegerLiteral= Extent=[92:14 - 92:19]
-// CHECK: 92:23: BinaryOperator= Extent=[92:23 - 92:33]
+// CHECK: 92:23: BinaryOperator=<= Extent=[92:23 - 92:33]
+// CHECK: 92:23: UnexposedExpr=c:2:14 Extent=[92:23 - 92:24]
 // CHECK: 92:23: DeclRefExpr=c:2:14 Extent=[92:23 - 92:24]
 // CHECK: 92:28: UnexposedExpr= Extent=[92:28 - 92:33]
 // CHECK: 92:28: IntegerLiteral= Extent=[92:28 - 92:33]
-// CHECK: 93:9: BinaryOperator= Extent=[93:9 - 93:33]
-// CHECK: 93:9: BinaryOperator= Extent=[93:9 - 93:19]
+// CHECK: 93:8: ParenExpr= Extent=[93:8 - 93:34]
+// CHECK: 93:9: BinaryOperator=&& Extent=[93:9 - 93:33]
+// CHECK: 93:9: BinaryOperator=>= Extent=[93:9 - 93:19]
+// CHECK: 93:9: UnexposedExpr=c:2:14 Extent=[93:9 - 93:10]
 // CHECK: 93:9: DeclRefExpr=c:2:14 Extent=[93:9 - 93:10]
 // CHECK: 93:14: UnexposedExpr= Extent=[93:14 - 93:19]
 // CHECK: 93:14: IntegerLiteral= Extent=[93:14 - 93:19]
-// CHECK: 93:23: BinaryOperator= Extent=[93:23 - 93:33]
+// CHECK: 93:23: BinaryOperator=<= Extent=[93:23 - 93:33]
+// CHECK: 93:23: UnexposedExpr=c:2:14 Extent=[93:23 - 93:24]
 // CHECK: 93:23: DeclRefExpr=c:2:14 Extent=[93:23 - 93:24]
 // CHECK: 93:28: UnexposedExpr= Extent=[93:28 - 93:33]
 // CHECK: 93:28: IntegerLiteral= Extent=[93:28 - 93:33]
-// CHECK: 94:9: BinaryOperator= Extent=[94:9 - 94:33]
-// CHECK: 94:9: BinaryOperator= Extent=[94:9 - 94:19]
+// CHECK: 94:8: ParenExpr= Extent=[94:8 - 94:34]
+// CHECK: 94:9: BinaryOperator=&& Extent=[94:9 - 94:33]
+// CHECK: 94:9: BinaryOperator=>= Extent=[94:9 - 94:19]
+// CHECK: 94:9: UnexposedExpr=c:2:14 Extent=[94:9 - 94:10]
 // CHECK: 94:9: DeclRefExpr=c:2:14 Extent=[94:9 - 94:10]
 // CHECK: 94:14: UnexposedExpr= Extent=[94:14 - 94:19]
 // CHECK: 94:14: IntegerLiteral= Extent=[94:14 - 94:19]
-// CHECK: 94:23: BinaryOperator= Extent=[94:23 - 94:33]
+// CHECK: 94:23: BinaryOperator=<= Extent=[94:23 - 94:33]
+// CHECK: 94:23: UnexposedExpr=c:2:14 Extent=[94:23 - 94:24]
 // CHECK: 94:23: DeclRefExpr=c:2:14 Extent=[94:23 - 94:24]
 // CHECK: 94:28: UnexposedExpr= Extent=[94:28 - 94:33]
 // CHECK: 94:28: IntegerLiteral= Extent=[94:28 - 94:33]
-// CHECK: 95:9: BinaryOperator= Extent=[95:9 - 95:33]
-// CHECK: 95:9: BinaryOperator= Extent=[95:9 - 95:19]
+// CHECK: 95:8: ParenExpr= Extent=[95:8 - 95:34]
+// CHECK: 95:9: BinaryOperator=&& Extent=[95:9 - 95:33]
+// CHECK: 95:9: BinaryOperator=>= Extent=[95:9 - 95:19]
+// CHECK: 95:9: UnexposedExpr=c:2:14 Extent=[95:9 - 95:10]
 // CHECK: 95:9: DeclRefExpr=c:2:14 Extent=[95:9 - 95:10]
 // CHECK: 95:14: UnexposedExpr= Extent=[95:14 - 95:19]
 // CHECK: 95:14: IntegerLiteral= Extent=[95:14 - 95:19]
-// CHECK: 95:23: BinaryOperator= Extent=[95:23 - 95:33]
+// CHECK: 95:23: BinaryOperator=<= Extent=[95:23 - 95:33]
+// CHECK: 95:23: UnexposedExpr=c:2:14 Extent=[95:23 - 95:24]
 // CHECK: 95:23: DeclRefExpr=c:2:14 Extent=[95:23 - 95:24]
 // CHECK: 95:28: UnexposedExpr= Extent=[95:28 - 95:33]
 // CHECK: 95:28: IntegerLiteral= Extent=[95:28 - 95:33]
-// CHECK: 96:9: BinaryOperator= Extent=[96:9 - 96:33]
-// CHECK: 96:9: BinaryOperator= Extent=[96:9 - 96:19]
+// CHECK: 96:8: ParenExpr= Extent=[96:8 - 96:34]
+// CHECK: 96:9: BinaryOperator=&& Extent=[96:9 - 96:33]
+// CHECK: 96:9: BinaryOperator=>= Extent=[96:9 - 96:19]
+// CHECK: 96:9: UnexposedExpr=c:2:14 Extent=[96:9 - 96:10]
 // CHECK: 96:9: DeclRefExpr=c:2:14 Extent=[96:9 - 96:10]
 // CHECK: 96:14: UnexposedExpr= Extent=[96:14 - 96:19]
 // CHECK: 96:14: IntegerLiteral= Extent=[96:14 - 96:19]
-// CHECK: 96:23: BinaryOperator= Extent=[96:23 - 96:33]
+// CHECK: 96:23: BinaryOperator=<= Extent=[96:23 - 96:33]
+// CHECK: 96:23: UnexposedExpr=c:2:14 Extent=[96:23 - 96:24]
 // CHECK: 96:23: DeclRefExpr=c:2:14 Extent=[96:23 - 96:24]
 // CHECK: 96:28: UnexposedExpr= Extent=[96:28 - 96:33]
 // CHECK: 96:28: IntegerLiteral= Extent=[96:28 - 96:33]
-// CHECK: 97:9: BinaryOperator= Extent=[97:9 - 97:33]
-// CHECK: 97:9: BinaryOperator= Extent=[97:9 - 97:19]
+// CHECK: 97:8: ParenExpr= Extent=[97:8 - 97:34]
+// CHECK: 97:9: BinaryOperator=&& Extent=[97:9 - 97:33]
+// CHECK: 97:9: BinaryOperator=>= Extent=[97:9 - 97:19]
+// CHECK: 97:9: UnexposedExpr=c:2:14 Extent=[97:9 - 97:10]
 // CHECK: 97:9: DeclRefExpr=c:2:14 Extent=[97:9 - 97:10]
 // CHECK: 97:14: UnexposedExpr= Extent=[97:14 - 97:19]
 // CHECK: 97:14: IntegerLiteral= Extent=[97:14 - 97:19]
-// CHECK: 97:23: BinaryOperator= Extent=[97:23 - 97:33]
+// CHECK: 97:23: BinaryOperator=<= Extent=[97:23 - 97:33]
+// CHECK: 97:23: UnexposedExpr=c:2:14 Extent=[97:23 - 97:24]
 // CHECK: 97:23: DeclRefExpr=c:2:14 Extent=[97:23 - 97:24]
 // CHECK: 97:28: UnexposedExpr= Extent=[97:28 - 97:33]
 // CHECK: 97:28: IntegerLiteral= Extent=[97:28 - 97:33]
-// CHECK: 98:8: BinaryOperator= Extent=[98:8 - 98:18]
+// CHECK: 98:8: BinaryOperator=== Extent=[98:8 - 98:18]
+// CHECK: 98:8: UnexposedExpr=c:2:14 Extent=[98:8 - 98:9]
 // CHECK: 98:8: DeclRefExpr=c:2:14 Extent=[98:8 - 98:9]
 // CHECK: 98:13: UnexposedExpr= Extent=[98:13 - 98:18]
 // CHECK: 98:13: IntegerLiteral= Extent=[98:13 - 98:18]
-// CHECK: 98:23: BinaryOperator= Extent=[98:23 - 98:47]
-// CHECK: 98:23: BinaryOperator= Extent=[98:23 - 98:33]
+// CHECK: 98:22: ParenExpr= Extent=[98:22 - 98:48]
+// CHECK: 98:23: BinaryOperator=&& Extent=[98:23 - 98:47]
+// CHECK: 98:23: BinaryOperator=>= Extent=[98:23 - 98:33]
+// CHECK: 98:23: UnexposedExpr=c:2:14 Extent=[98:23 - 98:24]
 // CHECK: 98:23: DeclRefExpr=c:2:14 Extent=[98:23 - 98:24]
 // CHECK: 98:28: UnexposedExpr= Extent=[98:28 - 98:33]
 // CHECK: 98:28: IntegerLiteral= Extent=[98:28 - 98:33]
-// CHECK: 98:37: BinaryOperator= Extent=[98:37 - 98:47]
+// CHECK: 98:37: BinaryOperator=<= Extent=[98:37 - 98:47]
+// CHECK: 98:37: UnexposedExpr=c:2:14 Extent=[98:37 - 98:38]
 // CHECK: 98:37: DeclRefExpr=c:2:14 Extent=[98:37 - 98:38]
 // CHECK: 98:42: UnexposedExpr= Extent=[98:42 - 98:47]
 // CHECK: 98:42: IntegerLiteral= Extent=[98:42 - 98:47]
-// CHECK: 99:9: BinaryOperator= Extent=[99:9 - 99:33]
-// CHECK: 99:9: BinaryOperator= Extent=[99:9 - 99:19]
+// CHECK: 99:8: ParenExpr= Extent=[99:8 - 99:34]
+// CHECK: 99:9: BinaryOperator=&& Extent=[99:9 - 99:33]
+// CHECK: 99:9: BinaryOperator=>= Extent=[99:9 - 99:19]
+// CHECK: 99:9: UnexposedExpr=c:2:14 Extent=[99:9 - 99:10]
 // CHECK: 99:9: DeclRefExpr=c:2:14 Extent=[99:9 - 99:10]
 // CHECK: 99:14: UnexposedExpr= Extent=[99:14 - 99:19]
 // CHECK: 99:14: IntegerLiteral= Extent=[99:14 - 99:19]
-// CHECK: 99:23: BinaryOperator= Extent=[99:23 - 99:33]
+// CHECK: 99:23: BinaryOperator=<= Extent=[99:23 - 99:33]
+// CHECK: 99:23: UnexposedExpr=c:2:14 Extent=[99:23 - 99:24]
 // CHECK: 99:23: DeclRefExpr=c:2:14 Extent=[99:23 - 99:24]
 // CHECK: 99:28: UnexposedExpr= Extent=[99:28 - 99:33]
 // CHECK: 99:28: IntegerLiteral= Extent=[99:28 - 99:33]
-// CHECK: 100:9: BinaryOperator= Extent=[100:9 - 100:33]
-// CHECK: 100:9: BinaryOperator= Extent=[100:9 - 100:19]
+// CHECK: 100:8: ParenExpr= Extent=[100:8 - 100:34]
+// CHECK: 100:9: BinaryOperator=&& Extent=[100:9 - 100:33]
+// CHECK: 100:9: BinaryOperator=>= Extent=[100:9 - 100:19]
+// CHECK: 100:9: UnexposedExpr=c:2:14 Extent=[100:9 - 100:10]
 // CHECK: 100:9: DeclRefExpr=c:2:14 Extent=[100:9 - 100:10]
 // CHECK: 100:14: UnexposedExpr= Extent=[100:14 - 100:19]
 // CHECK: 100:14: IntegerLiteral= Extent=[100:14 - 100:19]
-// CHECK: 100:23: BinaryOperator= Extent=[100:23 - 100:33]
+// CHECK: 100:23: BinaryOperator=<= Extent=[100:23 - 100:33]
+// CHECK: 100:23: UnexposedExpr=c:2:14 Extent=[100:23 - 100:24]
 // CHECK: 100:23: DeclRefExpr=c:2:14 Extent=[100:23 - 100:24]
 // CHECK: 100:28: UnexposedExpr= Extent=[100:28 - 100:33]
 // CHECK: 100:28: IntegerLiteral= Extent=[100:28 - 100:33]
-// CHECK: 101:9: BinaryOperator= Extent=[101:9 - 101:33]
-// CHECK: 101:9: BinaryOperator= Extent=[101:9 - 101:19]
+// CHECK: 101:8: ParenExpr= Extent=[101:8 - 101:34]
+// CHECK: 101:9: BinaryOperator=&& Extent=[101:9 - 101:33]
+// CHECK: 101:9: BinaryOperator=>= Extent=[101:9 - 101:19]
+// CHECK: 101:9: UnexposedExpr=c:2:14 Extent=[101:9 - 101:10]
 // CHECK: 101:9: DeclRefExpr=c:2:14 Extent=[101:9 - 101:10]
 // CHECK: 101:14: UnexposedExpr= Extent=[101:14 - 101:19]
 // CHECK: 101:14: IntegerLiteral= Extent=[101:14 - 101:19]
-// CHECK: 101:23: BinaryOperator= Extent=[101:23 - 101:33]
+// CHECK: 101:23: BinaryOperator=<= Extent=[101:23 - 101:33]
+// CHECK: 101:23: UnexposedExpr=c:2:14 Extent=[101:23 - 101:24]
 // CHECK: 101:23: DeclRefExpr=c:2:14 Extent=[101:23 - 101:24]
 // CHECK: 101:28: UnexposedExpr= Extent=[101:28 - 101:33]
 // CHECK: 101:28: IntegerLiteral= Extent=[101:28 - 101:33]
-// CHECK: 102:9: BinaryOperator= Extent=[102:9 - 102:33]
-// CHECK: 102:9: BinaryOperator= Extent=[102:9 - 102:19]
+// CHECK: 102:8: ParenExpr= Extent=[102:8 - 102:34]
+// CHECK: 102:9: BinaryOperator=&& Extent=[102:9 - 102:33]
+// CHECK: 102:9: BinaryOperator=>= Extent=[102:9 - 102:19]
+// CHECK: 102:9: UnexposedExpr=c:2:14 Extent=[102:9 - 102:10]
 // CHECK: 102:9: DeclRefExpr=c:2:14 Extent=[102:9 - 102:10]
 // CHECK: 102:14: UnexposedExpr= Extent=[102:14 - 102:19]
 // CHECK: 102:14: IntegerLiteral= Extent=[102:14 - 102:19]
-// CHECK: 102:23: BinaryOperator= Extent=[102:23 - 102:33]
+// CHECK: 102:23: BinaryOperator=<= Extent=[102:23 - 102:33]
+// CHECK: 102:23: UnexposedExpr=c:2:14 Extent=[102:23 - 102:24]
 // CHECK: 102:23: DeclRefExpr=c:2:14 Extent=[102:23 - 102:24]
 // CHECK: 102:28: UnexposedExpr= Extent=[102:28 - 102:33]
 // CHECK: 102:28: IntegerLiteral= Extent=[102:28 - 102:33]
-// CHECK: 103:9: BinaryOperator= Extent=[103:9 - 103:33]
-// CHECK: 103:9: BinaryOperator= Extent=[103:9 - 103:19]
+// CHECK: 103:8: ParenExpr= Extent=[103:8 - 103:34]
+// CHECK: 103:9: BinaryOperator=&& Extent=[103:9 - 103:33]
+// CHECK: 103:9: BinaryOperator=>= Extent=[103:9 - 103:19]
+// CHECK: 103:9: UnexposedExpr=c:2:14 Extent=[103:9 - 103:10]
 // CHECK: 103:9: DeclRefExpr=c:2:14 Extent=[103:9 - 103:10]
 // CHECK: 103:14: UnexposedExpr= Extent=[103:14 - 103:19]
 // CHECK: 103:14: IntegerLiteral= Extent=[103:14 - 103:19]
-// CHECK: 103:23: BinaryOperator= Extent=[103:23 - 103:33]
+// CHECK: 103:23: BinaryOperator=<= Extent=[103:23 - 103:33]
+// CHECK: 103:23: UnexposedExpr=c:2:14 Extent=[103:23 - 103:24]
 // CHECK: 103:23: DeclRefExpr=c:2:14 Extent=[103:23 - 103:24]
 // CHECK: 103:28: UnexposedExpr= Extent=[103:28 - 103:33]
 // CHECK: 103:28: IntegerLiteral= Extent=[103:28 - 103:33]
-// CHECK: 104:9: BinaryOperator= Extent=[104:9 - 104:33]
-// CHECK: 104:9: BinaryOperator= Extent=[104:9 - 104:19]
+// CHECK: 104:8: ParenExpr= Extent=[104:8 - 104:34]
+// CHECK: 104:9: BinaryOperator=&& Extent=[104:9 - 104:33]
+// CHECK: 104:9: BinaryOperator=>= Extent=[104:9 - 104:19]
+// CHECK: 104:9: UnexposedExpr=c:2:14 Extent=[104:9 - 104:10]
 // CHECK: 104:9: DeclRefExpr=c:2:14 Extent=[104:9 - 104:10]
 // CHECK: 104:14: UnexposedExpr= Extent=[104:14 - 104:19]
 // CHECK: 104:14: IntegerLiteral= Extent=[104:14 - 104:19]
-// CHECK: 104:23: BinaryOperator= Extent=[104:23 - 104:33]
+// CHECK: 104:23: BinaryOperator=<= Extent=[104:23 - 104:33]
+// CHECK: 104:23: UnexposedExpr=c:2:14 Extent=[104:23 - 104:24]
 // CHECK: 104:23: DeclRefExpr=c:2:14 Extent=[104:23 - 104:24]
 // CHECK: 104:28: UnexposedExpr= Extent=[104:28 - 104:33]
 // CHECK: 104:28: IntegerLiteral= Extent=[104:28 - 104:33]
-// CHECK: 105:8: BinaryOperator= Extent=[105:8 - 105:18]
+// CHECK: 105:8: BinaryOperator=== Extent=[105:8 - 105:18]
+// CHECK: 105:8: UnexposedExpr=c:2:14 Extent=[105:8 - 105:9]
 // CHECK: 105:8: DeclRefExpr=c:2:14 Extent=[105:8 - 105:9]
 // CHECK: 105:13: UnexposedExpr= Extent=[105:13 - 105:18]
 // CHECK: 105:13: IntegerLiteral= Extent=[105:13 - 105:18]
-// CHECK: 105:23: BinaryOperator= Extent=[105:23 - 105:47]
-// CHECK: 105:23: BinaryOperator= Extent=[105:23 - 105:33]
+// CHECK: 105:22: ParenExpr= Extent=[105:22 - 105:48]
+// CHECK: 105:23: BinaryOperator=&& Extent=[105:23 - 105:47]
+// CHECK: 105:23: BinaryOperator=>= Extent=[105:23 - 105:33]
+// CHECK: 105:23: UnexposedExpr=c:2:14 Extent=[105:23 - 105:24]
 // CHECK: 105:23: DeclRefExpr=c:2:14 Extent=[105:23 - 105:24]
 // CHECK: 105:28: UnexposedExpr= Extent=[105:28 - 105:33]
 // CHECK: 105:28: IntegerLiteral= Extent=[105:28 - 105:33]
-// CHECK: 105:37: BinaryOperator= Extent=[105:37 - 105:47]
+// CHECK: 105:37: BinaryOperator=<= Extent=[105:37 - 105:47]
+// CHECK: 105:37: UnexposedExpr=c:2:14 Extent=[105:37 - 105:38]
 // CHECK: 105:37: DeclRefExpr=c:2:14 Extent=[105:37 - 105:38]
 // CHECK: 105:42: UnexposedExpr= Extent=[105:42 - 105:47]
 // CHECK: 105:42: IntegerLiteral= Extent=[105:42 - 105:47]
-// CHECK: 106:9: BinaryOperator= Extent=[106:9 - 106:33]
-// CHECK: 106:9: BinaryOperator= Extent=[106:9 - 106:19]
+// CHECK: 106:8: ParenExpr= Extent=[106:8 - 106:34]
+// CHECK: 106:9: BinaryOperator=&& Extent=[106:9 - 106:33]
+// CHECK: 106:9: BinaryOperator=>= Extent=[106:9 - 106:19]
+// CHECK: 106:9: UnexposedExpr=c:2:14 Extent=[106:9 - 106:10]
 // CHECK: 106:9: DeclRefExpr=c:2:14 Extent=[106:9 - 106:10]
 // CHECK: 106:14: UnexposedExpr= Extent=[106:14 - 106:19]
 // CHECK: 106:14: IntegerLiteral= Extent=[106:14 - 106:19]
-// CHECK: 106:23: BinaryOperator= Extent=[106:23 - 106:33]
+// CHECK: 106:23: BinaryOperator=<= Extent=[106:23 - 106:33]
+// CHECK: 106:23: UnexposedExpr=c:2:14 Extent=[106:23 - 106:24]
 // CHECK: 106:23: DeclRefExpr=c:2:14 Extent=[106:23 - 106:24]
 // CHECK: 106:28: UnexposedExpr= Extent=[106:28 - 106:33]
 // CHECK: 106:28: IntegerLiteral= Extent=[106:28 - 106:33]
-// CHECK: 107:9: BinaryOperator= Extent=[107:9 - 107:33]
-// CHECK: 107:9: BinaryOperator= Extent=[107:9 - 107:19]
+// CHECK: 107:8: ParenExpr= Extent=[107:8 - 107:34]
+// CHECK: 107:9: BinaryOperator=&& Extent=[107:9 - 107:33]
+// CHECK: 107:9: BinaryOperator=>= Extent=[107:9 - 107:19]
+// CHECK: 107:9: UnexposedExpr=c:2:14 Extent=[107:9 - 107:10]
 // CHECK: 107:9: DeclRefExpr=c:2:14 Extent=[107:9 - 107:10]
 // CHECK: 107:14: UnexposedExpr= Extent=[107:14 - 107:19]
 // CHECK: 107:14: IntegerLiteral= Extent=[107:14 - 107:19]
-// CHECK: 107:23: BinaryOperator= Extent=[107:23 - 107:33]
+// CHECK: 107:23: BinaryOperator=<= Extent=[107:23 - 107:33]
+// CHECK: 107:23: UnexposedExpr=c:2:14 Extent=[107:23 - 107:24]
 // CHECK: 107:23: DeclRefExpr=c:2:14 Extent=[107:23 - 107:24]
 // CHECK: 107:28: UnexposedExpr= Extent=[107:28 - 107:33]
 // CHECK: 107:28: IntegerLiteral= Extent=[107:28 - 107:33]
-// CHECK: 108:8: BinaryOperator= Extent=[108:8 - 108:18]
+// CHECK: 108:8: BinaryOperator=== Extent=[108:8 - 108:18]
+// CHECK: 108:8: UnexposedExpr=c:2:14 Extent=[108:8 - 108:9]
 // CHECK: 108:8: DeclRefExpr=c:2:14 Extent=[108:8 - 108:9]
 // CHECK: 108:13: UnexposedExpr= Extent=[108:13 - 108:18]
 // CHECK: 108:13: IntegerLiteral= Extent=[108:13 - 108:18]
-// CHECK: 108:23: BinaryOperator= Extent=[108:23 - 108:47]
-// CHECK: 108:23: BinaryOperator= Extent=[108:23 - 108:33]
+// CHECK: 108:22: ParenExpr= Extent=[108:22 - 108:48]
+// CHECK: 108:23: BinaryOperator=&& Extent=[108:23 - 108:47]
+// CHECK: 108:23: BinaryOperator=>= Extent=[108:23 - 108:33]
+// CHECK: 108:23: UnexposedExpr=c:2:14 Extent=[108:23 - 108:24]
 // CHECK: 108:23: DeclRefExpr=c:2:14 Extent=[108:23 - 108:24]
 // CHECK: 108:28: UnexposedExpr= Extent=[108:28 - 108:33]
 // CHECK: 108:28: IntegerLiteral= Extent=[108:28 - 108:33]
-// CHECK: 108:37: BinaryOperator= Extent=[108:37 - 108:47]
+// CHECK: 108:37: BinaryOperator=<= Extent=[108:37 - 108:47]
+// CHECK: 108:37: UnexposedExpr=c:2:14 Extent=[108:37 - 108:38]
 // CHECK: 108:37: DeclRefExpr=c:2:14 Extent=[108:37 - 108:38]
 // CHECK: 108:42: UnexposedExpr= Extent=[108:42 - 108:47]
 // CHECK: 108:42: IntegerLiteral= Extent=[108:42 - 108:47]
-// CHECK: 109:8: BinaryOperator= Extent=[109:8 - 109:18]
+// CHECK: 109:8: BinaryOperator=== Extent=[109:8 - 109:18]
+// CHECK: 109:8: UnexposedExpr=c:2:14 Extent=[109:8 - 109:9]
 // CHECK: 109:8: DeclRefExpr=c:2:14 Extent=[109:8 - 109:9]
 // CHECK: 109:13: UnexposedExpr= Extent=[109:13 - 109:18]
 // CHECK: 109:13: IntegerLiteral= Extent=[109:13 - 109:18]
-// CHECK: 109:22: BinaryOperator= Extent=[109:22 - 109:32]
+// CHECK: 109:22: BinaryOperator=== Extent=[109:22 - 109:32]
+// CHECK: 109:22: UnexposedExpr=c:2:14 Extent=[109:22 - 109:23]
 // CHECK: 109:22: DeclRefExpr=c:2:14 Extent=[109:22 - 109:23]
 // CHECK: 109:27: UnexposedExpr= Extent=[109:27 - 109:32]
 // CHECK: 109:27: IntegerLiteral= Extent=[109:27 - 109:32]
-// CHECK: 109:37: BinaryOperator= Extent=[109:37 - 109:61]
-// CHECK: 109:37: BinaryOperator= Extent=[109:37 - 109:47]
+// CHECK: 109:36: ParenExpr= Extent=[109:36 - 109:62]
+// CHECK: 109:37: BinaryOperator=&& Extent=[109:37 - 109:61]
+// CHECK: 109:37: BinaryOperator=>= Extent=[109:37 - 109:47]
+// CHECK: 109:37: UnexposedExpr=c:2:14 Extent=[109:37 - 109:38]
 // CHECK: 109:37: DeclRefExpr=c:2:14 Extent=[109:37 - 109:38]
 // CHECK: 109:42: UnexposedExpr= Extent=[109:42 - 109:47]
 // CHECK: 109:42: IntegerLiteral= Extent=[109:42 - 109:47]
-// CHECK: 109:51: BinaryOperator= Extent=[109:51 - 109:61]
+// CHECK: 109:51: BinaryOperator=<= Extent=[109:51 - 109:61]
+// CHECK: 109:51: UnexposedExpr=c:2:14 Extent=[109:51 - 109:52]
 // CHECK: 109:51: DeclRefExpr=c:2:14 Extent=[109:51 - 109:52]
 // CHECK: 109:56: UnexposedExpr= Extent=[109:56 - 109:61]
 // CHECK: 109:56: IntegerLiteral= Extent=[109:56 - 109:61]
-// CHECK: 110:9: BinaryOperator= Extent=[110:9 - 110:33]
-// CHECK: 110:9: BinaryOperator= Extent=[110:9 - 110:19]
+// CHECK: 110:8: ParenExpr= Extent=[110:8 - 110:34]
+// CHECK: 110:9: BinaryOperator=&& Extent=[110:9 - 110:33]
+// CHECK: 110:9: BinaryOperator=>= Extent=[110:9 - 110:19]
+// CHECK: 110:9: UnexposedExpr=c:2:14 Extent=[110:9 - 110:10]
 // CHECK: 110:9: DeclRefExpr=c:2:14 Extent=[110:9 - 110:10]
 // CHECK: 110:14: UnexposedExpr= Extent=[110:14 - 110:19]
 // CHECK: 110:14: IntegerLiteral= Extent=[110:14 - 110:19]
-// CHECK: 110:23: BinaryOperator= Extent=[110:23 - 110:33]
+// CHECK: 110:23: BinaryOperator=<= Extent=[110:23 - 110:33]
+// CHECK: 110:23: UnexposedExpr=c:2:14 Extent=[110:23 - 110:24]
 // CHECK: 110:23: DeclRefExpr=c:2:14 Extent=[110:23 - 110:24]
 // CHECK: 110:28: UnexposedExpr= Extent=[110:28 - 110:33]
 // CHECK: 110:28: IntegerLiteral= Extent=[110:28 - 110:33]
-// CHECK: 111:9: BinaryOperator= Extent=[111:9 - 111:33]
-// CHECK: 111:9: BinaryOperator= Extent=[111:9 - 111:19]
+// CHECK: 111:8: ParenExpr= Extent=[111:8 - 111:34]
+// CHECK: 111:9: BinaryOperator=&& Extent=[111:9 - 111:33]
+// CHECK: 111:9: BinaryOperator=>= Extent=[111:9 - 111:19]
+// CHECK: 111:9: UnexposedExpr=c:2:14 Extent=[111:9 - 111:10]
 // CHECK: 111:9: DeclRefExpr=c:2:14 Extent=[111:9 - 111:10]
 // CHECK: 111:14: UnexposedExpr= Extent=[111:14 - 111:19]
 // CHECK: 111:14: IntegerLiteral= Extent=[111:14 - 111:19]
-// CHECK: 111:23: BinaryOperator= Extent=[111:23 - 111:33]
+// CHECK: 111:23: BinaryOperator=<= Extent=[111:23 - 111:33]
+// CHECK: 111:23: UnexposedExpr=c:2:14 Extent=[111:23 - 111:24]
 // CHECK: 111:23: DeclRefExpr=c:2:14 Extent=[111:23 - 111:24]
 // CHECK: 111:28: UnexposedExpr= Extent=[111:28 - 111:33]
 // CHECK: 111:28: IntegerLiteral= Extent=[111:28 - 111:33]
-// CHECK: 112:8: BinaryOperator= Extent=[112:8 - 112:18]
+// CHECK: 112:8: BinaryOperator=== Extent=[112:8 - 112:18]
+// CHECK: 112:8: UnexposedExpr=c:2:14 Extent=[112:8 - 112:9]
 // CHECK: 112:8: DeclRefExpr=c:2:14 Extent=[112:8 - 112:9]
 // CHECK: 112:13: UnexposedExpr= Extent=[112:13 - 112:18]
 // CHECK: 112:13: IntegerLiteral= Extent=[112:13 - 112:18]
-// CHECK: 112:22: BinaryOperator= Extent=[112:22 - 112:32]
+// CHECK: 112:22: BinaryOperator=== Extent=[112:22 - 112:32]
+// CHECK: 112:22: UnexposedExpr=c:2:14 Extent=[112:22 - 112:23]
 // CHECK: 112:22: DeclRefExpr=c:2:14 Extent=[112:22 - 112:23]
 // CHECK: 112:27: UnexposedExpr= Extent=[112:27 - 112:32]
 // CHECK: 112:27: IntegerLiteral= Extent=[112:27 - 112:32]
-// CHECK: 112:37: BinaryOperator= Extent=[112:37 - 112:61]
-// CHECK: 112:37: BinaryOperator= Extent=[112:37 - 112:47]
+// CHECK: 112:36: ParenExpr= Extent=[112:36 - 112:62]
+// CHECK: 112:37: BinaryOperator=&& Extent=[112:37 - 112:61]
+// CHECK: 112:37: BinaryOperator=>= Extent=[112:37 - 112:47]
+// CHECK: 112:37: UnexposedExpr=c:2:14 Extent=[112:37 - 112:38]
 // CHECK: 112:37: DeclRefExpr=c:2:14 Extent=[112:37 - 112:38]
 // CHECK: 112:42: UnexposedExpr= Extent=[112:42 - 112:47]
 // CHECK: 112:42: IntegerLiteral= Extent=[112:42 - 112:47]
-// CHECK: 112:51: BinaryOperator= Extent=[112:51 - 112:61]
+// CHECK: 112:51: BinaryOperator=<= Extent=[112:51 - 112:61]
+// CHECK: 112:51: UnexposedExpr=c:2:14 Extent=[112:51 - 112:52]
 // CHECK: 112:51: DeclRefExpr=c:2:14 Extent=[112:51 - 112:52]
 // CHECK: 112:56: UnexposedExpr= Extent=[112:56 - 112:61]
 // CHECK: 112:56: IntegerLiteral= Extent=[112:56 - 112:61]
-// CHECK: 113:9: BinaryOperator= Extent=[113:9 - 113:33]
-// CHECK: 113:9: BinaryOperator= Extent=[113:9 - 113:19]
+// CHECK: 113:8: ParenExpr= Extent=[113:8 - 113:34]
+// CHECK: 113:9: BinaryOperator=&& Extent=[113:9 - 113:33]
+// CHECK: 113:9: BinaryOperator=>= Extent=[113:9 - 113:19]
+// CHECK: 113:9: UnexposedExpr=c:2:14 Extent=[113:9 - 113:10]
 // CHECK: 113:9: DeclRefExpr=c:2:14 Extent=[113:9 - 113:10]
 // CHECK: 113:14: UnexposedExpr= Extent=[113:14 - 113:19]
 // CHECK: 113:14: IntegerLiteral= Extent=[113:14 - 113:19]
-// CHECK: 113:23: BinaryOperator= Extent=[113:23 - 113:33]
+// CHECK: 113:23: BinaryOperator=<= Extent=[113:23 - 113:33]
+// CHECK: 113:23: UnexposedExpr=c:2:14 Extent=[113:23 - 113:24]
 // CHECK: 113:23: DeclRefExpr=c:2:14 Extent=[113:23 - 113:24]
 // CHECK: 113:28: UnexposedExpr= Extent=[113:28 - 113:33]
 // CHECK: 113:28: IntegerLiteral= Extent=[113:28 - 113:33]
-// CHECK: 114:8: BinaryOperator= Extent=[114:8 - 114:18]
+// CHECK: 114:8: BinaryOperator=== Extent=[114:8 - 114:18]
+// CHECK: 114:8: UnexposedExpr=c:2:14 Extent=[114:8 - 114:9]
 // CHECK: 114:8: DeclRefExpr=c:2:14 Extent=[114:8 - 114:9]
 // CHECK: 114:13: UnexposedExpr= Extent=[114:13 - 114:18]
 // CHECK: 114:13: IntegerLiteral= Extent=[114:13 - 114:18]
-// CHECK: 114:23: BinaryOperator= Extent=[114:23 - 114:47]
-// CHECK: 114:23: BinaryOperator= Extent=[114:23 - 114:33]
+// CHECK: 114:22: ParenExpr= Extent=[114:22 - 114:48]
+// CHECK: 114:23: BinaryOperator=&& Extent=[114:23 - 114:47]
+// CHECK: 114:23: BinaryOperator=>= Extent=[114:23 - 114:33]
+// CHECK: 114:23: UnexposedExpr=c:2:14 Extent=[114:23 - 114:24]
 // CHECK: 114:23: DeclRefExpr=c:2:14 Extent=[114:23 - 114:24]
 // CHECK: 114:28: UnexposedExpr= Extent=[114:28 - 114:33]
 // CHECK: 114:28: IntegerLiteral= Extent=[114:28 - 114:33]
-// CHECK: 114:37: BinaryOperator= Extent=[114:37 - 114:47]
+// CHECK: 114:37: BinaryOperator=<= Extent=[114:37 - 114:47]
+// CHECK: 114:37: UnexposedExpr=c:2:14 Extent=[114:37 - 114:38]
 // CHECK: 114:37: DeclRefExpr=c:2:14 Extent=[114:37 - 114:38]
 // CHECK: 114:42: UnexposedExpr= Extent=[114:42 - 114:47]
 // CHECK: 114:42: IntegerLiteral= Extent=[114:42 - 114:47]
-// CHECK: 115:8: BinaryOperator= Extent=[115:8 - 115:18]
+// CHECK: 115:8: BinaryOperator=== Extent=[115:8 - 115:18]
+// CHECK: 115:8: UnexposedExpr=c:2:14 Extent=[115:8 - 115:9]
 // CHECK: 115:8: DeclRefExpr=c:2:14 Extent=[115:8 - 115:9]
 // CHECK: 115:13: UnexposedExpr= Extent=[115:13 - 115:18]
 // CHECK: 115:13: IntegerLiteral= Extent=[115:13 - 115:18]
-// CHECK: 115:23: BinaryOperator= Extent=[115:23 - 115:47]
-// CHECK: 115:23: BinaryOperator= Extent=[115:23 - 115:33]
+// CHECK: 115:22: ParenExpr= Extent=[115:22 - 115:48]
+// CHECK: 115:23: BinaryOperator=&& Extent=[115:23 - 115:47]
+// CHECK: 115:23: BinaryOperator=>= Extent=[115:23 - 115:33]
+// CHECK: 115:23: UnexposedExpr=c:2:14 Extent=[115:23 - 115:24]
 // CHECK: 115:23: DeclRefExpr=c:2:14 Extent=[115:23 - 115:24]
 // CHECK: 115:28: UnexposedExpr= Extent=[115:28 - 115:33]
 // CHECK: 115:28: IntegerLiteral= Extent=[115:28 - 115:33]
-// CHECK: 115:37: BinaryOperator= Extent=[115:37 - 115:47]
+// CHECK: 115:37: BinaryOperator=<= Extent=[115:37 - 115:47]
+// CHECK: 115:37: UnexposedExpr=c:2:14 Extent=[115:37 - 115:38]
 // CHECK: 115:37: DeclRefExpr=c:2:14 Extent=[115:37 - 115:38]
 // CHECK: 115:42: UnexposedExpr= Extent=[115:42 - 115:47]
 // CHECK: 115:42: IntegerLiteral= Extent=[115:42 - 115:47]
-// CHECK: 116:9: BinaryOperator= Extent=[116:9 - 116:33]
-// CHECK: 116:9: BinaryOperator= Extent=[116:9 - 116:19]
+// CHECK: 116:8: ParenExpr= Extent=[116:8 - 116:34]
+// CHECK: 116:9: BinaryOperator=&& Extent=[116:9 - 116:33]
+// CHECK: 116:9: BinaryOperator=>= Extent=[116:9 - 116:19]
+// CHECK: 116:9: UnexposedExpr=c:2:14 Extent=[116:9 - 116:10]
 // CHECK: 116:9: DeclRefExpr=c:2:14 Extent=[116:9 - 116:10]
 // CHECK: 116:14: UnexposedExpr= Extent=[116:14 - 116:19]
 // CHECK: 116:14: IntegerLiteral= Extent=[116:14 - 116:19]
-// CHECK: 116:23: BinaryOperator= Extent=[116:23 - 116:33]
+// CHECK: 116:23: BinaryOperator=<= Extent=[116:23 - 116:33]
+// CHECK: 116:23: UnexposedExpr=c:2:14 Extent=[116:23 - 116:24]
 // CHECK: 116:23: DeclRefExpr=c:2:14 Extent=[116:23 - 116:24]
 // CHECK: 116:28: UnexposedExpr= Extent=[116:28 - 116:33]
 // CHECK: 116:28: IntegerLiteral= Extent=[116:28 - 116:33]
-// CHECK: 117:9: BinaryOperator= Extent=[117:9 - 117:33]
-// CHECK: 117:9: BinaryOperator= Extent=[117:9 - 117:19]
+// CHECK: 117:8: ParenExpr= Extent=[117:8 - 117:34]
+// CHECK: 117:9: BinaryOperator=&& Extent=[117:9 - 117:33]
+// CHECK: 117:9: BinaryOperator=>= Extent=[117:9 - 117:19]
+// CHECK: 117:9: UnexposedExpr=c:2:14 Extent=[117:9 - 117:10]
 // CHECK: 117:9: DeclRefExpr=c:2:14 Extent=[117:9 - 117:10]
 // CHECK: 117:14: UnexposedExpr= Extent=[117:14 - 117:19]
 // CHECK: 117:14: IntegerLiteral= Extent=[117:14 - 117:19]
-// CHECK: 117:23: BinaryOperator= Extent=[117:23 - 117:33]
+// CHECK: 117:23: BinaryOperator=<= Extent=[117:23 - 117:33]
+// CHECK: 117:23: UnexposedExpr=c:2:14 Extent=[117:23 - 117:24]
 // CHECK: 117:23: DeclRefExpr=c:2:14 Extent=[117:23 - 117:24]
 // CHECK: 117:28: UnexposedExpr= Extent=[117:28 - 117:33]
 // CHECK: 117:28: IntegerLiteral= Extent=[117:28 - 117:33]
-// CHECK: 118:9: BinaryOperator= Extent=[118:9 - 118:35]
-// CHECK: 118:9: BinaryOperator= Extent=[118:9 - 118:20]
+// CHECK: 118:8: ParenExpr= Extent=[118:8 - 118:36]
+// CHECK: 118:9: BinaryOperator=&& Extent=[118:9 - 118:35]
+// CHECK: 118:9: BinaryOperator=>= Extent=[118:9 - 118:20]
+// CHECK: 118:9: UnexposedExpr=c:2:14 Extent=[118:9 - 118:10]
 // CHECK: 118:9: DeclRefExpr=c:2:14 Extent=[118:9 - 118:10]
 // CHECK: 118:14: UnexposedExpr= Extent=[118:14 - 118:20]
 // CHECK: 118:14: IntegerLiteral= Extent=[118:14 - 118:20]
-// CHECK: 118:24: BinaryOperator= Extent=[118:24 - 118:35]
+// CHECK: 118:24: BinaryOperator=<= Extent=[118:24 - 118:35]
+// CHECK: 118:24: UnexposedExpr=c:2:14 Extent=[118:24 - 118:25]
 // CHECK: 118:24: DeclRefExpr=c:2:14 Extent=[118:24 - 118:25]
 // CHECK: 118:29: UnexposedExpr= Extent=[118:29 - 118:35]
 // CHECK: 118:29: IntegerLiteral= Extent=[118:29 - 118:35]
-// CHECK: 119:9: BinaryOperator= Extent=[119:9 - 119:35]
-// CHECK: 119:9: BinaryOperator= Extent=[119:9 - 119:20]
+// CHECK: 119:8: ParenExpr= Extent=[119:8 - 119:36]
+// CHECK: 119:9: BinaryOperator=&& Extent=[119:9 - 119:35]
+// CHECK: 119:9: BinaryOperator=>= Extent=[119:9 - 119:20]
+// CHECK: 119:9: UnexposedExpr=c:2:14 Extent=[119:9 - 119:10]
 // CHECK: 119:9: DeclRefExpr=c:2:14 Extent=[119:9 - 119:10]
 // CHECK: 119:14: UnexposedExpr= Extent=[119:14 - 119:20]
 // CHECK: 119:14: IntegerLiteral= Extent=[119:14 - 119:20]
-// CHECK: 119:24: BinaryOperator= Extent=[119:24 - 119:35]
+// CHECK: 119:24: BinaryOperator=<= Extent=[119:24 - 119:35]
+// CHECK: 119:24: UnexposedExpr=c:2:14 Extent=[119:24 - 119:25]
 // CHECK: 119:24: DeclRefExpr=c:2:14 Extent=[119:24 - 119:25]
 // CHECK: 119:29: UnexposedExpr= Extent=[119:29 - 119:35]
 // CHECK: 119:29: IntegerLiteral= Extent=[119:29 - 119:35]
-// CHECK: 120:8: BinaryOperator= Extent=[120:8 - 120:19]
+// CHECK: 120:8: BinaryOperator=== Extent=[120:8 - 120:19]
+// CHECK: 120:8: UnexposedExpr=c:2:14 Extent=[120:8 - 120:9]
 // CHECK: 120:8: DeclRefExpr=c:2:14 Extent=[120:8 - 120:9]
 // CHECK: 120:13: UnexposedExpr= Extent=[120:13 - 120:19]
 // CHECK: 120:13: IntegerLiteral= Extent=[120:13 - 120:19]
-// CHECK: 120:24: BinaryOperator= Extent=[120:24 - 120:50]
-// CHECK: 120:24: BinaryOperator= Extent=[120:24 - 120:35]
+// CHECK: 120:23: ParenExpr= Extent=[120:23 - 120:51]
+// CHECK: 120:24: BinaryOperator=&& Extent=[120:24 - 120:50]
+// CHECK: 120:24: BinaryOperator=>= Extent=[120:24 - 120:35]
+// CHECK: 120:24: UnexposedExpr=c:2:14 Extent=[120:24 - 120:25]
 // CHECK: 120:24: DeclRefExpr=c:2:14 Extent=[120:24 - 120:25]
 // CHECK: 120:29: UnexposedExpr= Extent=[120:29 - 120:35]
 // CHECK: 120:29: IntegerLiteral= Extent=[120:29 - 120:35]
-// CHECK: 120:39: BinaryOperator= Extent=[120:39 - 120:50]
+// CHECK: 120:39: BinaryOperator=<= Extent=[120:39 - 120:50]
+// CHECK: 120:39: UnexposedExpr=c:2:14 Extent=[120:39 - 120:40]
 // CHECK: 120:39: DeclRefExpr=c:2:14 Extent=[120:39 - 120:40]
 // CHECK: 120:44: UnexposedExpr= Extent=[120:44 - 120:50]
 // CHECK: 120:44: IntegerLiteral= Extent=[120:44 - 120:50]
-// CHECK: 121:9: BinaryOperator= Extent=[121:9 - 121:35]
-// CHECK: 121:9: BinaryOperator= Extent=[121:9 - 121:20]
+// CHECK: 121:8: ParenExpr= Extent=[121:8 - 121:36]
+// CHECK: 121:9: BinaryOperator=&& Extent=[121:9 - 121:35]
+// CHECK: 121:9: BinaryOperator=>= Extent=[121:9 - 121:20]
+// CHECK: 121:9: UnexposedExpr=c:2:14 Extent=[121:9 - 121:10]
 // CHECK: 121:9: DeclRefExpr=c:2:14 Extent=[121:9 - 121:10]
 // CHECK: 121:14: UnexposedExpr= Extent=[121:14 - 121:20]
 // CHECK: 121:14: IntegerLiteral= Extent=[121:14 - 121:20]
-// CHECK: 121:24: BinaryOperator= Extent=[121:24 - 121:35]
+// CHECK: 121:24: BinaryOperator=<= Extent=[121:24 - 121:35]
+// CHECK: 121:24: UnexposedExpr=c:2:14 Extent=[121:24 - 121:25]
 // CHECK: 121:24: DeclRefExpr=c:2:14 Extent=[121:24 - 121:25]
 // CHECK: 121:29: UnexposedExpr= Extent=[121:29 - 121:35]
 // CHECK: 121:29: IntegerLiteral= Extent=[121:29 - 121:35]
-// CHECK: 122:8: BinaryOperator= Extent=[122:8 - 122:19]
+// CHECK: 122:8: BinaryOperator=== Extent=[122:8 - 122:19]
+// CHECK: 122:8: UnexposedExpr=c:2:14 Extent=[122:8 - 122:9]
 // CHECK: 122:8: DeclRefExpr=c:2:14 Extent=[122:8 - 122:9]
 // CHECK: 122:13: UnexposedExpr= Extent=[122:13 - 122:19]
 // CHECK: 122:13: IntegerLiteral= Extent=[122:13 - 122:19]
-// CHECK: 122:24: BinaryOperator= Extent=[122:24 - 122:50]
-// CHECK: 122:24: BinaryOperator= Extent=[122:24 - 122:35]
+// CHECK: 122:23: ParenExpr= Extent=[122:23 - 122:51]
+// CHECK: 122:24: BinaryOperator=&& Extent=[122:24 - 122:50]
+// CHECK: 122:24: BinaryOperator=>= Extent=[122:24 - 122:35]
+// CHECK: 122:24: UnexposedExpr=c:2:14 Extent=[122:24 - 122:25]
 // CHECK: 122:24: DeclRefExpr=c:2:14 Extent=[122:24 - 122:25]
 // CHECK: 122:29: UnexposedExpr= Extent=[122:29 - 122:35]
 // CHECK: 122:29: IntegerLiteral= Extent=[122:29 - 122:35]
-// CHECK: 122:39: BinaryOperator= Extent=[122:39 - 122:50]
+// CHECK: 122:39: BinaryOperator=<= Extent=[122:39 - 122:50]
+// CHECK: 122:39: UnexposedExpr=c:2:14 Extent=[122:39 - 122:40]
 // CHECK: 122:39: DeclRefExpr=c:2:14 Extent=[122:39 - 122:40]
 // CHECK: 122:44: UnexposedExpr= Extent=[122:44 - 122:50]
 // CHECK: 122:44: IntegerLiteral= Extent=[122:44 - 122:50]
-// CHECK: 123:9: BinaryOperator= Extent=[123:9 - 123:35]
-// CHECK: 123:9: BinaryOperator= Extent=[123:9 - 123:20]
+// CHECK: 123:8: ParenExpr= Extent=[123:8 - 123:36]
+// CHECK: 123:9: BinaryOperator=&& Extent=[123:9 - 123:35]
+// CHECK: 123:9: BinaryOperator=>= Extent=[123:9 - 123:20]
+// CHECK: 123:9: UnexposedExpr=c:2:14 Extent=[123:9 - 123:10]
 // CHECK: 123:9: DeclRefExpr=c:2:14 Extent=[123:9 - 123:10]
 // CHECK: 123:14: UnexposedExpr= Extent=[123:14 - 123:20]
 // CHECK: 123:14: IntegerLiteral= Extent=[123:14 - 123:20]
-// CHECK: 123:24: BinaryOperator= Extent=[123:24 - 123:35]
+// CHECK: 123:24: BinaryOperator=<= Extent=[123:24 - 123:35]
+// CHECK: 123:24: UnexposedExpr=c:2:14 Extent=[123:24 - 123:25]
 // CHECK: 123:24: DeclRefExpr=c:2:14 Extent=[123:24 - 123:25]
 // CHECK: 123:29: UnexposedExpr= Extent=[123:29 - 123:35]
 // CHECK: 123:29: IntegerLiteral= Extent=[123:29 - 123:35]
-// CHECK: 124:8: BinaryOperator= Extent=[124:8 - 124:19]
+// CHECK: 124:8: BinaryOperator=== Extent=[124:8 - 124:19]
+// CHECK: 124:8: UnexposedExpr=c:2:14 Extent=[124:8 - 124:9]
 // CHECK: 124:8: DeclRefExpr=c:2:14 Extent=[124:8 - 124:9]
 // CHECK: 124:13: UnexposedExpr= Extent=[124:13 - 124:19]
 // CHECK: 124:13: IntegerLiteral= Extent=[124:13 - 124:19]
-// CHECK: 124:23: BinaryOperator= Extent=[124:23 - 124:34]
+// CHECK: 124:23: BinaryOperator=== Extent=[124:23 - 124:34]
+// CHECK: 124:23: UnexposedExpr=c:2:14 Extent=[124:23 - 124:24]
 // CHECK: 124:23: DeclRefExpr=c:2:14 Extent=[124:23 - 124:24]
 // CHECK: 124:28: UnexposedExpr= Extent=[124:28 - 124:34]
 // CHECK: 124:28: IntegerLiteral= Extent=[124:28 - 124:34]
-// CHECK: 124:38: BinaryOperator= Extent=[124:38 - 124:49]
+// CHECK: 124:38: BinaryOperator=== Extent=[124:38 - 124:49]
+// CHECK: 124:38: UnexposedExpr=c:2:14 Extent=[124:38 - 124:39]
 // CHECK: 124:38: DeclRefExpr=c:2:14 Extent=[124:38 - 124:39]
 // CHECK: 124:43: UnexposedExpr= Extent=[124:43 - 124:49]
 // CHECK: 124:43: IntegerLiteral= Extent=[124:43 - 124:49]
-// CHECK: 124:53: BinaryOperator= Extent=[124:53 - 124:64]
+// CHECK: 124:53: BinaryOperator=== Extent=[124:53 - 124:64]
+// CHECK: 124:53: UnexposedExpr=c:2:14 Extent=[124:53 - 124:54]
 // CHECK: 124:53: DeclRefExpr=c:2:14 Extent=[124:53 - 124:54]
 // CHECK: 124:58: UnexposedExpr= Extent=[124:58 - 124:64]
 // CHECK: 124:58: IntegerLiteral= Extent=[124:58 - 124:64]
-// CHECK: 125:5: BinaryOperator= Extent=[125:5 - 125:16]
+// CHECK: 125:5: BinaryOperator=== Extent=[125:5 - 125:16]
+// CHECK: 125:5: UnexposedExpr=c:2:14 Extent=[125:5 - 125:6]
 // CHECK: 125:5: DeclRefExpr=c:2:14 Extent=[125:5 - 125:6]
 // CHECK: 125:10: UnexposedExpr= Extent=[125:10 - 125:16]
 // CHECK: 125:10: IntegerLiteral= Extent=[125:10 - 125:16]
-// CHECK: 125:20: BinaryOperator= Extent=[125:20 - 125:31]
+// CHECK: 125:20: BinaryOperator=== Extent=[125:20 - 125:31]
+// CHECK: 125:20: UnexposedExpr=c:2:14 Extent=[125:20 - 125:21]
 // CHECK: 125:20: DeclRefExpr=c:2:14 Extent=[125:20 - 125:21]
 // CHECK: 125:25: UnexposedExpr= Extent=[125:25 - 125:31]
 // CHECK: 125:25: IntegerLiteral= Extent=[125:25 - 125:31]
-// CHECK: 125:36: BinaryOperator= Extent=[125:36 - 125:62]
-// CHECK: 125:36: BinaryOperator= Extent=[125:36 - 125:47]
+// CHECK: 125:35: ParenExpr= Extent=[125:35 - 125:63]
+// CHECK: 125:36: BinaryOperator=&& Extent=[125:36 - 125:62]
+// CHECK: 125:36: BinaryOperator=>= Extent=[125:36 - 125:47]
+// CHECK: 125:36: UnexposedExpr=c:2:14 Extent=[125:36 - 125:37]
 // CHECK: 125:36: DeclRefExpr=c:2:14 Extent=[125:36 - 125:37]
 // CHECK: 125:41: UnexposedExpr= Extent=[125:41 - 125:47]
 // CHECK: 125:41: IntegerLiteral= Extent=[125:41 - 125:47]
-// CHECK: 125:51: BinaryOperator= Extent=[125:51 - 125:62]
+// CHECK: 125:51: BinaryOperator=<= Extent=[125:51 - 125:62]
+// CHECK: 125:51: UnexposedExpr=c:2:14 Extent=[125:51 - 125:52]
 // CHECK: 125:51: DeclRefExpr=c:2:14 Extent=[125:51 - 125:52]
 // CHECK: 125:56: UnexposedExpr= Extent=[125:56 - 125:62]
 // CHECK: 125:56: IntegerLiteral= Extent=[125:56 - 125:62]
-// CHECK: 126:8: BinaryOperator= Extent=[126:8 - 126:19]
+// CHECK: 126:8: BinaryOperator=== Extent=[126:8 - 126:19]
+// CHECK: 126:8: UnexposedExpr=c:2:14 Extent=[126:8 - 126:9]
 // CHECK: 126:8: DeclRefExpr=c:2:14 Extent=[126:8 - 126:9]
 // CHECK: 126:13: UnexposedExpr= Extent=[126:13 - 126:19]
 // CHECK: 126:13: IntegerLiteral= Extent=[126:13 - 126:19]
-// CHECK: 126:24: BinaryOperator= Extent=[126:24 - 126:50]
-// CHECK: 126:24: BinaryOperator= Extent=[126:24 - 126:35]
+// CHECK: 126:23: ParenExpr= Extent=[126:23 - 126:51]
+// CHECK: 126:24: BinaryOperator=&& Extent=[126:24 - 126:50]
+// CHECK: 126:24: BinaryOperator=>= Extent=[126:24 - 126:35]
+// CHECK: 126:24: UnexposedExpr=c:2:14 Extent=[126:24 - 126:25]
 // CHECK: 126:24: DeclRefExpr=c:2:14 Extent=[126:24 - 126:25]
 // CHECK: 126:29: UnexposedExpr= Extent=[126:29 - 126:35]
 // CHECK: 126:29: IntegerLiteral= Extent=[126:29 - 126:35]
-// CHECK: 126:39: BinaryOperator= Extent=[126:39 - 126:50]
+// CHECK: 126:39: BinaryOperator=<= Extent=[126:39 - 126:50]
+// CHECK: 126:39: UnexposedExpr=c:2:14 Extent=[126:39 - 126:40]
 // CHECK: 126:39: DeclRefExpr=c:2:14 Extent=[126:39 - 126:40]
 // CHECK: 126:44: UnexposedExpr= Extent=[126:44 - 126:50]
 // CHECK: 126:44: IntegerLiteral= Extent=[126:44 - 126:50]
-// CHECK: 127:8: BinaryOperator= Extent=[127:8 - 127:19]
+// CHECK: 127:8: BinaryOperator=== Extent=[127:8 - 127:19]
+// CHECK: 127:8: UnexposedExpr=c:2:14 Extent=[127:8 - 127:9]
 // CHECK: 127:8: DeclRefExpr=c:2:14 Extent=[127:8 - 127:9]
 // CHECK: 127:13: UnexposedExpr= Extent=[127:13 - 127:19]
 // CHECK: 127:13: IntegerLiteral= Extent=[127:13 - 127:19]
-// CHECK: 127:23: BinaryOperator= Extent=[127:23 - 127:34]
+// CHECK: 127:23: BinaryOperator=== Extent=[127:23 - 127:34]
+// CHECK: 127:23: UnexposedExpr=c:2:14 Extent=[127:23 - 127:24]
 // CHECK: 127:23: DeclRefExpr=c:2:14 Extent=[127:23 - 127:24]
 // CHECK: 127:28: UnexposedExpr= Extent=[127:28 - 127:34]
 // CHECK: 127:28: IntegerLiteral= Extent=[127:28 - 127:34]
-// CHECK: 127:38: BinaryOperator= Extent=[127:38 - 127:49]
+// CHECK: 127:38: BinaryOperator=== Extent=[127:38 - 127:49]
+// CHECK: 127:38: UnexposedExpr=c:2:14 Extent=[127:38 - 127:39]
 // CHECK: 127:38: DeclRefExpr=c:2:14 Extent=[127:38 - 127:39]
 // CHECK: 127:43: UnexposedExpr= Extent=[127:43 - 127:49]
 // CHECK: 127:43: IntegerLiteral= Extent=[127:43 - 127:49]
-// CHECK: 127:53: BinaryOperator= Extent=[127:53 - 127:64]
+// CHECK: 127:53: BinaryOperator=== Extent=[127:53 - 127:64]
+// CHECK: 127:53: UnexposedExpr=c:2:14 Extent=[127:53 - 127:54]
 // CHECK: 127:53: DeclRefExpr=c:2:14 Extent=[127:53 - 127:54]
 // CHECK: 127:58: UnexposedExpr= Extent=[127:58 - 127:64]
 // CHECK: 127:58: IntegerLiteral= Extent=[127:58 - 127:64]
-// CHECK: 128:6: BinaryOperator= Extent=[128:6 - 128:32]
-// CHECK: 128:6: BinaryOperator= Extent=[128:6 - 128:17]
+// CHECK: 128:5: ParenExpr= Extent=[128:5 - 128:33]
+// CHECK: 128:6: BinaryOperator=&& Extent=[128:6 - 128:32]
+// CHECK: 128:6: BinaryOperator=>= Extent=[128:6 - 128:17]
+// CHECK: 128:6: UnexposedExpr=c:2:14 Extent=[128:6 - 128:7]
 // CHECK: 128:6: DeclRefExpr=c:2:14 Extent=[128:6 - 128:7]
 // CHECK: 128:11: UnexposedExpr= Extent=[128:11 - 128:17]
 // CHECK: 128:11: IntegerLiteral= Extent=[128:11 - 128:17]
-// CHECK: 128:21: BinaryOperator= Extent=[128:21 - 128:32]
+// CHECK: 128:21: BinaryOperator=<= Extent=[128:21 - 128:32]
+// CHECK: 128:21: UnexposedExpr=c:2:14 Extent=[128:21 - 128:22]
 // CHECK: 128:21: DeclRefExpr=c:2:14 Extent=[128:21 - 128:22]
 // CHECK: 128:26: UnexposedExpr= Extent=[128:26 - 128:32]
 // CHECK: 128:26: IntegerLiteral= Extent=[128:26 - 128:32]
-// CHECK: 129:9: BinaryOperator= Extent=[129:9 - 129:35]
-// CHECK: 129:9: BinaryOperator= Extent=[129:9 - 129:20]
+// CHECK: 129:8: ParenExpr= Extent=[129:8 - 129:36]
+// CHECK: 129:9: BinaryOperator=&& Extent=[129:9 - 129:35]
+// CHECK: 129:9: BinaryOperator=>= Extent=[129:9 - 129:20]
+// CHECK: 129:9: UnexposedExpr=c:2:14 Extent=[129:9 - 129:10]
 // CHECK: 129:9: DeclRefExpr=c:2:14 Extent=[129:9 - 129:10]
 // CHECK: 129:14: UnexposedExpr= Extent=[129:14 - 129:20]
 // CHECK: 129:14: IntegerLiteral= Extent=[129:14 - 129:20]
-// CHECK: 129:24: BinaryOperator= Extent=[129:24 - 129:35]
+// CHECK: 129:24: BinaryOperator=<= Extent=[129:24 - 129:35]
+// CHECK: 129:24: UnexposedExpr=c:2:14 Extent=[129:24 - 129:25]
 // CHECK: 129:24: DeclRefExpr=c:2:14 Extent=[129:24 - 129:25]
 // CHECK: 129:29: UnexposedExpr= Extent=[129:29 - 129:35]
 // CHECK: 129:29: IntegerLiteral= Extent=[129:29 - 129:35]
-// CHECK: 130:8: BinaryOperator= Extent=[130:8 - 130:19]
+// CHECK: 130:8: BinaryOperator=== Extent=[130:8 - 130:19]
+// CHECK: 130:8: UnexposedExpr=c:2:14 Extent=[130:8 - 130:9]
 // CHECK: 130:8: DeclRefExpr=c:2:14 Extent=[130:8 - 130:9]
 // CHECK: 130:13: UnexposedExpr= Extent=[130:13 - 130:19]
 // CHECK: 130:13: IntegerLiteral= Extent=[130:13 - 130:19]
-// CHECK: 130:23: BinaryOperator= Extent=[130:23 - 130:34]
+// CHECK: 130:23: BinaryOperator=== Extent=[130:23 - 130:34]
+// CHECK: 130:23: UnexposedExpr=c:2:14 Extent=[130:23 - 130:24]
 // CHECK: 130:23: DeclRefExpr=c:2:14 Extent=[130:23 - 130:24]
 // CHECK: 130:28: UnexposedExpr= Extent=[130:28 - 130:34]
 // CHECK: 130:28: IntegerLiteral= Extent=[130:28 - 130:34]
-// CHECK: 130:38: BinaryOperator= Extent=[130:38 - 130:49]
+// CHECK: 130:38: BinaryOperator=== Extent=[130:38 - 130:49]
+// CHECK: 130:38: UnexposedExpr=c:2:14 Extent=[130:38 - 130:39]
 // CHECK: 130:38: DeclRefExpr=c:2:14 Extent=[130:38 - 130:39]
 // CHECK: 130:43: UnexposedExpr= Extent=[130:43 - 130:49]
 // CHECK: 130:43: IntegerLiteral= Extent=[130:43 - 130:49]
-// CHECK: 130:53: BinaryOperator= Extent=[130:53 - 130:64]
+// CHECK: 130:53: BinaryOperator=== Extent=[130:53 - 130:64]
+// CHECK: 130:53: UnexposedExpr=c:2:14 Extent=[130:53 - 130:54]
 // CHECK: 130:53: DeclRefExpr=c:2:14 Extent=[130:53 - 130:54]
 // CHECK: 130:58: UnexposedExpr= Extent=[130:58 - 130:64]
 // CHECK: 130:58: IntegerLiteral= Extent=[130:58 - 130:64]
-// CHECK: 131:6: BinaryOperator= Extent=[131:6 - 131:32]
-// CHECK: 131:6: BinaryOperator= Extent=[131:6 - 131:17]
+// CHECK: 131:5: ParenExpr= Extent=[131:5 - 131:33]
+// CHECK: 131:6: BinaryOperator=&& Extent=[131:6 - 131:32]
+// CHECK: 131:6: BinaryOperator=>= Extent=[131:6 - 131:17]
+// CHECK: 131:6: UnexposedExpr=c:2:14 Extent=[131:6 - 131:7]
 // CHECK: 131:6: DeclRefExpr=c:2:14 Extent=[131:6 - 131:7]
 // CHECK: 131:11: UnexposedExpr= Extent=[131:11 - 131:17]
 // CHECK: 131:11: IntegerLiteral= Extent=[131:11 - 131:17]
-// CHECK: 131:21: BinaryOperator= Extent=[131:21 - 131:32]
+// CHECK: 131:21: BinaryOperator=<= Extent=[131:21 - 131:32]
+// CHECK: 131:21: UnexposedExpr=c:2:14 Extent=[131:21 - 131:22]
 // CHECK: 131:21: DeclRefExpr=c:2:14 Extent=[131:21 - 131:22]
 // CHECK: 131:26: UnexposedExpr= Extent=[131:26 - 131:32]
 // CHECK: 131:26: IntegerLiteral= Extent=[131:26 - 131:32]
-// CHECK: 132:9: BinaryOperator= Extent=[132:9 - 132:35]
-// CHECK: 132:9: BinaryOperator= Extent=[132:9 - 132:20]
+// CHECK: 132:8: ParenExpr= Extent=[132:8 - 132:36]
+// CHECK: 132:9: BinaryOperator=&& Extent=[132:9 - 132:35]
+// CHECK: 132:9: BinaryOperator=>= Extent=[132:9 - 132:20]
+// CHECK: 132:9: UnexposedExpr=c:2:14 Extent=[132:9 - 132:10]
 // CHECK: 132:9: DeclRefExpr=c:2:14 Extent=[132:9 - 132:10]
 // CHECK: 132:14: UnexposedExpr= Extent=[132:14 - 132:20]
 // CHECK: 132:14: IntegerLiteral= Extent=[132:14 - 132:20]
-// CHECK: 132:24: BinaryOperator= Extent=[132:24 - 132:35]
+// CHECK: 132:24: BinaryOperator=<= Extent=[132:24 - 132:35]
+// CHECK: 132:24: UnexposedExpr=c:2:14 Extent=[132:24 - 132:25]
 // CHECK: 132:24: DeclRefExpr=c:2:14 Extent=[132:24 - 132:25]
 // CHECK: 132:29: UnexposedExpr= Extent=[132:29 - 132:35]
 // CHECK: 132:29: IntegerLiteral= Extent=[132:29 - 132:35]
-// CHECK: 133:8: BinaryOperator= Extent=[133:8 - 133:19]
+// CHECK: 133:8: BinaryOperator=== Extent=[133:8 - 133:19]
+// CHECK: 133:8: UnexposedExpr=c:2:14 Extent=[133:8 - 133:9]
 // CHECK: 133:8: DeclRefExpr=c:2:14 Extent=[133:8 - 133:9]
 // CHECK: 133:13: UnexposedExpr= Extent=[133:13 - 133:19]
 // CHECK: 133:13: IntegerLiteral= Extent=[133:13 - 133:19]
-// CHECK: 133:24: BinaryOperator= Extent=[133:24 - 133:50]
-// CHECK: 133:24: BinaryOperator= Extent=[133:24 - 133:35]
+// CHECK: 133:23: ParenExpr= Extent=[133:23 - 133:51]
+// CHECK: 133:24: BinaryOperator=&& Extent=[133:24 - 133:50]
+// CHECK: 133:24: BinaryOperator=>= Extent=[133:24 - 133:35]
+// CHECK: 133:24: UnexposedExpr=c:2:14 Extent=[133:24 - 133:25]
 // CHECK: 133:24: DeclRefExpr=c:2:14 Extent=[133:24 - 133:25]
 // CHECK: 133:29: UnexposedExpr= Extent=[133:29 - 133:35]
 // CHECK: 133:29: IntegerLiteral= Extent=[133:29 - 133:35]
-// CHECK: 133:39: BinaryOperator= Extent=[133:39 - 133:50]
+// CHECK: 133:39: BinaryOperator=<= Extent=[133:39 - 133:50]
+// CHECK: 133:39: UnexposedExpr=c:2:14 Extent=[133:39 - 133:40]
 // CHECK: 133:39: DeclRefExpr=c:2:14 Extent=[133:39 - 133:40]
 // CHECK: 133:44: UnexposedExpr= Extent=[133:44 - 133:50]
 // CHECK: 133:44: IntegerLiteral= Extent=[133:44 - 133:50]
-// CHECK: 134:8: BinaryOperator= Extent=[134:8 - 134:19]
+// CHECK: 134:8: BinaryOperator=== Extent=[134:8 - 134:19]
+// CHECK: 134:8: UnexposedExpr=c:2:14 Extent=[134:8 - 134:9]
 // CHECK: 134:8: DeclRefExpr=c:2:14 Extent=[134:8 - 134:9]
 // CHECK: 134:13: UnexposedExpr= Extent=[134:13 - 134:19]
 // CHECK: 134:13: IntegerLiteral= Extent=[134:13 - 134:19]
-// CHECK: 134:23: BinaryOperator= Extent=[134:23 - 134:34]
+// CHECK: 134:23: BinaryOperator=== Extent=[134:23 - 134:34]
+// CHECK: 134:23: UnexposedExpr=c:2:14 Extent=[134:23 - 134:24]
 // CHECK: 134:23: DeclRefExpr=c:2:14 Extent=[134:23 - 134:24]
 // CHECK: 134:28: UnexposedExpr= Extent=[134:28 - 134:34]
 // CHECK: 134:28: IntegerLiteral= Extent=[134:28 - 134:34]
-// CHECK: 134:38: BinaryOperator= Extent=[134:38 - 134:49]
+// CHECK: 134:38: BinaryOperator=== Extent=[134:38 - 134:49]
+// CHECK: 134:38: UnexposedExpr=c:2:14 Extent=[134:38 - 134:39]
 // CHECK: 134:38: DeclRefExpr=c:2:14 Extent=[134:38 - 134:39]
 // CHECK: 134:43: UnexposedExpr= Extent=[134:43 - 134:49]
 // CHECK: 134:43: IntegerLiteral= Extent=[134:43 - 134:49]
-// CHECK: 134:54: BinaryOperator= Extent=[134:54 - 134:80]
-// CHECK: 134:54: BinaryOperator= Extent=[134:54 - 134:65]
+// CHECK: 134:53: ParenExpr= Extent=[134:53 - 134:81]
+// CHECK: 134:54: BinaryOperator=&& Extent=[134:54 - 134:80]
+// CHECK: 134:54: BinaryOperator=>= Extent=[134:54 - 134:65]
+// CHECK: 134:54: UnexposedExpr=c:2:14 Extent=[134:54 - 134:55]
 // CHECK: 134:54: DeclRefExpr=c:2:14 Extent=[134:54 - 134:55]
 // CHECK: 134:59: UnexposedExpr= Extent=[134:59 - 134:65]
 // CHECK: 134:59: IntegerLiteral= Extent=[134:59 - 134:65]
-// CHECK: 134:69: BinaryOperator= Extent=[134:69 - 134:80]
+// CHECK: 134:69: BinaryOperator=<= Extent=[134:69 - 134:80]
+// CHECK: 134:69: UnexposedExpr=c:2:14 Extent=[134:69 - 134:70]
 // CHECK: 134:69: DeclRefExpr=c:2:14 Extent=[134:69 - 134:70]
 // CHECK: 134:74: UnexposedExpr= Extent=[134:74 - 134:80]
 // CHECK: 134:74: IntegerLiteral= Extent=[134:74 - 134:80]
-// CHECK: 135:9: BinaryOperator= Extent=[135:9 - 135:35]
-// CHECK: 135:9: BinaryOperator= Extent=[135:9 - 135:20]
+// CHECK: 135:8: ParenExpr= Extent=[135:8 - 135:36]
+// CHECK: 135:9: BinaryOperator=&& Extent=[135:9 - 135:35]
+// CHECK: 135:9: BinaryOperator=>= Extent=[135:9 - 135:20]
+// CHECK: 135:9: UnexposedExpr=c:2:14 Extent=[135:9 - 135:10]
 // CHECK: 135:9: DeclRefExpr=c:2:14 Extent=[135:9 - 135:10]
 // CHECK: 135:14: UnexposedExpr= Extent=[135:14 - 135:20]
 // CHECK: 135:14: IntegerLiteral= Extent=[135:14 - 135:20]
-// CHECK: 135:24: BinaryOperator= Extent=[135:24 - 135:35]
+// CHECK: 135:24: BinaryOperator=<= Extent=[135:24 - 135:35]
+// CHECK: 135:24: UnexposedExpr=c:2:14 Extent=[135:24 - 135:25]
 // CHECK: 135:24: DeclRefExpr=c:2:14 Extent=[135:24 - 135:25]
 // CHECK: 135:29: UnexposedExpr= Extent=[135:29 - 135:35]
 // CHECK: 135:29: IntegerLiteral= Extent=[135:29 - 135:35]
-// CHECK: 136:9: BinaryOperator= Extent=[136:9 - 136:35]
-// CHECK: 136:9: BinaryOperator= Extent=[136:9 - 136:20]
+// CHECK: 136:8: ParenExpr= Extent=[136:8 - 136:36]
+// CHECK: 136:9: BinaryOperator=&& Extent=[136:9 - 136:35]
+// CHECK: 136:9: BinaryOperator=>= Extent=[136:9 - 136:20]
+// CHECK: 136:9: UnexposedExpr=c:2:14 Extent=[136:9 - 136:10]
 // CHECK: 136:9: DeclRefExpr=c:2:14 Extent=[136:9 - 136:10]
 // CHECK: 136:14: UnexposedExpr= Extent=[136:14 - 136:20]
 // CHECK: 136:14: IntegerLiteral= Extent=[136:14 - 136:20]
-// CHECK: 136:24: BinaryOperator= Extent=[136:24 - 136:35]
+// CHECK: 136:24: BinaryOperator=<= Extent=[136:24 - 136:35]
+// CHECK: 136:24: UnexposedExpr=c:2:14 Extent=[136:24 - 136:25]
 // CHECK: 136:24: DeclRefExpr=c:2:14 Extent=[136:24 - 136:25]
 // CHECK: 136:29: UnexposedExpr= Extent=[136:29 - 136:35]
 // CHECK: 136:29: IntegerLiteral= Extent=[136:29 - 136:35]
-// CHECK: 137:9: BinaryOperator= Extent=[137:9 - 137:35]
-// CHECK: 137:9: BinaryOperator= Extent=[137:9 - 137:20]
+// CHECK: 137:8: ParenExpr= Extent=[137:8 - 137:36]
+// CHECK: 137:9: BinaryOperator=&& Extent=[137:9 - 137:35]
+// CHECK: 137:9: BinaryOperator=>= Extent=[137:9 - 137:20]
+// CHECK: 137:9: UnexposedExpr=c:2:14 Extent=[137:9 - 137:10]
 // CHECK: 137:9: DeclRefExpr=c:2:14 Extent=[137:9 - 137:10]
 // CHECK: 137:14: UnexposedExpr= Extent=[137:14 - 137:20]
 // CHECK: 137:14: IntegerLiteral= Extent=[137:14 - 137:20]
-// CHECK: 137:24: BinaryOperator= Extent=[137:24 - 137:35]
+// CHECK: 137:24: BinaryOperator=<= Extent=[137:24 - 137:35]
+// CHECK: 137:24: UnexposedExpr=c:2:14 Extent=[137:24 - 137:25]
 // CHECK: 137:24: DeclRefExpr=c:2:14 Extent=[137:24 - 137:25]
 // CHECK: 137:29: UnexposedExpr= Extent=[137:29 - 137:35]
 // CHECK: 137:29: IntegerLiteral= Extent=[137:29 - 137:35]
-// CHECK: 138:9: BinaryOperator= Extent=[138:9 - 138:35]
-// CHECK: 138:9: BinaryOperator= Extent=[138:9 - 138:20]
+// CHECK: 138:8: ParenExpr= Extent=[138:8 - 138:36]
+// CHECK: 138:9: BinaryOperator=&& Extent=[138:9 - 138:35]
+// CHECK: 138:9: BinaryOperator=>= Extent=[138:9 - 138:20]
+// CHECK: 138:9: UnexposedExpr=c:2:14 Extent=[138:9 - 138:10]
 // CHECK: 138:9: DeclRefExpr=c:2:14 Extent=[138:9 - 138:10]
 // CHECK: 138:14: UnexposedExpr= Extent=[138:14 - 138:20]
 // CHECK: 138:14: IntegerLiteral= Extent=[138:14 - 138:20]
-// CHECK: 138:24: BinaryOperator= Extent=[138:24 - 138:35]
+// CHECK: 138:24: BinaryOperator=<= Extent=[138:24 - 138:35]
+// CHECK: 138:24: UnexposedExpr=c:2:14 Extent=[138:24 - 138:25]
 // CHECK: 138:24: DeclRefExpr=c:2:14 Extent=[138:24 - 138:25]
 // CHECK: 138:29: UnexposedExpr= Extent=[138:29 - 138:35]
 // CHECK: 138:29: IntegerLiteral= Extent=[138:29 - 138:35]
-// CHECK: 139:9: BinaryOperator= Extent=[139:9 - 139:35]
-// CHECK: 139:9: BinaryOperator= Extent=[139:9 - 139:20]
+// CHECK: 139:8: ParenExpr= Extent=[139:8 - 139:36]
+// CHECK: 139:9: BinaryOperator=&& Extent=[139:9 - 139:35]
+// CHECK: 139:9: BinaryOperator=>= Extent=[139:9 - 139:20]
+// CHECK: 139:9: UnexposedExpr=c:2:14 Extent=[139:9 - 139:10]
 // CHECK: 139:9: DeclRefExpr=c:2:14 Extent=[139:9 - 139:10]
 // CHECK: 139:14: UnexposedExpr= Extent=[139:14 - 139:20]
 // CHECK: 139:14: IntegerLiteral= Extent=[139:14 - 139:20]
-// CHECK: 139:24: BinaryOperator= Extent=[139:24 - 139:35]
+// CHECK: 139:24: BinaryOperator=<= Extent=[139:24 - 139:35]
+// CHECK: 139:24: UnexposedExpr=c:2:14 Extent=[139:24 - 139:25]
 // CHECK: 139:24: DeclRefExpr=c:2:14 Extent=[139:24 - 139:25]
 // CHECK: 139:29: UnexposedExpr= Extent=[139:29 - 139:35]
 // CHECK: 139:29: IntegerLiteral= Extent=[139:29 - 139:35]
-// CHECK: 140:9: BinaryOperator= Extent=[140:9 - 140:35]
-// CHECK: 140:9: BinaryOperator= Extent=[140:9 - 140:20]
+// CHECK: 140:8: ParenExpr= Extent=[140:8 - 140:36]
+// CHECK: 140:9: BinaryOperator=&& Extent=[140:9 - 140:35]
+// CHECK: 140:9: BinaryOperator=>= Extent=[140:9 - 140:20]
+// CHECK: 140:9: UnexposedExpr=c:2:14 Extent=[140:9 - 140:10]
 // CHECK: 140:9: DeclRefExpr=c:2:14 Extent=[140:9 - 140:10]
 // CHECK: 140:14: UnexposedExpr= Extent=[140:14 - 140:20]
 // CHECK: 140:14: IntegerLiteral= Extent=[140:14 - 140:20]
-// CHECK: 140:24: BinaryOperator= Extent=[140:24 - 140:35]
+// CHECK: 140:24: BinaryOperator=<= Extent=[140:24 - 140:35]
+// CHECK: 140:24: UnexposedExpr=c:2:14 Extent=[140:24 - 140:25]
 // CHECK: 140:24: DeclRefExpr=c:2:14 Extent=[140:24 - 140:25]
 // CHECK: 140:29: UnexposedExpr= Extent=[140:29 - 140:35]
 // CHECK: 140:29: IntegerLiteral= Extent=[140:29 - 140:35]
-// CHECK: 141:8: BinaryOperator= Extent=[141:8 - 141:19]
+// CHECK: 141:8: BinaryOperator=== Extent=[141:8 - 141:19]
+// CHECK: 141:8: UnexposedExpr=c:2:14 Extent=[141:8 - 141:9]
 // CHECK: 141:8: DeclRefExpr=c:2:14 Extent=[141:8 - 141:9]
 // CHECK: 141:13: UnexposedExpr= Extent=[141:13 - 141:19]
 // CHECK: 141:13: IntegerLiteral= Extent=[141:13 - 141:19]
-// CHECK: 141:23: BinaryOperator= Extent=[141:23 - 141:34]
+// CHECK: 141:23: BinaryOperator=== Extent=[141:23 - 141:34]
+// CHECK: 141:23: UnexposedExpr=c:2:14 Extent=[141:23 - 141:24]
 // CHECK: 141:23: DeclRefExpr=c:2:14 Extent=[141:23 - 141:24]
 // CHECK: 141:28: UnexposedExpr= Extent=[141:28 - 141:34]
 // CHECK: 141:28: IntegerLiteral= Extent=[141:28 - 141:34]
-// CHECK: 141:38: BinaryOperator= Extent=[141:38 - 141:49]
+// CHECK: 141:38: BinaryOperator=== Extent=[141:38 - 141:49]
+// CHECK: 141:38: UnexposedExpr=c:2:14 Extent=[141:38 - 141:39]
 // CHECK: 141:38: DeclRefExpr=c:2:14 Extent=[141:38 - 141:39]
 // CHECK: 141:43: UnexposedExpr= Extent=[141:43 - 141:49]
 // CHECK: 141:43: IntegerLiteral= Extent=[141:43 - 141:49]
-// CHECK: 141:54: BinaryOperator= Extent=[141:54 - 141:80]
-// CHECK: 141:54: BinaryOperator= Extent=[141:54 - 141:65]
+// CHECK: 141:53: ParenExpr= Extent=[141:53 - 141:81]
+// CHECK: 141:54: BinaryOperator=&& Extent=[141:54 - 141:80]
+// CHECK: 141:54: BinaryOperator=>= Extent=[141:54 - 141:65]
+// CHECK: 141:54: UnexposedExpr=c:2:14 Extent=[141:54 - 141:55]
 // CHECK: 141:54: DeclRefExpr=c:2:14 Extent=[141:54 - 141:55]
 // CHECK: 141:59: UnexposedExpr= Extent=[141:59 - 141:65]
 // CHECK: 141:59: IntegerLiteral= Extent=[141:59 - 141:65]
-// CHECK: 141:69: BinaryOperator= Extent=[141:69 - 141:80]
+// CHECK: 141:69: BinaryOperator=<= Extent=[141:69 - 141:80]
+// CHECK: 141:69: UnexposedExpr=c:2:14 Extent=[141:69 - 141:70]
 // CHECK: 141:69: DeclRefExpr=c:2:14 Extent=[141:69 - 141:70]
 // CHECK: 141:74: UnexposedExpr= Extent=[141:74 - 141:80]
 // CHECK: 141:74: IntegerLiteral= Extent=[141:74 - 141:80]
-// CHECK: 142:9: BinaryOperator= Extent=[142:9 - 142:35]
-// CHECK: 142:9: BinaryOperator= Extent=[142:9 - 142:20]
+// CHECK: 142:8: ParenExpr= Extent=[142:8 - 142:36]
+// CHECK: 142:9: BinaryOperator=&& Extent=[142:9 - 142:35]
+// CHECK: 142:9: BinaryOperator=>= Extent=[142:9 - 142:20]
+// CHECK: 142:9: UnexposedExpr=c:2:14 Extent=[142:9 - 142:10]
 // CHECK: 142:9: DeclRefExpr=c:2:14 Extent=[142:9 - 142:10]
 // CHECK: 142:14: UnexposedExpr= Extent=[142:14 - 142:20]
 // CHECK: 142:14: IntegerLiteral= Extent=[142:14 - 142:20]
-// CHECK: 142:24: BinaryOperator= Extent=[142:24 - 142:35]
+// CHECK: 142:24: BinaryOperator=<= Extent=[142:24 - 142:35]
+// CHECK: 142:24: UnexposedExpr=c:2:14 Extent=[142:24 - 142:25]
 // CHECK: 142:24: DeclRefExpr=c:2:14 Extent=[142:24 - 142:25]
 // CHECK: 142:29: UnexposedExpr= Extent=[142:29 - 142:35]
 // CHECK: 142:29: IntegerLiteral= Extent=[142:29 - 142:35]
-// CHECK: 143:9: BinaryOperator= Extent=[143:9 - 143:35]
-// CHECK: 143:9: BinaryOperator= Extent=[143:9 - 143:20]
+// CHECK: 143:8: ParenExpr= Extent=[143:8 - 143:36]
+// CHECK: 143:9: BinaryOperator=&& Extent=[143:9 - 143:35]
+// CHECK: 143:9: BinaryOperator=>= Extent=[143:9 - 143:20]
+// CHECK: 143:9: UnexposedExpr=c:2:14 Extent=[143:9 - 143:10]
 // CHECK: 143:9: DeclRefExpr=c:2:14 Extent=[143:9 - 143:10]
 // CHECK: 143:14: UnexposedExpr= Extent=[143:14 - 143:20]
 // CHECK: 143:14: IntegerLiteral= Extent=[143:14 - 143:20]
-// CHECK: 143:24: BinaryOperator= Extent=[143:24 - 143:35]
+// CHECK: 143:24: BinaryOperator=<= Extent=[143:24 - 143:35]
+// CHECK: 143:24: UnexposedExpr=c:2:14 Extent=[143:24 - 143:25]
 // CHECK: 143:24: DeclRefExpr=c:2:14 Extent=[143:24 - 143:25]
 // CHECK: 143:29: UnexposedExpr= Extent=[143:29 - 143:35]
 // CHECK: 143:29: IntegerLiteral= Extent=[143:29 - 143:35]
-// CHECK: 144:8: BinaryOperator= Extent=[144:8 - 144:19]
+// CHECK: 144:8: BinaryOperator=== Extent=[144:8 - 144:19]
+// CHECK: 144:8: UnexposedExpr=c:2:14 Extent=[144:8 - 144:9]
 // CHECK: 144:8: DeclRefExpr=c:2:14 Extent=[144:8 - 144:9]
 // CHECK: 144:13: UnexposedExpr= Extent=[144:13 - 144:19]
 // CHECK: 144:13: IntegerLiteral= Extent=[144:13 - 144:19]
-// CHECK: 144:24: BinaryOperator= Extent=[144:24 - 144:50]
-// CHECK: 144:24: BinaryOperator= Extent=[144:24 - 144:35]
+// CHECK: 144:23: ParenExpr= Extent=[144:23 - 144:51]
+// CHECK: 144:24: BinaryOperator=&& Extent=[144:24 - 144:50]
+// CHECK: 144:24: BinaryOperator=>= Extent=[144:24 - 144:35]
+// CHECK: 144:24: UnexposedExpr=c:2:14 Extent=[144:24 - 144:25]
 // CHECK: 144:24: DeclRefExpr=c:2:14 Extent=[144:24 - 144:25]
 // CHECK: 144:29: UnexposedExpr= Extent=[144:29 - 144:35]
 // CHECK: 144:29: IntegerLiteral= Extent=[144:29 - 144:35]
-// CHECK: 144:39: BinaryOperator= Extent=[144:39 - 144:50]
+// CHECK: 144:39: BinaryOperator=<= Extent=[144:39 - 144:50]
+// CHECK: 144:39: UnexposedExpr=c:2:14 Extent=[144:39 - 144:40]
 // CHECK: 144:39: DeclRefExpr=c:2:14 Extent=[144:39 - 144:40]
 // CHECK: 144:44: UnexposedExpr= Extent=[144:44 - 144:50]
 // CHECK: 144:44: IntegerLiteral= Extent=[144:44 - 144:50]
-// CHECK: 145:9: BinaryOperator= Extent=[145:9 - 145:35]
-// CHECK: 145:9: BinaryOperator= Extent=[145:9 - 145:20]
+// CHECK: 145:8: ParenExpr= Extent=[145:8 - 145:36]
+// CHECK: 145:9: BinaryOperator=&& Extent=[145:9 - 145:35]
+// CHECK: 145:9: BinaryOperator=>= Extent=[145:9 - 145:20]
+// CHECK: 145:9: UnexposedExpr=c:2:14 Extent=[145:9 - 145:10]
 // CHECK: 145:9: DeclRefExpr=c:2:14 Extent=[145:9 - 145:10]
 // CHECK: 145:14: UnexposedExpr= Extent=[145:14 - 145:20]
 // CHECK: 145:14: IntegerLiteral= Extent=[145:14 - 145:20]
-// CHECK: 145:24: BinaryOperator= Extent=[145:24 - 145:35]
+// CHECK: 145:24: BinaryOperator=<= Extent=[145:24 - 145:35]
+// CHECK: 145:24: UnexposedExpr=c:2:14 Extent=[145:24 - 145:25]
 // CHECK: 145:24: DeclRefExpr=c:2:14 Extent=[145:24 - 145:25]
 // CHECK: 145:29: UnexposedExpr= Extent=[145:29 - 145:35]
 // CHECK: 145:29: IntegerLiteral= Extent=[145:29 - 145:35]
-// CHECK: 146:9: BinaryOperator= Extent=[146:9 - 146:35]
-// CHECK: 146:9: BinaryOperator= Extent=[146:9 - 146:20]
+// CHECK: 146:8: ParenExpr= Extent=[146:8 - 146:36]
+// CHECK: 146:9: BinaryOperator=&& Extent=[146:9 - 146:35]
+// CHECK: 146:9: BinaryOperator=>= Extent=[146:9 - 146:20]
+// CHECK: 146:9: UnexposedExpr=c:2:14 Extent=[146:9 - 146:10]
 // CHECK: 146:9: DeclRefExpr=c:2:14 Extent=[146:9 - 146:10]
 // CHECK: 146:14: UnexposedExpr= Extent=[146:14 - 146:20]
 // CHECK: 146:14: IntegerLiteral= Extent=[146:14 - 146:20]
-// CHECK: 146:24: BinaryOperator= Extent=[146:24 - 146:35]
+// CHECK: 146:24: BinaryOperator=<= Extent=[146:24 - 146:35]
+// CHECK: 146:24: UnexposedExpr=c:2:14 Extent=[146:24 - 146:25]
 // CHECK: 146:24: DeclRefExpr=c:2:14 Extent=[146:24 - 146:25]
 // CHECK: 146:29: UnexposedExpr= Extent=[146:29 - 146:35]
 // CHECK: 146:29: IntegerLiteral= Extent=[146:29 - 146:35]
-// CHECK: 147:9: BinaryOperator= Extent=[147:9 - 147:35]
-// CHECK: 147:9: BinaryOperator= Extent=[147:9 - 147:20]
+// CHECK: 147:8: ParenExpr= Extent=[147:8 - 147:36]
+// CHECK: 147:9: BinaryOperator=&& Extent=[147:9 - 147:35]
+// CHECK: 147:9: BinaryOperator=>= Extent=[147:9 - 147:20]
+// CHECK: 147:9: UnexposedExpr=c:2:14 Extent=[147:9 - 147:10]
 // CHECK: 147:9: DeclRefExpr=c:2:14 Extent=[147:9 - 147:10]
 // CHECK: 147:14: UnexposedExpr= Extent=[147:14 - 147:20]
 // CHECK: 147:14: IntegerLiteral= Extent=[147:14 - 147:20]
-// CHECK: 147:24: BinaryOperator= Extent=[147:24 - 147:35]
+// CHECK: 147:24: BinaryOperator=<= Extent=[147:24 - 147:35]
+// CHECK: 147:24: UnexposedExpr=c:2:14 Extent=[147:24 - 147:25]
 // CHECK: 147:24: DeclRefExpr=c:2:14 Extent=[147:24 - 147:25]
 // CHECK: 147:29: UnexposedExpr= Extent=[147:29 - 147:35]
 // CHECK: 147:29: IntegerLiteral= Extent=[147:29 - 147:35]
-// CHECK: 148:9: BinaryOperator= Extent=[148:9 - 148:35]
-// CHECK: 148:9: BinaryOperator= Extent=[148:9 - 148:20]
+// CHECK: 148:8: ParenExpr= Extent=[148:8 - 148:36]
+// CHECK: 148:9: BinaryOperator=&& Extent=[148:9 - 148:35]
+// CHECK: 148:9: BinaryOperator=>= Extent=[148:9 - 148:20]
+// CHECK: 148:9: UnexposedExpr=c:2:14 Extent=[148:9 - 148:10]
 // CHECK: 148:9: DeclRefExpr=c:2:14 Extent=[148:9 - 148:10]
 // CHECK: 148:14: UnexposedExpr= Extent=[148:14 - 148:20]
 // CHECK: 148:14: IntegerLiteral= Extent=[148:14 - 148:20]
-// CHECK: 148:24: BinaryOperator= Extent=[148:24 - 148:35]
+// CHECK: 148:24: BinaryOperator=<= Extent=[148:24 - 148:35]
+// CHECK: 148:24: UnexposedExpr=c:2:14 Extent=[148:24 - 148:25]
 // CHECK: 148:24: DeclRefExpr=c:2:14 Extent=[148:24 - 148:25]
 // CHECK: 148:29: UnexposedExpr= Extent=[148:29 - 148:35]
 // CHECK: 148:29: IntegerLiteral= Extent=[148:29 - 148:35]
-// CHECK: 149:9: BinaryOperator= Extent=[149:9 - 149:35]
-// CHECK: 149:9: BinaryOperator= Extent=[149:9 - 149:20]
+// CHECK: 149:8: ParenExpr= Extent=[149:8 - 149:36]
+// CHECK: 149:9: BinaryOperator=&& Extent=[149:9 - 149:35]
+// CHECK: 149:9: BinaryOperator=>= Extent=[149:9 - 149:20]
+// CHECK: 149:9: UnexposedExpr=c:2:14 Extent=[149:9 - 149:10]
 // CHECK: 149:9: DeclRefExpr=c:2:14 Extent=[149:9 - 149:10]
 // CHECK: 149:14: UnexposedExpr= Extent=[149:14 - 149:20]
 // CHECK: 149:14: IntegerLiteral= Extent=[149:14 - 149:20]
-// CHECK: 149:24: BinaryOperator= Extent=[149:24 - 149:35]
+// CHECK: 149:24: BinaryOperator=<= Extent=[149:24 - 149:35]
+// CHECK: 149:24: UnexposedExpr=c:2:14 Extent=[149:24 - 149:25]
 // CHECK: 149:24: DeclRefExpr=c:2:14 Extent=[149:24 - 149:25]
 // CHECK: 149:29: UnexposedExpr= Extent=[149:29 - 149:35]
 // CHECK: 149:29: IntegerLiteral= Extent=[149:29 - 149:35]
-// CHECK: 150:9: BinaryOperator= Extent=[150:9 - 150:35]
-// CHECK: 150:9: BinaryOperator= Extent=[150:9 - 150:20]
+// CHECK: 150:8: ParenExpr= Extent=[150:8 - 150:36]
+// CHECK: 150:9: BinaryOperator=&& Extent=[150:9 - 150:35]
+// CHECK: 150:9: BinaryOperator=>= Extent=[150:9 - 150:20]
+// CHECK: 150:9: UnexposedExpr=c:2:14 Extent=[150:9 - 150:10]
 // CHECK: 150:9: DeclRefExpr=c:2:14 Extent=[150:9 - 150:10]
 // CHECK: 150:14: UnexposedExpr= Extent=[150:14 - 150:20]
 // CHECK: 150:14: IntegerLiteral= Extent=[150:14 - 150:20]
-// CHECK: 150:24: BinaryOperator= Extent=[150:24 - 150:35]
+// CHECK: 150:24: BinaryOperator=<= Extent=[150:24 - 150:35]
+// CHECK: 150:24: UnexposedExpr=c:2:14 Extent=[150:24 - 150:25]
 // CHECK: 150:24: DeclRefExpr=c:2:14 Extent=[150:24 - 150:25]
 // CHECK: 150:29: UnexposedExpr= Extent=[150:29 - 150:35]
 // CHECK: 150:29: IntegerLiteral= Extent=[150:29 - 150:35]
-// CHECK: 151:8: BinaryOperator= Extent=[151:8 - 151:19]
+// CHECK: 151:8: BinaryOperator=== Extent=[151:8 - 151:19]
+// CHECK: 151:8: UnexposedExpr=c:2:14 Extent=[151:8 - 151:9]
 // CHECK: 151:8: DeclRefExpr=c:2:14 Extent=[151:8 - 151:9]
 // CHECK: 151:13: UnexposedExpr= Extent=[151:13 - 151:19]
 // CHECK: 151:13: IntegerLiteral= Extent=[151:13 - 151:19]
-// CHECK: 151:24: BinaryOperator= Extent=[151:24 - 151:50]
-// CHECK: 151:24: BinaryOperator= Extent=[151:24 - 151:35]
+// CHECK: 151:23: ParenExpr= Extent=[151:23 - 151:51]
+// CHECK: 151:24: BinaryOperator=&& Extent=[151:24 - 151:50]
+// CHECK: 151:24: BinaryOperator=>= Extent=[151:24 - 151:35]
+// CHECK: 151:24: UnexposedExpr=c:2:14 Extent=[151:24 - 151:25]
 // CHECK: 151:24: DeclRefExpr=c:2:14 Extent=[151:24 - 151:25]
 // CHECK: 151:29: UnexposedExpr= Extent=[151:29 - 151:35]
 // CHECK: 151:29: IntegerLiteral= Extent=[151:29 - 151:35]
-// CHECK: 151:39: BinaryOperator= Extent=[151:39 - 151:50]
+// CHECK: 151:39: BinaryOperator=<= Extent=[151:39 - 151:50]
+// CHECK: 151:39: UnexposedExpr=c:2:14 Extent=[151:39 - 151:40]
 // CHECK: 151:39: DeclRefExpr=c:2:14 Extent=[151:39 - 151:40]
 // CHECK: 151:44: UnexposedExpr= Extent=[151:44 - 151:50]
 // CHECK: 151:44: IntegerLiteral= Extent=[151:44 - 151:50]
-// CHECK: 152:8: BinaryOperator= Extent=[152:8 - 152:19]
+// CHECK: 152:8: BinaryOperator=== Extent=[152:8 - 152:19]
+// CHECK: 152:8: UnexposedExpr=c:2:14 Extent=[152:8 - 152:9]
 // CHECK: 152:8: DeclRefExpr=c:2:14 Extent=[152:8 - 152:9]
 // CHECK: 152:13: UnexposedExpr= Extent=[152:13 - 152:19]
 // CHECK: 152:13: IntegerLiteral= Extent=[152:13 - 152:19]
-// CHECK: 152:24: BinaryOperator= Extent=[152:24 - 152:50]
-// CHECK: 152:24: BinaryOperator= Extent=[152:24 - 152:35]
+// CHECK: 152:23: ParenExpr= Extent=[152:23 - 152:51]
+// CHECK: 152:24: BinaryOperator=&& Extent=[152:24 - 152:50]
+// CHECK: 152:24: BinaryOperator=>= Extent=[152:24 - 152:35]
+// CHECK: 152:24: UnexposedExpr=c:2:14 Extent=[152:24 - 152:25]
 // CHECK: 152:24: DeclRefExpr=c:2:14 Extent=[152:24 - 152:25]
 // CHECK: 152:29: UnexposedExpr= Extent=[152:29 - 152:35]
 // CHECK: 152:29: IntegerLiteral= Extent=[152:29 - 152:35]
-// CHECK: 152:39: BinaryOperator= Extent=[152:39 - 152:50]
+// CHECK: 152:39: BinaryOperator=<= Extent=[152:39 - 152:50]
+// CHECK: 152:39: UnexposedExpr=c:2:14 Extent=[152:39 - 152:40]
 // CHECK: 152:39: DeclRefExpr=c:2:14 Extent=[152:39 - 152:40]
 // CHECK: 152:44: UnexposedExpr= Extent=[152:44 - 152:50]
 // CHECK: 152:44: IntegerLiteral= Extent=[152:44 - 152:50]
-// CHECK: 153:9: BinaryOperator= Extent=[153:9 - 153:35]
-// CHECK: 153:9: BinaryOperator= Extent=[153:9 - 153:20]
+// CHECK: 153:8: ParenExpr= Extent=[153:8 - 153:36]
+// CHECK: 153:9: BinaryOperator=&& Extent=[153:9 - 153:35]
+// CHECK: 153:9: BinaryOperator=>= Extent=[153:9 - 153:20]
+// CHECK: 153:9: UnexposedExpr=c:2:14 Extent=[153:9 - 153:10]
 // CHECK: 153:9: DeclRefExpr=c:2:14 Extent=[153:9 - 153:10]
 // CHECK: 153:14: UnexposedExpr= Extent=[153:14 - 153:20]
 // CHECK: 153:14: IntegerLiteral= Extent=[153:14 - 153:20]
-// CHECK: 153:24: BinaryOperator= Extent=[153:24 - 153:35]
+// CHECK: 153:24: BinaryOperator=<= Extent=[153:24 - 153:35]
+// CHECK: 153:24: UnexposedExpr=c:2:14 Extent=[153:24 - 153:25]
 // CHECK: 153:24: DeclRefExpr=c:2:14 Extent=[153:24 - 153:25]
 // CHECK: 153:29: UnexposedExpr= Extent=[153:29 - 153:35]
 // CHECK: 153:29: IntegerLiteral= Extent=[153:29 - 153:35]
-// CHECK: 154:9: BinaryOperator= Extent=[154:9 - 154:35]
-// CHECK: 154:9: BinaryOperator= Extent=[154:9 - 154:20]
+// CHECK: 154:8: ParenExpr= Extent=[154:8 - 154:36]
+// CHECK: 154:9: BinaryOperator=&& Extent=[154:9 - 154:35]
+// CHECK: 154:9: BinaryOperator=>= Extent=[154:9 - 154:20]
+// CHECK: 154:9: UnexposedExpr=c:2:14 Extent=[154:9 - 154:10]
 // CHECK: 154:9: DeclRefExpr=c:2:14 Extent=[154:9 - 154:10]
 // CHECK: 154:14: UnexposedExpr= Extent=[154:14 - 154:20]
 // CHECK: 154:14: IntegerLiteral= Extent=[154:14 - 154:20]
-// CHECK: 154:24: BinaryOperator= Extent=[154:24 - 154:35]
+// CHECK: 154:24: BinaryOperator=<= Extent=[154:24 - 154:35]
+// CHECK: 154:24: UnexposedExpr=c:2:14 Extent=[154:24 - 154:25]
 // CHECK: 154:24: DeclRefExpr=c:2:14 Extent=[154:24 - 154:25]
 // CHECK: 154:29: UnexposedExpr= Extent=[154:29 - 154:35]
 // CHECK: 154:29: IntegerLiteral= Extent=[154:29 - 154:35]
-// CHECK: 155:9: BinaryOperator= Extent=[155:9 - 155:35]
-// CHECK: 155:9: BinaryOperator= Extent=[155:9 - 155:20]
+// CHECK: 155:8: ParenExpr= Extent=[155:8 - 155:36]
+// CHECK: 155:9: BinaryOperator=&& Extent=[155:9 - 155:35]
+// CHECK: 155:9: BinaryOperator=>= Extent=[155:9 - 155:20]
+// CHECK: 155:9: UnexposedExpr=c:2:14 Extent=[155:9 - 155:10]
 // CHECK: 155:9: DeclRefExpr=c:2:14 Extent=[155:9 - 155:10]
 // CHECK: 155:14: UnexposedExpr= Extent=[155:14 - 155:20]
 // CHECK: 155:14: IntegerLiteral= Extent=[155:14 - 155:20]
-// CHECK: 155:24: BinaryOperator= Extent=[155:24 - 155:35]
+// CHECK: 155:24: BinaryOperator=<= Extent=[155:24 - 155:35]
+// CHECK: 155:24: UnexposedExpr=c:2:14 Extent=[155:24 - 155:25]
 // CHECK: 155:24: DeclRefExpr=c:2:14 Extent=[155:24 - 155:25]
 // CHECK: 155:29: UnexposedExpr= Extent=[155:29 - 155:35]
 // CHECK: 155:29: IntegerLiteral= Extent=[155:29 - 155:35]
-// CHECK: 156:9: BinaryOperator= Extent=[156:9 - 156:35]
-// CHECK: 156:9: BinaryOperator= Extent=[156:9 - 156:20]
+// CHECK: 156:8: ParenExpr= Extent=[156:8 - 156:36]
+// CHECK: 156:9: BinaryOperator=&& Extent=[156:9 - 156:35]
+// CHECK: 156:9: BinaryOperator=>= Extent=[156:9 - 156:20]
+// CHECK: 156:9: UnexposedExpr=c:2:14 Extent=[156:9 - 156:10]
 // CHECK: 156:9: DeclRefExpr=c:2:14 Extent=[156:9 - 156:10]
 // CHECK: 156:14: UnexposedExpr= Extent=[156:14 - 156:20]
 // CHECK: 156:14: IntegerLiteral= Extent=[156:14 - 156:20]
-// CHECK: 156:24: BinaryOperator= Extent=[156:24 - 156:35]
+// CHECK: 156:24: BinaryOperator=<= Extent=[156:24 - 156:35]
+// CHECK: 156:24: UnexposedExpr=c:2:14 Extent=[156:24 - 156:25]
 // CHECK: 156:24: DeclRefExpr=c:2:14 Extent=[156:24 - 156:25]
 // CHECK: 156:29: UnexposedExpr= Extent=[156:29 - 156:35]
 // CHECK: 156:29: IntegerLiteral= Extent=[156:29 - 156:35]
-// CHECK: 157:9: BinaryOperator= Extent=[157:9 - 157:35]
-// CHECK: 157:9: BinaryOperator= Extent=[157:9 - 157:20]
+// CHECK: 157:8: ParenExpr= Extent=[157:8 - 157:36]
+// CHECK: 157:9: BinaryOperator=&& Extent=[157:9 - 157:35]
+// CHECK: 157:9: BinaryOperator=>= Extent=[157:9 - 157:20]
+// CHECK: 157:9: UnexposedExpr=c:2:14 Extent=[157:9 - 157:10]
 // CHECK: 157:9: DeclRefExpr=c:2:14 Extent=[157:9 - 157:10]
 // CHECK: 157:14: UnexposedExpr= Extent=[157:14 - 157:20]
 // CHECK: 157:14: IntegerLiteral= Extent=[157:14 - 157:20]
-// CHECK: 157:24: BinaryOperator= Extent=[157:24 - 157:35]
+// CHECK: 157:24: BinaryOperator=<= Extent=[157:24 - 157:35]
+// CHECK: 157:24: UnexposedExpr=c:2:14 Extent=[157:24 - 157:25]
 // CHECK: 157:24: DeclRefExpr=c:2:14 Extent=[157:24 - 157:25]
 // CHECK: 157:29: UnexposedExpr= Extent=[157:29 - 157:35]
 // CHECK: 157:29: IntegerLiteral= Extent=[157:29 - 157:35]
-// CHECK: 158:8: BinaryOperator= Extent=[158:8 - 158:19]
+// CHECK: 158:8: BinaryOperator=== Extent=[158:8 - 158:19]
+// CHECK: 158:8: UnexposedExpr=c:2:14 Extent=[158:8 - 158:9]
 // CHECK: 158:8: DeclRefExpr=c:2:14 Extent=[158:8 - 158:9]
 // CHECK: 158:13: UnexposedExpr= Extent=[158:13 - 158:19]
 // CHECK: 158:13: IntegerLiteral= Extent=[158:13 - 158:19]
-// CHECK: 158:24: BinaryOperator= Extent=[158:24 - 158:50]
-// CHECK: 158:24: BinaryOperator= Extent=[158:24 - 158:35]
+// CHECK: 158:23: ParenExpr= Extent=[158:23 - 158:51]
+// CHECK: 158:24: BinaryOperator=&& Extent=[158:24 - 158:50]
+// CHECK: 158:24: BinaryOperator=>= Extent=[158:24 - 158:35]
+// CHECK: 158:24: UnexposedExpr=c:2:14 Extent=[158:24 - 158:25]
 // CHECK: 158:24: DeclRefExpr=c:2:14 Extent=[158:24 - 158:25]
 // CHECK: 158:29: UnexposedExpr= Extent=[158:29 - 158:35]
 // CHECK: 158:29: IntegerLiteral= Extent=[158:29 - 158:35]
-// CHECK: 158:39: BinaryOperator= Extent=[158:39 - 158:50]
+// CHECK: 158:39: BinaryOperator=<= Extent=[158:39 - 158:50]
+// CHECK: 158:39: UnexposedExpr=c:2:14 Extent=[158:39 - 158:40]
 // CHECK: 158:39: DeclRefExpr=c:2:14 Extent=[158:39 - 158:40]
 // CHECK: 158:44: UnexposedExpr= Extent=[158:44 - 158:50]
 // CHECK: 158:44: IntegerLiteral= Extent=[158:44 - 158:50]
-// CHECK: 159:9: BinaryOperator= Extent=[159:9 - 159:35]
-// CHECK: 159:9: BinaryOperator= Extent=[159:9 - 159:20]
+// CHECK: 159:8: ParenExpr= Extent=[159:8 - 159:36]
+// CHECK: 159:9: BinaryOperator=&& Extent=[159:9 - 159:35]
+// CHECK: 159:9: BinaryOperator=>= Extent=[159:9 - 159:20]
+// CHECK: 159:9: UnexposedExpr=c:2:14 Extent=[159:9 - 159:10]
 // CHECK: 159:9: DeclRefExpr=c:2:14 Extent=[159:9 - 159:10]
 // CHECK: 159:14: UnexposedExpr= Extent=[159:14 - 159:20]
 // CHECK: 159:14: IntegerLiteral= Extent=[159:14 - 159:20]
-// CHECK: 159:24: BinaryOperator= Extent=[159:24 - 159:35]
+// CHECK: 159:24: BinaryOperator=<= Extent=[159:24 - 159:35]
+// CHECK: 159:24: UnexposedExpr=c:2:14 Extent=[159:24 - 159:25]
 // CHECK: 159:24: DeclRefExpr=c:2:14 Extent=[159:24 - 159:25]
 // CHECK: 159:29: UnexposedExpr= Extent=[159:29 - 159:35]
 // CHECK: 159:29: IntegerLiteral= Extent=[159:29 - 159:35]
-// CHECK: 160:8: BinaryOperator= Extent=[160:8 - 160:19]
+// CHECK: 160:8: BinaryOperator=== Extent=[160:8 - 160:19]
+// CHECK: 160:8: UnexposedExpr=c:2:14 Extent=[160:8 - 160:9]
 // CHECK: 160:8: DeclRefExpr=c:2:14 Extent=[160:8 - 160:9]
 // CHECK: 160:13: UnexposedExpr= Extent=[160:13 - 160:19]
 // CHECK: 160:13: IntegerLiteral= Extent=[160:13 - 160:19]
 // CHECK: 160:23: ParenExpr= Extent=[160:23 - 160:51]
-// CHECK: 160:24: BinaryOperator= Extent=[160:24 - 160:50]
-// CHECK: 160:24: BinaryOperator= Extent=[160:24 - 160:35]
+// CHECK: 160:24: BinaryOperator=&& Extent=[160:24 - 160:50]
+// CHECK: 160:24: BinaryOperator=>= Extent=[160:24 - 160:35]
+// CHECK: 160:24: UnexposedExpr=c:2:14 Extent=[160:24 - 160:25]
 // CHECK: 160:24: DeclRefExpr=c:2:14 Extent=[160:24 - 160:25]
 // CHECK: 160:29: UnexposedExpr= Extent=[160:29 - 160:35]
 // CHECK: 160:29: IntegerLiteral= Extent=[160:29 - 160:35]
-// CHECK: 160:39: BinaryOperator= Extent=[160:39 - 160:50]
+// CHECK: 160:39: BinaryOperator=<= Extent=[160:39 - 160:50]
+// CHECK: 160:39: UnexposedExpr=c:2:14 Extent=[160:39 - 160:40]
 // CHECK: 160:39: DeclRefExpr=c:2:14 Extent=[160:39 - 160:40]
 // CHECK: 160:44: UnexposedExpr= Extent=[160:44 - 160:50]
 // CHECK: 160:44: IntegerLiteral= Extent=[160:44 - 160:50]
-
diff --git a/clang/test/Index/preamble.c b/clang/test/Index/preamble.c
index ae8e1aa6a52cf..08e62ecf449b9 100644
--- a/clang/test/Index/preamble.c
+++ b/clang/test/Index/preamble.c
@@ -14,7 +14,7 @@ void f(int x) {
 // RUN: env CINDEXTEST_EDITING=1 c-index-test -test-load-source-reparse 5 local -I %S/Inputs -include %t %s -Wunused-macros 2> %t.stderr.txt | FileCheck %s
 // RUN: FileCheck -check-prefix CHECK-DIAG %s < %t.stderr.txt
 // CHECK: preamble.h:1:12: FunctionDecl=bar:1:12 (Definition) Extent=[1:1 - 6:2]
-// CHECK: preamble.h:4:3: BinaryOperator= Extent=[4:3 - 4:13]
+// CHECK: preamble.h:4:3: BinaryOperator== Extent=[4:3 - 4:13]
 // CHECK: preamble.h:4:3: DeclRefExpr=ptr:2:8 Extent=[4:3 - 4:6]
 // CHECK: preamble.h:4:9: UnexposedExpr=ptr1:3:10 Extent=[4:9 - 4:13]
 // CHECK: preamble.h:4:9: DeclRefExpr=ptr1:3:10 Extent=[4:9 - 4:13]
diff --git a/clang/test/Index/print-type.c b/clang/test/Index/print-type.c
index 1e5a7248d89cb..7375644f10059 100644
--- a/clang/test/Index/print-type.c
+++ b/clang/test/Index/print-type.c
@@ -51,8 +51,8 @@ _Atomic(unsigned long) aul;
 // CHECK: TypeRef=FooType:1:13 [type=FooType] [typekind=Typedef] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
-// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
+// CHECK: BinaryOperator=+ [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
+// CHECK: BinaryOperator=+ [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclRefExpr=p:3:13 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclRefExpr=z:3:33 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ArraySubscriptExpr= [type=int] [typekind=Int] [isPOD=1]
diff --git a/clang/test/Index/print-type.cpp b/clang/test/Index/print-type.cpp
index 8c3d4c254964a..b64469e921a8d 100644
--- a/clang/test/Index/print-type.cpp
+++ b/clang/test/Index/print-type.cpp
@@ -124,7 +124,7 @@ inline namespace InlineNS {}
 // CHECK: UnexposedExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: DeclRefExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
 // CHECK: ReturnStmt= [type=] [typekind=Invalid] [isPOD=0]
-// CHECK: BinaryOperator= [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
+// CHECK: BinaryOperator=+ [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: UnexposedExpr=p:22:15 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: DeclRefExpr=p:22:15 [type=int *] [typekind=Pointer] [isPOD=1] [pointeetype=int] [pointeekind=Int]
 // CHECK: UnexposedExpr=z:22:35 [type=FooType] [typekind=Elaborated] [canonicaltype=int] [canonicaltypekind=Int] [isPOD=1]
diff --git a/clang/test/Index/recursive-cxx-member-calls.cpp b/clang/test/Index/recursive-cxx-member-calls.cpp
index be908c506e747..11c011a432cd4 100644
--- a/clang/test/Index/recursive-cxx-member-calls.cpp
+++ b/clang/test/Index/recursive-cxx-member-calls.cpp
@@ -21,7 +21,7 @@ namespace       clang {
       AT_noinline, AT_no_instrument_function, AT_nonnull, AT_noreturn,
       AT_nothrow, AT_nsobject, AT_objc_exception, AT_override,
       AT_cf_returns_not_retained, AT_cf_returns_retained,
-      AT_ns_returns_not_retained, AT_ns_returns_retained, AT_objc_gc, 
+      AT_ns_returns_not_retained, AT_ns_returns_retained, AT_objc_gc,
       AT_overloadable, AT_ownership_holds, AT_ownership_returns,
       AT_ownership_takes, AT_packed, AT_pascal, AT_pure, AT_regparm,
       AT_section, AT_sentinel, AT_stdcall, AT_thiscall, AT_transparent_union,
@@ -467,7 +467,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "{" [45:41 - 45:42] CompoundStmt=
 // CHECK-tokens: Keyword: "return" [45:43 - 45:49] ReturnStmt=
 // CHECK-tokens: Identifier: "a" [45:50 - 45:51] DeclRefExpr=a:45:28
-// CHECK-tokens: Punctuation: "<" [45:52 - 45:53] BinaryOperator=
+// CHECK-tokens: Punctuation: "<" [45:52 - 45:53] BinaryOperator=<
 // CHECK-tokens: Identifier: "b" [45:54 - 45:55] DeclRefExpr=b:45:38
 // CHECK-tokens: Punctuation: "?" [45:56 - 45:57] ConditionalOperator=
 // CHECK-tokens: Identifier: "a" [45:58 - 45:59] DeclRefExpr=a:45:28
@@ -566,11 +566,11 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "{" [52:43 - 52:44] CompoundStmt=
 // CHECK-tokens: Keyword: "return" [53:5 - 53:11] ReturnStmt=
 // CHECK-tokens: Identifier: "Length" [53:12 - 53:18] MemberRefExpr=Length:44:10
-// CHECK-tokens: Punctuation: ">=" [53:19 - 53:21] BinaryOperator=
+// CHECK-tokens: Punctuation: ">=" [53:19 - 53:21] BinaryOperator=>=
 // CHECK-tokens: Identifier: "Prefix" [53:22 - 53:28] DeclRefExpr=Prefix:52:29
 // CHECK-tokens: Punctuation: "." [53:28 - 53:29] MemberRefExpr=Length:44:10
 // CHECK-tokens: Identifier: "Length" [53:29 - 53:35] MemberRefExpr=Length:44:10
-// CHECK-tokens: Punctuation: "&&" [53:36 - 53:38] BinaryOperator=
+// CHECK-tokens: Punctuation: "&&" [53:36 - 53:38] BinaryOperator=&&
 // CHECK-tokens: Identifier: "memcmp" [54:11 - 54:17] DeclRefExpr=memcmp:7:7
 // CHECK-tokens: Punctuation: "(" [54:17 - 54:18] CallExpr=memcmp:7:7
 // CHECK-tokens: Identifier: "Data" [54:18 - 54:22]  MemberRefExpr=Data:43:15
@@ -583,7 +583,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "." [54:43 - 54:44] MemberRefExpr=Length:44:10
 // CHECK-tokens: Identifier: "Length" [54:44 - 54:50] MemberRefExpr=Length:44:10
 // CHECK-tokens: Punctuation: ")" [54:50 - 54:51] CallExpr=memcmp:7:7
-// CHECK-tokens: Punctuation: "==" [54:52 - 54:54] BinaryOperator=
+// CHECK-tokens: Punctuation: "==" [54:52 - 54:54] BinaryOperator===
 // CHECK-tokens: Literal: "0" [54:55 - 54:56] IntegerLiteral=
 // CHECK-tokens: Punctuation: ";" [54:56 - 54:57] CompoundStmt=
 // CHECK-tokens: Punctuation: "}" [55:3 - 55:4] CompoundStmt=
@@ -597,17 +597,17 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "{" [56:41 - 56:42] CompoundStmt=
 // CHECK-tokens: Keyword: "return" [57:5 - 57:11] ReturnStmt=
 // CHECK-tokens: Identifier: "Length" [57:12 - 57:18] MemberRefExpr=Length:44:10
-// CHECK-tokens: Punctuation: ">=" [57:19 - 57:21] BinaryOperator=
+// CHECK-tokens: Punctuation: ">=" [57:19 - 57:21] BinaryOperator=>=
 // CHECK-tokens: Identifier: "Suffix" [57:22 - 57:28] DeclRefExpr=Suffix:56:27
 // CHECK-tokens: Punctuation: "." [57:28 - 57:29] MemberRefExpr=Length:44:10
 // CHECK-tokens: Identifier: "Length" [57:29 - 57:35] MemberRefExpr=Length:44:10
-// CHECK-tokens: Punctuation: "&&" [57:36 - 57:38] BinaryOperator=
+// CHECK-tokens: Punctuation: "&&" [57:36 - 57:38] BinaryOperator=&&
 // CHECK-tokens: Identifier: "memcmp" [58:7 - 58:13] DeclRefExpr=memcmp:7:7
 // CHECK-tokens: Punctuation: "(" [58:13 - 58:14] CallExpr=memcmp:7:7
 // CHECK-tokens: Identifier: "end" [58:14 - 58:17] MemberRefExpr=end:50:12
 // CHECK-tokens: Punctuation: "(" [58:17 - 58:18] CallExpr=end:50:12
 // CHECK-tokens: Punctuation: ")" [58:18 - 58:19] CallExpr=end:50:12
-// CHECK-tokens: Punctuation: "-" [58:20 - 58:21] BinaryOperator=
+// CHECK-tokens: Punctuation: "-" [58:20 - 58:21] BinaryOperator=-
 // CHECK-tokens: Identifier: "Suffix" [58:22 - 58:28] DeclRefExpr=Suffix:56:27
 // CHECK-tokens: Punctuation: "." [58:28 - 58:29] MemberRefExpr=Length:44:10
 // CHECK-tokens: Identifier: "Length" [58:29 - 58:35] MemberRefExpr=Length:44:10
@@ -620,7 +620,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "." [58:56 - 58:57] MemberRefExpr=Length:44:10
 // CHECK-tokens: Identifier: "Length" [58:57 - 58:63] MemberRefExpr=Length:44:10
 // CHECK-tokens: Punctuation: ")" [58:63 - 58:64] CallExpr=memcmp:7:7
-// CHECK-tokens: Punctuation: "==" [58:65 - 58:67] BinaryOperator=
+// CHECK-tokens: Punctuation: "==" [58:65 - 58:67] BinaryOperator===
 // CHECK-tokens: Literal: "0" [58:68 - 58:69] IntegerLiteral=
 // CHECK-tokens: Punctuation: ";" [58:69 - 58:70] CompoundStmt=
 // CHECK-tokens: Punctuation: "}" [59:3 - 59:4] CompoundStmt=
@@ -641,7 +641,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Identifier: "StringRef" [61:12 - 61:21] TypeRef=class llvm::StringRef:38:7
 // CHECK-tokens: Punctuation: "(" [61:21 - 61:22] CallExpr=StringRef:49:3
 // CHECK-tokens: Identifier: "Data" [61:22 - 61:26]  MemberRefExpr=Data:43:15
-// CHECK-tokens: Punctuation: "+" [61:27 - 61:28] BinaryOperator=
+// CHECK-tokens: Punctuation: "+" [61:27 - 61:28] BinaryOperator=+
 // CHECK-tokens: Identifier: "Start" [61:29 - 61:34] DeclRefExpr=Start:60:27
 // CHECK-tokens: Punctuation: "," [61:34 - 61:35] CallExpr=StringRef:49:3
 // CHECK-tokens: Identifier: "min" [61:36 - 61:39] DeclRefExpr=min:45:17
@@ -649,7 +649,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Identifier: "N" [61:40 - 61:41] DeclRefExpr=N:60:41
 // CHECK-tokens: Punctuation: "," [61:41 - 61:42] CallExpr=min:45:17
 // CHECK-tokens: Identifier: "Length" [61:43 - 61:49]  MemberRefExpr=Length:44:10
-// CHECK-tokens: Punctuation: "-" [61:50 - 61:51] BinaryOperator=
+// CHECK-tokens: Punctuation: "-" [61:50 - 61:51] BinaryOperator=-
 // CHECK-tokens: Identifier: "Start" [61:52 - 61:57] DeclRefExpr=Start:60:27
 // CHECK-tokens: Punctuation: ")" [61:57 - 61:58] CallExpr=min:45:17
 // CHECK-tokens: Punctuation: ")" [61:58 - 61:59] CallExpr=StringRef:49:3
@@ -738,7 +738,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: ")" [74:47 - 74:48] ParenExpr=
 // CHECK-tokens: Punctuation: "->" [74:48 - 74:50] MemberRefExpr=second:4:55
 // CHECK-tokens: Identifier: "second" [74:50 - 74:56] MemberRefExpr=second:4:55
-// CHECK-tokens: Punctuation: "-" [74:57 - 74:58] BinaryOperator=
+// CHECK-tokens: Punctuation: "-" [74:57 - 74:58] BinaryOperator=-
 // CHECK-tokens: Literal: "2" [74:59 - 74:60] IntegerLiteral=
 // CHECK-tokens: Punctuation: ";" [74:60 - 74:61] DeclStmt=
 // CHECK-tokens: Keyword: "return" [75:5 - 75:11] ReturnStmt=
@@ -752,7 +752,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Literal: "0" [75:27 - 75:28] IntegerLiteral=
 // CHECK-tokens: Punctuation: "]" [75:28 - 75:29] ArraySubscriptExpr=
 // CHECK-tokens: Punctuation: ")" [75:29 - 75:30] ParenExpr=
-// CHECK-tokens: Punctuation: "|" [75:31 - 75:32] BinaryOperator=
+// CHECK-tokens: Punctuation: "|" [75:31 - 75:32] BinaryOperator=|
 // CHECK-tokens: Punctuation: "(" [75:33 - 75:34] ParenExpr=
 // CHECK-tokens: Punctuation: "(" [75:34 - 75:35] ParenExpr=
 // CHECK-tokens: Punctuation: "(" [75:35 - 75:36] CStyleCastExpr=
@@ -763,11 +763,11 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Literal: "1" [75:48 - 75:49] IntegerLiteral=
 // CHECK-tokens: Punctuation: "]" [75:49 - 75:50] ArraySubscriptExpr=
 // CHECK-tokens: Punctuation: ")" [75:50 - 75:51] ParenExpr=
-// CHECK-tokens: Punctuation: "<<" [75:52 - 75:54] BinaryOperator=
+// CHECK-tokens: Punctuation: "<<" [75:52 - 75:54] BinaryOperator=<<
 // CHECK-tokens: Literal: "8" [75:55 - 75:56] IntegerLiteral=
 // CHECK-tokens: Punctuation: ")" [75:56 - 75:57] ParenExpr=
 // CHECK-tokens: Punctuation: ")" [75:57 - 75:58] ParenExpr=
-// CHECK-tokens: Punctuation: "-" [75:59 - 75:60] BinaryOperator=
+// CHECK-tokens: Punctuation: "-" [75:59 - 75:60] BinaryOperator=-
 // CHECK-tokens: Literal: "1" [75:61 - 75:62] IntegerLiteral=
 // CHECK-tokens: Punctuation: ";" [75:62 - 75:63] CompoundStmt=
 // CHECK-tokens: Punctuation: "}" [76:3 - 76:4] CompoundStmt=
@@ -924,7 +924,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Punctuation: "(" [102:26 - 102:27] CallExpr=startswith:52:8
 // CHECK-tokens: Literal: ""__"" [102:27 - 102:31] StringLiteral=
 // CHECK-tokens: Punctuation: ")" [102:31 - 102:32] CallExpr=startswith:52:8
-// CHECK-tokens: Punctuation: "&&" [102:33 - 102:35] BinaryOperator=
+// CHECK-tokens: Punctuation: "&&" [102:33 - 102:35] BinaryOperator=&&
 // CHECK-tokens: Identifier: "AttrName" [102:36 - 102:44] DeclRefExpr=AttrName:101:19
 // CHECK-tokens: Punctuation: "." [102:44 - 102:45] MemberRefExpr=endswith:56:8
 // CHECK-tokens: Identifier: "endswith" [102:45 - 102:53] MemberRefExpr=endswith:56:8
@@ -945,7 +945,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK-tokens: Identifier: "size" [103:44 - 103:48] MemberRefExpr=size:51:10
 // CHECK-tokens: Punctuation: "(" [103:48 - 103:49] CallExpr=size:51:10
 // CHECK-tokens: Punctuation: ")" [103:49 - 103:50] CallExpr=size:51:10
-// CHECK-tokens: Punctuation: "-" [103:51 - 103:52] BinaryOperator=
+// CHECK-tokens: Punctuation: "-" [103:51 - 103:52] BinaryOperator=-
 // CHECK-tokens: Literal: "4" [103:53 - 103:54] IntegerLiteral=
 // CHECK-tokens: Punctuation: ")" [103:54 - 103:55] CallExpr=substr:60:13
 // CHECK-tokens: Punctuation: ";" [103:55 - 103:56] CompoundStmt=
@@ -1647,7 +1647,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 45:41: CompoundStmt= Extent=[45:41 - 45:66]
 // CHECK: 45:43: ReturnStmt= Extent=[45:43 - 45:63]
 // CHECK: 45:50: ConditionalOperator= Extent=[45:50 - 45:63]
-// CHECK: 45:50: BinaryOperator= Extent=[45:50 - 45:55]
+// CHECK: 45:50: BinaryOperator=< Extent=[45:50 - 45:55]
 // CHECK: 45:50: DeclRefExpr=a:45:28 Extent=[45:50 - 45:51]
 // CHECK: 45:54: DeclRefExpr=b:45:38 Extent=[45:54 - 45:55]
 // CHECK: 45:58: DeclRefExpr=a:45:28 Extent=[45:58 - 45:59]
@@ -1695,13 +1695,13 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 52:19: TypeRef=class llvm::StringRef:38:7 Extent=[52:19 - 52:28]
 // CHECK: 52:43: CompoundStmt= Extent=[52:43 - 55:4]
 // CHECK: 53:5: ReturnStmt= Extent=[53:5 - 54:56]
-// CHECK: 53:12: BinaryOperator= Extent=[53:12 - 54:56]
-// CHECK: 53:12: BinaryOperator= Extent=[53:12 - 53:35]
+// CHECK: 53:12: BinaryOperator=&& Extent=[53:12 - 54:56]
+// CHECK: 53:12: BinaryOperator=>= Extent=[53:12 - 53:35]
 // CHECK: 53:12: UnexposedExpr=Length:44:10 Extent=[53:12 - 53:18]
 // CHECK: 53:12: MemberRefExpr=Length:44:10 Extent=[53:12 - 53:18]
 // CHECK: 53:29: MemberRefExpr=Length:44:10 SingleRefName=[53:29 - 53:35] RefName=[53:29 - 53:35] Extent=[53:22 - 53:35]
 // CHECK: 53:22: DeclRefExpr=Prefix:52:29 Extent=[53:22 - 53:28]
-// CHECK: 54:11: BinaryOperator= Extent=[54:11 - 54:56]
+// CHECK: 54:11: BinaryOperator=== Extent=[54:11 - 54:56]
 // CHECK: 54:11: CallExpr=memcmp:7:7 Extent=[54:11 - 54:51]
 // CHECK: 54:11: UnexposedExpr=memcmp:7:7 Extent=[54:11 - 54:17]
 // CHECK: 54:11: DeclRefExpr=memcmp:7:7 Extent=[54:11 - 54:17]
@@ -1718,18 +1718,18 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 56:17: TypeRef=class llvm::StringRef:38:7 Extent=[56:17 - 56:26]
 // CHECK: 56:41: CompoundStmt= Extent=[56:41 - 59:4]
 // CHECK: 57:5: ReturnStmt= Extent=[57:5 - 58:69]
-// CHECK: 57:12: BinaryOperator= Extent=[57:12 - 58:69]
-// CHECK: 57:12: BinaryOperator= Extent=[57:12 - 57:35]
+// CHECK: 57:12: BinaryOperator=&& Extent=[57:12 - 58:69]
+// CHECK: 57:12: BinaryOperator=>= Extent=[57:12 - 57:35]
 // CHECK: 57:12: UnexposedExpr=Length:44:10 Extent=[57:12 - 57:18]
 // CHECK: 57:12: MemberRefExpr=Length:44:10 Extent=[57:12 - 57:18]
 // CHECK: 57:29: MemberRefExpr=Length:44:10 SingleRefName=[57:29 - 57:35] RefName=[57:29 - 57:35] Extent=[57:22 - 57:35]
 // CHECK: 57:22: DeclRefExpr=Suffix:56:27 Extent=[57:22 - 57:28]
-// CHECK: 58:7: BinaryOperator= Extent=[58:7 - 58:69]
+// CHECK: 58:7: BinaryOperator=== Extent=[58:7 - 58:69]
 // CHECK: 58:7: CallExpr=memcmp:7:7 Extent=[58:7 - 58:64]
 // CHECK: 58:7: UnexposedExpr=memcmp:7:7 Extent=[58:7 - 58:13]
 // CHECK: 58:7: DeclRefExpr=memcmp:7:7 Extent=[58:7 - 58:13]
 // CHECK: 58:14: UnexposedExpr= Extent=[58:14 - 58:35]
-// CHECK: 58:14: BinaryOperator= Extent=[58:14 - 58:35]
+// CHECK: 58:14: BinaryOperator=- Extent=[58:14 - 58:35]
 // CHECK: 58:14: CallExpr=end:50:12 Extent=[58:14 - 58:19]
 // CHECK: 58:14: MemberRefExpr=end:50:12 Extent=[58:14 - 58:17]
 // CHECK: 58:29: MemberRefExpr=Length:44:10 SingleRefName=[58:29 - 58:35] RefName=[58:29 - 58:35] Extent=[58:22 - 58:35]
@@ -1753,7 +1753,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 61:12: UnexposedExpr=StringRef:49:3 Extent=[61:12 - 61:59]
 // CHECK: 61:12: CallExpr=StringRef:49:3 Extent=[61:12 - 61:59]
 // CHECK: 61:12: TypeRef=class llvm::StringRef:38:7 Extent=[61:12 - 61:21]
-// CHECK: 61:22: BinaryOperator= Extent=[61:22 - 61:34]
+// CHECK: 61:22: BinaryOperator=+ Extent=[61:22 - 61:34]
 // CHECK: 61:22: UnexposedExpr=Data:43:15 Extent=[61:22 - 61:26]
 // CHECK: 61:22: MemberRefExpr=Data:43:15 Extent=[61:22 - 61:26]
 // CHECK: 61:29: DeclRefExpr=Start:60:27 Extent=[61:29 - 61:34]
@@ -1761,7 +1761,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 61:36: UnexposedExpr=min:45:17 Extent=[61:36 - 61:39]
 // CHECK: 61:36: DeclRefExpr=min:45:17 Extent=[61:36 - 61:39]
 // CHECK: 61:40: DeclRefExpr=N:60:41 Extent=[61:40 - 61:41]
-// CHECK: 61:43: BinaryOperator= Extent=[61:43 - 61:57]
+// CHECK: 61:43: BinaryOperator=- Extent=[61:43 - 61:57]
 // CHECK: 61:43: UnexposedExpr=Length:44:10 Extent=[61:43 - 61:49]
 // CHECK: 61:43: MemberRefExpr=Length:44:10 Extent=[61:43 - 61:49]
 // CHECK: 61:52: DeclRefExpr=Start:60:27 Extent=[61:52 - 61:57]
@@ -1789,7 +1789,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 73:25: TypeRef=class clang::IdentifierInfo:66:7 Extent=[73:25 - 73:39]
 // CHECK: 74:5: DeclStmt= Extent=[74:5 - 74:61]
 // CHECK: 74:17: VarDecl=p:74:17 (Definition) Extent=[74:5 - 74:60]
-// CHECK: 74:21: BinaryOperator= Extent=[74:21 - 74:60]
+// CHECK: 74:21: BinaryOperator=- Extent=[74:21 - 74:60]
 // CHECK: 74:50: UnexposedExpr=second:4:55 Extent=[74:21 - 74:56]
 // CHECK: 74:50: MemberRefExpr=second:4:55 SingleRefName=[74:50 - 74:56] RefName=[74:50 - 74:56] Extent=[74:21 - 74:56]
 // CHECK: 74:21: ParenExpr= Extent=[74:21 - 74:48]
@@ -1798,9 +1798,9 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 74:43: CXXThisExpr= Extent=[74:43 - 74:47]
 // CHECK: 74:59: IntegerLiteral= Extent=[74:59 - 74:60]
 // CHECK: 75:5: ReturnStmt= Extent=[75:5 - 75:62]
-// CHECK: 75:12: BinaryOperator= Extent=[75:12 - 75:62]
+// CHECK: 75:12: BinaryOperator=- Extent=[75:12 - 75:62]
 // CHECK: 75:12: ParenExpr= Extent=[75:12 - 75:58]
-// CHECK: 75:13: BinaryOperator= Extent=[75:13 - 75:57]
+// CHECK: 75:13: BinaryOperator=| Extent=[75:13 - 75:57]
 // CHECK: 75:13: ParenExpr= Extent=[75:13 - 75:30]
 // CHECK: 75:14: CStyleCastExpr= Extent=[75:14 - 75:29]
 // CHECK: 75:25: UnexposedExpr= Extent=[75:25 - 75:29]
@@ -1809,7 +1809,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 75:25: DeclRefExpr=p:74:17 Extent=[75:25 - 75:26]
 // CHECK: 75:27: IntegerLiteral= Extent=[75:27 - 75:28]
 // CHECK: 75:33: ParenExpr= Extent=[75:33 - 75:57]
-// CHECK: 75:34: BinaryOperator= Extent=[75:34 - 75:56]
+// CHECK: 75:34: BinaryOperator=<< Extent=[75:34 - 75:56]
 // CHECK: 75:34: ParenExpr= Extent=[75:34 - 75:51]
 // CHECK: 75:35: CStyleCastExpr= Extent=[75:35 - 75:50]
 // CHECK: 75:46: UnexposedExpr= Extent=[75:46 - 75:50]
@@ -1878,7 +1878,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 101:36: MemberRefExpr=getName:77:19 SingleRefName=[101:36 - 101:43] RefName=[101:36 - 101:43] Extent=[101:30 - 101:43]
 // CHECK: 101:30: DeclRefExpr=Name:100:67 Extent=[101:30 - 101:34]
 // CHECK: 102:3: IfStmt= Extent=[102:3 - 103:55]
-// CHECK: 102:7: BinaryOperator= Extent=[102:7 - 102:59]
+// CHECK: 102:7: BinaryOperator=&& Extent=[102:7 - 102:59]
 // CHECK: 102:7: CallExpr=startswith:52:8 Extent=[102:7 - 102:32]
 // CHECK: 102:16: MemberRefExpr=startswith:52:8 SingleRefName=[102:16 - 102:26] RefName=[102:16 - 102:26] Extent=[102:7 - 102:26]
 // CHECK: 102:7: UnexposedExpr=AttrName:101:19 Extent=[102:7 - 102:15]
@@ -1910,7 +1910,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
 // CHECK: 103:16: DeclRefExpr=AttrName:101:19 Extent=[103:16 - 103:24]
 // CHECK: 103:32: UnexposedExpr= Extent=[103:32 - 103:33]
 // CHECK: 103:32: IntegerLiteral= Extent=[103:32 - 103:33]
-// CHECK: 103:35: BinaryOperator= Extent=[103:35 - 103:54]
+// CHECK: 103:35: BinaryOperator=- Extent=[103:35 - 103:54]
 // CHECK: 103:35: CallExpr=size:51:10 Extent=[103:35 - 103:50]
 // CHECK: 103:44: MemberRefExpr=size:51:10 SingleRefName=[103:44 - 103:48] RefName=[103:44 - 103:48] Extent=[103:35 - 103:48]
 // CHECK: 103:35: UnexposedExpr=AttrName:101:19 Extent=[103:35 - 103:43]
diff --git a/clang/test/Index/remap-load.c b/clang/test/Index/remap-load.c
index f886cea7da754..581095a52471b 100644
--- a/clang/test/Index/remap-load.c
+++ b/clang/test/Index/remap-load.c
@@ -4,7 +4,7 @@
 // CHECK: remap-load.c:1:13: ParmDecl=parm1:1:13 (Definition) Extent=[1:9 - 1:18]
 // CHECK: remap-load.c:1:26: ParmDecl=parm2:1:26 (Definition) Extent=[1:20 - 1:31]
 // CHECK: remap-load.c:2:10: UnexposedExpr= Extent=[2:10 - 2:23]
-// CHECK: remap-load.c:2:10: BinaryOperator= Extent=[2:10 - 2:23]
+// CHECK: remap-load.c:2:10: BinaryOperator=+ Extent=[2:10 - 2:23]
 // CHECK: remap-load.c:2:10: UnexposedExpr=parm1:1:13 Extent=[2:10 - 2:15]
 // CHECK: remap-load.c:2:10: DeclRefExpr=parm1:1:13 Extent=[2:10 - 2:15]
 // CHECK: remap-load.c:2:18: DeclRefExpr=parm2:1:26 Extent=[2:18 - 2:23]
diff --git a/clang/test/Index/usrs.m b/clang/test/Index/usrs.m
index 9a1407ce51894..2114b71e67607 100644
--- a/clang/test/Index/usrs.m
+++ b/clang/test/Index/usrs.m
@@ -182,7 +182,7 @@ -(int)methodWithFn:(void (*)(int *p))fn;
 // CHECK-source: usrs.m:3:40: ParmDecl=y:3:40 (Definition) Extent=[3:36 - 3:41]
 // CHECK-source: usrs.m:3:43: CompoundStmt= Extent=[3:43 - 3:60]
 // CHECK-source: usrs.m:3:45: ReturnStmt= Extent=[3:45 - 3:57]
-// CHECK-source: usrs.m:3:52: BinaryOperator= Extent=[3:52 - 3:57]
+// CHECK-source: usrs.m:3:52: BinaryOperator=+ Extent=[3:52 - 3:57]
 // CHECK-source: usrs.m:3:52: DeclRefExpr=x:3:33 Extent=[3:52 - 3:53]
 // CHECK-source: usrs.m:3:56: DeclRefExpr=y:3:40 Extent=[3:56 - 3:57]
 // CHECK-source: usrs.m:5:1: EnumDecl=enum (unnamed at {{.*}}):5:1 (Definition) Extent=[5:1 - 8:2]
diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c
index e078e9bdce027..46016c115b999 100644
--- a/clang/tools/c-index-test/c-index-test.c
+++ b/clang/tools/c-index-test/c-index-test.c
@@ -1840,6 +1840,22 @@ static enum CXChildVisitResult PrintTypeSize(CXCursor cursor, CXCursor p,
   return CXChildVisit_Recurse;
 }
 
+static enum CXChildVisitResult PrintBinOps(CXCursor C, CXCursor p,
+                                           CXClientData d) {
+  enum CXCursorKind ck = clang_getCursorKind(C);
+  enum CX_BinaryOperatorKind bok;
+  CXString opstr;
+  if (ck != CXCursor_BinaryOperator && ck != CXCursor_CompoundAssignOperator)
+    return CXChildVisit_Recurse;
+
+  PrintCursor(C, NULL);
+  bok = clang_Cursor_getBinaryOpcode(C);
+  opstr = clang_Cursor_getBinaryOpcodeStr(bok);
+  printf(" BinOp=%s %d\n", clang_getCString(opstr), bok);
+
+  return CXChildVisit_Recurse;
+}
+
 /******************************************************************************/
 /* Mangling testing.                                                          */
 /******************************************************************************/
@@ -5098,6 +5114,8 @@ int cindextest_main(int argc, const char **argv) {
   else if (argc > 2 && strcmp(argv[1], "-test-print-bitwidth") == 0)
     return perform_test_load_source(argc - 2, argv + 2, "all",
                                     PrintBitWidth, 0);
+  else if (argc > 2 && strcmp(argv[1], "-test-print-binops") == 0)
+    return perform_test_load_source(argc - 2, argv + 2, "all", PrintBinOps, 0);
   else if (argc > 2 && strcmp(argv[1], "-test-print-mangle") == 0)
     return perform_test_load_tu(argv[2], "all", NULL, PrintMangledName, NULL);
   else if (argc > 2 && strcmp(argv[1], "-test-print-manglings") == 0)
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp
index 35312e3d2ae70..a301e06ae4f24 100644
--- a/clang/tools/libclang/CIndex.cpp
+++ b/clang/tools/libclang/CIndex.cpp
@@ -5225,6 +5225,11 @@ CXString clang_getCursorSpelling(CXCursor C) {
       return cxstring::createDup(OS.str());
     }
 
+    if (C.kind == CXCursor_BinaryOperator ||
+        C.kind == CXCursor_CompoundAssignOperator) {
+      return clang_Cursor_getBinaryOpcodeStr(clang_Cursor_getBinaryOpcode(C));
+    }
+
     const Decl *D = getDeclFromExpr(getCursorExpr(C));
     if (D)
       return getDeclSpelling(D);
@@ -8955,6 +8960,36 @@ unsigned clang_Cursor_isExternalSymbol(CXCursor C, CXString *language,
   return 0;
 }
 
+enum CX_BinaryOperatorKind clang_Cursor_getBinaryOpcode(CXCursor C) {
+  if (C.kind != CXCursor_BinaryOperator &&
+      C.kind != CXCursor_CompoundAssignOperator) {
+    return CX_BO_Invalid;
+  }
+
+  const Expr *D = getCursorExpr(C);
+  if (const auto *BinOp = dyn_cast<BinaryOperator>(D)) {
+    switch (BinOp->getOpcode()) {
+    default:
+      return CX_BO_Invalid;
+#define BINARY_OPERATION(Name, Spelling)                                       \
+  case BO_##Name:                                                              \
+    return CX_BO_##Name;
+#include "clang/AST/OperationKinds.def"
+    }
+  }
+
+  return CX_BO_Invalid;
+}
+
+CXString clang_Cursor_getBinaryOpcodeStr(enum CX_BinaryOperatorKind Op) {
+  if (Op > CX_BO_LAST)
+    return cxstring::createEmpty();
+
+  return cxstring::createDup(
+      // BinaryOperator::getOpcodeStr has no case for CX_BO_Invalid, so subtract 1
+      BinaryOperator::getOpcodeStr(static_cast<BinaryOperatorKind>(Op - 1)));
+}
+
 CXSourceRange clang_Cursor_getCommentRange(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
     return clang_getNullRange();
diff --git a/clang/tools/libclang/libclang.map b/clang/tools/libclang/libclang.map
index 5676198a286d9..91c329b5765d4 100644
--- a/clang/tools/libclang/libclang.map
+++ b/clang/tools/libclang/libclang.map
@@ -54,6 +54,8 @@ LLVM_13 {
     clang_Cursor_Evaluate;
     clang_Cursor_getArgument;
     clang_Cursor_getBriefCommentText;
+    clang_Cursor_getBinaryOpcode;
+    clang_Cursor_getBinaryOpcodeStr;
     clang_Cursor_getCXXManglings;
     clang_Cursor_getCommentRange;
     clang_Cursor_getMangling;



More information about the cfe-commits mailing list