aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang-c/Index.h47
-rw-r--r--lib/Sema/SemaCodeComplete.cpp2
-rw-r--r--test/Index/blocks.c2
-rw-r--r--test/Index/cursor-ref-names.cpp47
-rw-r--r--test/Index/index-templates.cpp4
-rw-r--r--test/Index/recursive-cxx-member-calls.cpp188
-rw-r--r--test/Index/recursive-member-access.c236
-rw-r--r--tools/c-index-test/c-index-test.c51
-rw-r--r--tools/libclang/CIndex.cpp88
-rw-r--r--tools/libclang/libclang.darwin.exports1
-rw-r--r--tools/libclang/libclang.exports1
11 files changed, 439 insertions, 228 deletions
diff --git a/include/clang-c/Index.h b/include/clang-c/Index.h
index 88aaa385b9..8d35419a43 100644
--- a/include/clang-c/Index.h
+++ b/include/clang-c/Index.h
@@ -2385,6 +2385,53 @@ CINDEX_LINKAGE enum CXCursorKind clang_getTemplateCursorKind(CXCursor C);
* from which it was instantiated. Otherwise, returns a NULL cursor.
*/
CINDEX_LINKAGE CXCursor clang_getSpecializedCursorTemplate(CXCursor C);
+
+/**
+ * \brief Given a cursor that references something else, return the source range
+ * covering that reference.
+ *
+ * \param C A cursor pointing to a member reference, a declaration reference, or
+ * an operator call.
+ * \param NameFlags A bitset with three independent flags:
+ * CXNameRange_WantQualifier, CXNameRange_WantTemplateArgs, and
+ * CXNameRange_WantSinglePiece.
+ * \param PieceIndex For contiguous names or when passing the flag
+ * CXNameRange_WantSinglePiece, only one piece with index 0 is
+ * available. When the CXNameRange_WantSinglePiece flag is not passed for a
+ * non-contiguous names, this index can be used to retreive the individual
+ * pieces of the name. See also CXNameRange_WantSinglePiece.
+ *
+ * \returns The piece of the name pointed to by the given cursor. If there is no
+ * name, or if the PieceIndex is out-of-range, a null-cursor will be returned.
+ */
+CXSourceRange clang_getCursorReferenceNameRange(CXCursor C, unsigned NameFlags,
+ unsigned PieceIndex);
+
+enum CXNameRefFlags {
+ /**
+ * \brief Include the nested-name-specifier, e.g. Foo:: in x.Foo::y, in the
+ * range.
+ */
+ CXNameRange_WantQualifier = 0x1,
+
+ /**
+ * \brief Include the explicit template arguments, e.g. <int> in x.f<int>, in
+ * the range.
+ */
+ CXNameRange_WantTemplateArgs = 0x2,
+
+ /**
+ * \brief If the name is non-contiguous, return the full spanning range.
+ *
+ * Non-contiguous names occur in Objective-C when a selector with two or more
+ * parameters is used, or in C++ when using an operator:
+ * \code
+ * [object doSomething:here withValue:there]; // ObjC
+ * return some_vector[1]; // C++
+ * \endcode
+ */
+ CXNameRange_WantSinglePiece = 0x4
+};
/**
* @}
diff --git a/lib/Sema/SemaCodeComplete.cpp b/lib/Sema/SemaCodeComplete.cpp
index b8d64ba39b..a60fafe29c 100644
--- a/lib/Sema/SemaCodeComplete.cpp
+++ b/lib/Sema/SemaCodeComplete.cpp
@@ -3706,7 +3706,7 @@ void Sema::CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
LookupVisibleDecls(Ctx, LookupOrdinaryName, Consumer);
HandleCodeCompleteResults(this, CodeCompleter,
- CodeCompletionContext::CCC_Name,
+ Results.getCompletionContext(),
Results.data(),Results.size());
}
diff --git a/test/Index/blocks.c b/test/Index/blocks.c
index 633e171ffa..a68cfebf49 100644
--- a/test/Index/blocks.c
+++ b/test/Index/blocks.c
@@ -26,7 +26,7 @@ void test() {
// CHECK: blocks.c:9:37: UnexposedExpr= Extent=[9:37 - 9:55]
// CHECK: blocks.c:9:37: UnexposedExpr=x:4:19 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 Extent=[9:45 - 9:51]
+// CHECK: blocks.c:9:50: MemberRefExpr=x:4:19 SingleRefName=[9:50 - 9:51] RefName=[9:50 - 9:51] Extent=[9:45 - 9:51]
// CHECK: blocks.c:9:45: DeclRefExpr=foo:9:23 Extent=[9:45 - 9:48]
// CHECK: blocks.c:9:54: DeclRefExpr=i:8:11 Extent=[9:54 - 9:55]
// CHECK: blocks.c:9:59: UnexposedExpr= Extent=[9:59 - 9:64]
diff --git a/test/Index/cursor-ref-names.cpp b/test/Index/cursor-ref-names.cpp
new file mode 100644
index 0000000000..fffc05b59e
--- /dev/null
+++ b/test/Index/cursor-ref-names.cpp
@@ -0,0 +1,47 @@
+template <typename T>
+struct Base {
+ void func();
+ int operator[](T);
+};
+
+struct Sub: public Base<int> {
+ void func();
+};
+
+template <typename T>
+inline T myMax(T a, T b)
+{ return (a > b) ? a : b; }
+
+int main()
+{
+ Sub inst;
+ inst.func();
+ inst[1];
+ inst.operator[](1);
+
+ inst.Base<int>::operator[](1);
+ myMax<int>(1, 2);
+
+ return 0;
+}
+
+// RUN: c-index-test -test-load-source all %s | FileCheck %s
+// CHECK: cursor-ref-names.cpp:17:5: UnexposedStmt= Extent=[17:5 - 17:14]
+// CHECK: cursor-ref-names.cpp:17:9: VarDecl=inst:17:9 (Definition) Extent=[17:5 - 17:13]
+// CHECK: cursor-ref-names.cpp:17:5: TypeRef=struct Sub:7:8 Extent=[17:5 - 17:8]
+// CHECK: cursor-ref-names.cpp:17:9: CallExpr=Sub:7:8 Extent=[17:9 - 17:13]
+// CHECK: cursor-ref-names.cpp:18:5: CallExpr=func:8:10 Extent=[18:5 - 18:16]
+// CHECK: cursor-ref-names.cpp:18:10: MemberRefExpr=func:8:10 SingleRefName=[18:10 - 18:14] RefName=[18:10 - 18:14] Extent=[18:5 - 18:14]
+// CHECK: cursor-ref-names.cpp:18:5: DeclRefExpr=inst:17:9 Extent=[18:5 - 18:9]
+// CHECK: cursor-ref-names.cpp:19:5: CallExpr=operator[]:4:9 SingleRefName=[19:9 - 19:12] RefName=[19:9 - 19:10] RefName=[19:11 - 19:12] Extent=[19:5 - 19:12]
+// CHECK: cursor-ref-names.cpp:19:5: DeclRefExpr=inst:17:9 Extent=[19:5 - 19:9]
+// CHECK: cursor-ref-names.cpp:19:9: DeclRefExpr=operator[]:4:9 RefName=[19:9 - 19:10] RefName=[19:11 - 19:12] Extent=[19:9 - 19:12]
+// CHECK: cursor-ref-names.cpp:20:5: CallExpr=operator[]:4:9 Extent=[20:5 - 20:23]
+// CHECK: cursor-ref-names.cpp:20:10: MemberRefExpr=operator[]:4:9 SingleRefName=[20:10 - 20:20] RefName=[20:10 - 20:18] RefName=[20:18 - 20:19] RefName=[20:19 - 20:20] Extent=[20:5 - 20:20]
+// CHECK: cursor-ref-names.cpp:20:5: DeclRefExpr=inst:17:9 Extent=[20:5 - 20:9]
+// CHECK: cursor-ref-names.cpp:22:5: CallExpr=operator[]:4:9 Extent=[22:5 - 22:34]
+// CHECK: cursor-ref-names.cpp:22:21: MemberRefExpr=operator[]:4:9 SingleRefName=[22:10 - 22:31] RefName=[22:10 - 22:21] RefName=[22:21 - 22:29] RefName=[22:29 - 22:30] RefName=[22:30 - 22:31] Extent=[22:5 - 22:31]
+// CHECK: cursor-ref-names.cpp:22:5: DeclRefExpr=inst:17:9 Extent=[22:5 - 22:9]
+// CHECK: cursor-ref-names.cpp:22:10: TemplateRef=Base:2:8 Extent=[22:10 - 22:14]
+// CHECK: cursor-ref-names.cpp:23:5: CallExpr=myMax:12:10 Extent=[23:5 - 23:21]
+// CHECK: cursor-ref-names.cpp:23:5: DeclRefExpr=myMax:12:10 RefName=[23:5 - 23:10] RefName=[23:10 - 23:15] Extent=[23:5 - 23:15]
diff --git a/test/Index/index-templates.cpp b/test/Index/index-templates.cpp
index abc95545c5..f6040da59c 100644
--- a/test/Index/index-templates.cpp
+++ b/test/Index/index-templates.cpp
@@ -157,11 +157,11 @@ struct SuperPair : Pair<int, int>, Pair<T, U> { };
// CHECK-LOAD: index-templates.cpp:53:6: FunctionDecl=template_exprs:53:6 (Definition)
// CHECK-LOAD: index-templates.cpp:54:3: CallExpr=f:4:6 Extent=[54:3 - 54:68]
// CHECK-LOAD: index-templates.cpp:54:3: UnexposedExpr=f:4:6 Extent=[54:3 - 54:35]
-// CHECK-LOAD: index-templates.cpp:54:3: DeclRefExpr=f:4:6 Extent=[54:3 - 54:35]
+// CHECK-LOAD: index-templates.cpp:54:3: DeclRefExpr=f:4:6 RefName=[54:3 - 54:4] RefName=[54:4 - 54:35] Extent=[54:3 - 54:35]
// CHECK-LOAD: index-templates.cpp:54:5: TypeRef=Unsigned:42:18 Extent=[54:5 - 54:13]
// CHECK-LOAD: index-templates.cpp:54:15: DeclRefExpr=OneDimension:35:16 Extent=[54:15 - 54:27]
// CHECK-LOAD: index-templates.cpp:54:29: TemplateRef=array:37:8 Extent=[54:29 - 54:34]
-// CHECK-LOAD: index-templates.cpp:55:8: MemberRefExpr=getAs:50:26 Extent=[55:3 - 55:23]
+// CHECK-LOAD: index-templates.cpp:55:8: MemberRefExpr=getAs:50:26 SingleRefName=[55:8 - 55:13] RefName=[55:8 - 55:13] Extent=[55:3 - 55:23]
// CHECK-LOAD: index-templates.cpp:55:3: CallExpr=Z4:49:8 Extent=[55:3 - 55:7]
// CHECK-LOAD: index-templates.cpp:55:14: TypeRef=Unsigned:42:18 Extent=[55:14 - 55:22]
// CHECK-LOAD: index-templates.cpp:68:6: FunctionTemplate=unresolved_exprs:68:6 (Definition)
diff --git a/test/Index/recursive-cxx-member-calls.cpp b/test/Index/recursive-cxx-member-calls.cpp
index 4c24083efd..7502c8f47b 100644
--- a/test/Index/recursive-cxx-member-calls.cpp
+++ b/test/Index/recursive-cxx-member-calls.cpp
@@ -1699,7 +1699,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 53:12: UnexposedExpr= 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 Extent=[53:22 - 53:35]
+// 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: UnexposedExpr= Extent=[54:11 - 54:56]
// CHECK: 54:11: CallExpr=memcmp:7:7 Extent=[54:11 - 54:51]
@@ -1708,9 +1708,9 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 54:18: UnexposedExpr=Data:43:15 Extent=[54:18 - 54:22]
// CHECK: 54:18: MemberRefExpr=Data:43:15 Extent=[54:18 - 54:22]
// CHECK: 54:24: UnexposedExpr=Data:43:15 Extent=[54:24 - 54:35]
-// CHECK: 54:31: MemberRefExpr=Data:43:15 Extent=[54:24 - 54:35]
+// CHECK: 54:31: MemberRefExpr=Data:43:15 SingleRefName=[54:31 - 54:35] RefName=[54:31 - 54:35] Extent=[54:24 - 54:35]
// CHECK: 54:24: DeclRefExpr=Prefix:52:29 Extent=[54:24 - 54:30]
-// CHECK: 54:44: MemberRefExpr=Length:44:10 Extent=[54:37 - 54:50]
+// CHECK: 54:44: MemberRefExpr=Length:44:10 SingleRefName=[54:44 - 54:50] RefName=[54:44 - 54:50] Extent=[54:37 - 54:50]
// CHECK: 54:37: DeclRefExpr=Prefix:52:29 Extent=[54:37 - 54:43]
// CHECK: 54:55: UnexposedExpr= Extent=[54:55 - 54:56]
// CHECK: 56:8: CXXMethod=endswith:56:8 (Definition) Extent=[56:3 - 59:4]
@@ -1722,7 +1722,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 57:12: UnexposedExpr= 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 Extent=[57:22 - 57:35]
+// 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: UnexposedExpr= Extent=[58:7 - 58:69]
// CHECK: 58:7: CallExpr=memcmp:7:7 Extent=[58:7 - 58:64]
@@ -1732,12 +1732,12 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 58:14: UnexposedExpr= 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 Extent=[58:22 - 58:35]
+// CHECK: 58:29: MemberRefExpr=Length:44:10 SingleRefName=[58:29 - 58:35] RefName=[58:29 - 58:35] Extent=[58:22 - 58:35]
// CHECK: 58:22: DeclRefExpr=Suffix:56:27 Extent=[58:22 - 58:28]
// CHECK: 58:37: UnexposedExpr=Data:43:15 Extent=[58:37 - 58:48]
-// CHECK: 58:44: MemberRefExpr=Data:43:15 Extent=[58:37 - 58:48]
+// CHECK: 58:44: MemberRefExpr=Data:43:15 SingleRefName=[58:44 - 58:48] RefName=[58:44 - 58:48] Extent=[58:37 - 58:48]
// CHECK: 58:37: DeclRefExpr=Suffix:56:27 Extent=[58:37 - 58:43]
-// CHECK: 58:57: MemberRefExpr=Length:44:10 Extent=[58:50 - 58:63]
+// CHECK: 58:57: MemberRefExpr=Length:44:10 SingleRefName=[58:57 - 58:63] RefName=[58:57 - 58:63] Extent=[58:50 - 58:63]
// CHECK: 58:50: DeclRefExpr=Suffix:56:27 Extent=[58:50 - 58:56]
// CHECK: 58:68: UnexposedExpr= Extent=[58:68 - 58:69]
// CHECK: 60:13: CXXMethod=substr:60:13 (Definition) Extent=[60:3 - 62:4]
@@ -1776,7 +1776,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 69:18: TemplateRef=pair:4:44 Extent=[69:18 - 69:22]
// CHECK: 69:25: TypeRef=class clang::IdentifierInfo:66:7 Extent=[69:25 - 69:39]
// CHECK: 70:5: UnexposedStmt= Extent=[70:5 - 70:47]
-// CHECK: 70:41: MemberRefExpr=second:4:55 Extent=[70:12 - 70:47]
+// CHECK: 70:41: MemberRefExpr=second:4:55 SingleRefName=[70:41 - 70:47] RefName=[70:41 - 70:47] Extent=[70:12 - 70:47]
// CHECK: 70:12: UnexposedExpr= Extent=[70:12 - 70:39]
// CHECK: 70:13: UnexposedExpr= Extent=[70:13 - 70:38]
// CHECK: 70:20: TypeRef=actualtype:69:54 Extent=[70:20 - 70:30]
@@ -1791,7 +1791,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 74:17: VarDecl=p:74:17 (Definition) Extent=[74:5 - 74:60]
// CHECK: 74:21: UnexposedExpr= Extent=[74:21 - 74:60]
// CHECK: 74:21: UnexposedExpr=second:4:55 Extent=[74:21 - 74:56]
-// CHECK: 74:50: MemberRefExpr=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: UnexposedExpr= Extent=[74:21 - 74:48]
// CHECK: 74:22: UnexposedExpr= Extent=[74:22 - 74:47]
// CHECK: 74:29: TypeRef=actualtype:73:54 Extent=[74:29 - 74:39]
@@ -1875,12 +1875,12 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 101:30: CallExpr= Extent=[101:30 - 101:45]
// CHECK: 101:30: UnexposedExpr=getName:77:19 Extent=[101:30 - 101:45]
// CHECK: 101:30: CallExpr=getName:77:19 Extent=[101:30 - 101:45]
-// CHECK: 101:36: MemberRefExpr=getName:77:19 Extent=[101:30 - 101:43]
+// 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: UnexposedStmt= Extent=[102:3 - 103:55]
// CHECK: 102:7: UnexposedExpr= Extent=[102:7 - 102:59]
// CHECK: 102:7: CallExpr=startswith:52:8 Extent=[102:7 - 102:32]
-// CHECK: 102:16: MemberRefExpr=startswith:52:8 Extent=[102:7 - 102:26]
+// 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]
// CHECK: 102:7: DeclRefExpr=AttrName:101:19 Extent=[102:7 - 102:15]
// CHECK: 102:27: CallExpr= Extent=[102:27 - 102:31]
@@ -1890,7 +1890,7 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 102:27: UnexposedExpr= Extent=[102:27 - 102:31]
// CHECK: 102:27: UnexposedExpr= Extent=[102:27 - 102:31]
// CHECK: 102:36: CallExpr=endswith:56:8 Extent=[102:36 - 102:59]
-// CHECK: 102:45: MemberRefExpr=endswith:56:8 Extent=[102:36 - 102:53]
+// CHECK: 102:45: MemberRefExpr=endswith:56:8 SingleRefName=[102:45 - 102:53] RefName=[102:45 - 102:53] Extent=[102:36 - 102:53]
// CHECK: 102:36: UnexposedExpr=AttrName:101:19 Extent=[102:36 - 102:44]
// CHECK: 102:36: DeclRefExpr=AttrName:101:19 Extent=[102:36 - 102:44]
// CHECK: 102:54: CallExpr= Extent=[102:54 - 102:58]
@@ -1905,180 +1905,180 @@ AttributeList::Kind AttributeList::getKind(const IdentifierInfo * Name) {
// CHECK: 103:14: DeclRefExpr=operator=:38:7
// CHECK: 103:16: UnexposedExpr=substr:60:13 Extent=[103:16 - 103:55]
// CHECK: 103:16: CallExpr=substr:60:13 Extent=[103:16 - 103:55]
-// CHECK: 103:25: MemberRefExpr=substr:60:13 Extent=[103:16 - 103:31]
+// CHECK: 103:25: MemberRefExpr=substr:60:13 SingleRefName=[103:25 - 103:31] RefName=[103:25 - 103:31] Extent=[103:16 - 103:31]
// CHECK: 103:16: UnexposedExpr=AttrName:101:19 Extent=[103:16 - 103:24]
// CHECK: 103:16: DeclRefExpr=AttrName:101:19 Extent=[103:16 - 103:24]
// CHECK: 103:32: UnexposedExpr= Extent=[103:32 - 103:33]
// CHECK: 103:32: UnexposedExpr= Extent=[103:32 - 103:33]
// CHECK: 103:35: UnexposedExpr= Extent=[103:35 - 103:54]
// CHECK: 103:35: CallExpr=size:51:10 Extent=[103:35 - 103:50]
-// CHECK: 103:44: MemberRefExpr=size:51:10 Extent=[103:35 - 103:48]
+// 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]
// CHECK: 103:35: DeclRefExpr=AttrName:101:19 Extent=[103:35 - 103:43]
// CHECK: 103:53: UnexposedExpr= Extent=[103:53 - 103:54]
// CHECK: 103:53: UnexposedExpr= Extent=[103:53 - 103:54]
// CHECK: 105:3: UnexposedStmt= Extent=[105:3 - 185:31]
// CHECK: 105:10: CallExpr=Default:92:5 Extent=[105:10 - 185:31]
-// CHECK: 185:6: MemberRefExpr=Default:92:5 Extent=[105:10 - 185:13]
+// CHECK: 185:6: MemberRefExpr=Default:92:5 SingleRefName=[185:6 - 185:13] RefName=[185:6 - 185:13] Extent=[105:10 - 185:13]
// CHECK: 105:10: UnexposedExpr=Case:88:42 Extent=[105:10 - 184:33]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 184:33]
-// CHECK: 184:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 184:10]
+// CHECK: 184:6: MemberRefExpr=Case:88:42 SingleRefName=[184:6 - 184:10] RefName=[184:6 - 184:10] Extent=[105:10 - 184:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 183:37]
-// CHECK: 183:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 183:10]
+// CHECK: 183:6: MemberRefExpr=Case:88:42 SingleRefName=[183:6 - 183:10] RefName=[183:6 - 183:10] Extent=[105:10 - 183:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 182:37]
-// CHECK: 182:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 182:10]
+// CHECK: 182:6: MemberRefExpr=Case:88:42 SingleRefName=[182:6 - 182:10] RefName=[182:6 - 182:10] Extent=[105:10 - 182:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 181:35]
-// CHECK: 181:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 181:10]
+// CHECK: 181:6: MemberRefExpr=Case:88:42 SingleRefName=[181:6 - 181:10] RefName=[181:6 - 181:10] Extent=[105:10 - 181:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 180:31]
-// CHECK: 180:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 180:10]
+// CHECK: 180:6: MemberRefExpr=Case:88:42 SingleRefName=[180:6 - 180:10] RefName=[180:6 - 180:10] Extent=[105:10 - 180:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 179:31]
-// CHECK: 179:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 179:10]
+// CHECK: 179:6: MemberRefExpr=Case:88:42 SingleRefName=[179:6 - 179:10] RefName=[179:6 - 179:10] Extent=[105:10 - 179:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 178:35]
-// CHECK: 178:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 178:10]
+// CHECK: 178:6: MemberRefExpr=Case:88:42 SingleRefName=[178:6 - 178:10] RefName=[178:6 - 178:10] Extent=[105:10 - 178:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 177:63]
-// CHECK: 177:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 177:10]
+// CHECK: 177:6: MemberRefExpr=Case:88:42 SingleRefName=[177:6 - 177:10] RefName=[177:6 - 177:10] Extent=[105:10 - 177:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 176:45]
-// CHECK: 176:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 176:10]
+// CHECK: 176:6: MemberRefExpr=Case:88:42 SingleRefName=[176:6 - 176:10] RefName=[176:6 - 176:10] Extent=[105:10 - 176:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 175:51]
-// CHECK: 175:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 175:10]
+// CHECK: 175:6: MemberRefExpr=Case:88:42 SingleRefName=[175:6 - 175:10] RefName=[175:6 - 175:10] Extent=[105:10 - 175:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 174:49]
-// CHECK: 174:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 174:10]
+// CHECK: 174:6: MemberRefExpr=Case:88:42 SingleRefName=[174:6 - 174:10] RefName=[174:6 - 174:10] Extent=[105:10 - 174:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 173:49]
-// CHECK: 173:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 173:10]
+// CHECK: 173:6: MemberRefExpr=Case:88:42 SingleRefName=[173:6 - 173:10] RefName=[173:6 - 173:10] Extent=[105:10 - 173:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 172:53]
-// CHECK: 172:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 172:10]
+// CHECK: 172:6: MemberRefExpr=Case:88:42 SingleRefName=[172:6 - 172:10] RefName=[172:6 - 172:10] Extent=[105:10 - 172:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 171:57]
-// CHECK: 171:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 171:10]
+// CHECK: 171:6: MemberRefExpr=Case:88:42 SingleRefName=[171:6 - 171:10] RefName=[171:6 - 171:10] Extent=[105:10 - 171:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 170:65]
-// CHECK: 170:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 170:10]
+// CHECK: 170:6: MemberRefExpr=Case:88:42 SingleRefName=[170:6 - 170:10] RefName=[170:6 - 170:10] Extent=[105:10 - 170:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 169:57]
-// CHECK: 169:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 169:10]
+// CHECK: 169:6: MemberRefExpr=Case:88:42 SingleRefName=[169:6 - 169:10] RefName=[169:6 - 169:10] Extent=[105:10 - 169:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 168:65]
-// CHECK: 168:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 168:10]
+// CHECK: 168:6: MemberRefExpr=Case:88:42 SingleRefName=[168:6 - 168:10] RefName=[168:6 - 168:10] Extent=[105:10 - 168:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 167:55]
-// CHECK: 167:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 167:10]
+// CHECK: 167:6: MemberRefExpr=Case:88:42 SingleRefName=[167:6 - 167:10] RefName=[167:6 - 167:10] Extent=[105:10 - 167:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 166:55]
-// CHECK: 166:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 166:10]
+// CHECK: 166:6: MemberRefExpr=Case:88:42 SingleRefName=[166:6 - 166:10] RefName=[166:6 - 166:10] Extent=[105:10 - 166:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 165:53]
-// CHECK: 165:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 165:10]
+// CHECK: 165:6: MemberRefExpr=Case:88:42 SingleRefName=[165:6 - 165:10] RefName=[165:6 - 165:10] Extent=[105:10 - 165:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 164:53]
-// CHECK: 164:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 164:10]
+// CHECK: 164:6: MemberRefExpr=Case:88:42 SingleRefName=[164:6 - 164:10] RefName=[164:6 - 164:10] Extent=[105:10 - 164:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 163:49]
-// CHECK: 163:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 163:10]
+// CHECK: 163:6: MemberRefExpr=Case:88:42 SingleRefName=[163:6 - 163:10] RefName=[163:6 - 163:10] Extent=[105:10 - 163:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 162:47]
-// CHECK: 162:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 162:10]
+// CHECK: 162:6: MemberRefExpr=Case:88:42 SingleRefName=[162:6 - 162:10] RefName=[162:6 - 162:10] Extent=[105:10 - 162:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 161:45]
-// CHECK: 161:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 161:10]
+// CHECK: 161:6: MemberRefExpr=Case:88:42 SingleRefName=[161:6 - 161:10] RefName=[161:6 - 161:10] Extent=[105:10 - 161:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 160:45]
-// CHECK: 160:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 160:10]
+// CHECK: 160:6: MemberRefExpr=Case:88:42 SingleRefName=[160:6 - 160:10] RefName=[160:6 - 160:10] Extent=[105:10 - 160:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 159:45]
-// CHECK: 159:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 159:10]
+// CHECK: 159:6: MemberRefExpr=Case:88:42 SingleRefName=[159:6 - 159:10] RefName=[159:6 - 159:10] Extent=[105:10 - 159:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 158:45]
-// CHECK: 158:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 158:10]
+// CHECK: 158:6: MemberRefExpr=Case:88:42 SingleRefName=[158:6 - 158:10] RefName=[158:6 - 158:10] Extent=[105:10 - 158:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 157:43]
-// CHECK: 157:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 157:10]
+// CHECK: 157:6: MemberRefExpr=Case:88:42 SingleRefName=[157:6 - 157:10] RefName=[157:6 - 157:10] Extent=[105:10 - 157:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 156:41]
-// CHECK: 156:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 156:10]
+// CHECK: 156:6: MemberRefExpr=Case:88:42 SingleRefName=[156:6 - 156:10] RefName=[156:6 - 156:10] Extent=[105:10 - 156:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 155:41]
-// CHECK: 155:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 155:10]
+// CHECK: 155:6: MemberRefExpr=Case:88:42 SingleRefName=[155:6 - 155:10] RefName=[155:6 - 155:10] Extent=[105:10 - 155:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 154:41]
-// CHECK: 154:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 154:10]
+// CHECK: 154:6: MemberRefExpr=Case:88:42 SingleRefName=[154:6 - 154:10] RefName=[154:6 - 154:10] Extent=[105:10 - 154:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 153:37]
-// CHECK: 153:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 153:10]
+// CHECK: 153:6: MemberRefExpr=Case:88:42 SingleRefName=[153:6 - 153:10] RefName=[153:6 - 153:10] Extent=[105:10 - 153:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 152:41]
-// CHECK: 152:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 152:10]
+// CHECK: 152:6: MemberRefExpr=Case:88:42 SingleRefName=[152:6 - 152:10] RefName=[152:6 - 152:10] Extent=[105:10 - 152:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 151:39]
-// CHECK: 151:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 151:10]
+// CHECK: 151:6: MemberRefExpr=Case:88:42 SingleRefName=[151:6 - 151:10] RefName=[151:6 - 151:10] Extent=[105:10 - 151:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 150:39]
-// CHECK: 150:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 150:10]
+// CHECK: 150:6: MemberRefExpr=Case:88:42 SingleRefName=[150:6 - 150:10] RefName=[150:6 - 150:10] Extent=[105:10 - 150:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 149:39]
-// CHECK: 149:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 149:10]
+// CHECK: 149:6: MemberRefExpr=Case:88:42 SingleRefName=[149:6 - 149:10] RefName=[149:6 - 149:10] Extent=[105:10 - 149:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 148:39]
-// CHECK: 148:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 148:10]
+// CHECK: 148:6: MemberRefExpr=Case:88:42 SingleRefName=[148:6 - 148:10] RefName=[148:6 - 148:10] Extent=[105:10 - 148:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 147:39]
-// CHECK: 147:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 147:10]
+// CHECK: 147:6: MemberRefExpr=Case:88:42 SingleRefName=[147:6 - 147:10] RefName=[147:6 - 147:10] Extent=[105:10 - 147:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 146:39]
-// CHECK: 146:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 146:10]
+// CHECK: 146:6: MemberRefExpr=Case:88:42 SingleRefName=[146:6 - 146:10] RefName=[146:6 - 146:10] Extent=[105:10 - 146:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 145:41]
-// CHECK: 145:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 145:10]
+// CHECK: 145:6: MemberRefExpr=Case:88:42 SingleRefName=[145:6 - 145:10] RefName=[145:6 - 145:10] Extent=[105:10 - 145:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 144:37]
-// CHECK: 144:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 144:10]
+// CHECK: 144:6: MemberRefExpr=Case:88:42 SingleRefName=[144:6 - 144:10] RefName=[144:6 - 144:10] Extent=[105:10 - 144:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 143:37]
-// CHECK: 143:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 143:10]
+// CHECK: 143:6: MemberRefExpr=Case:88:42 SingleRefName=[143:6 - 143:10] RefName=[143:6 - 143:10] Extent=[105:10 - 143:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 142:35]
-// CHECK: 142:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 142:10]
+// CHECK: 142:6: MemberRefExpr=Case:88:42 SingleRefName=[142:6 - 142:10] RefName=[142:6 - 142:10] Extent=[105:10 - 142:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 141:35]
-// CHECK: 141:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 141:10]
+// CHECK: 141:6: MemberRefExpr=Case:88:42 SingleRefName=[141:6 - 141:10] RefName=[141:6 - 141:10] Extent=[105:10 - 141:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 140:35]
-// CHECK: 140:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 140:10]
+// CHECK: 140:6: MemberRefExpr=Case:88:42 SingleRefName=[140:6 - 140:10] RefName=[140:6 - 140:10] Extent=[105:10 - 140:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 139:35]
-// CHECK: 139:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 139:10]
+// CHECK: 139:6: MemberRefExpr=Case:88:42 SingleRefName=[139:6 - 139:10] RefName=[139:6 - 139:10] Extent=[105:10 - 139:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 138:35]
-// CHECK: 138:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 138:10]
+// CHECK: 138:6: MemberRefExpr=Case:88:42 SingleRefName=[138:6 - 138:10] RefName=[138:6 - 138:10] Extent=[105:10 - 138:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 137:55]
-// CHECK: 137:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 137:10]
+// CHECK: 137:6: MemberRefExpr=Case:88:42 SingleRefName=[137:6 - 137:10] RefName=[137:6 - 137:10] Extent=[105:10 - 137:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 136:35]
-// CHECK: 136:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 136:10]
+// CHECK: 136:6: MemberRefExpr=Case:88:42 SingleRefName=[136:6 - 136:10] RefName=[136:6 - 136:10] Extent=[105:10 - 136:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 135:35]
-// CHECK: 135:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 135:10]
+// CHECK: 135:6: MemberRefExpr=Case:88:42 SingleRefName=[135:6 - 135:10] RefName=[135:6 - 135:10] Extent=[105:10 - 135:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 134:35]
-// CHECK: 134:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 134:10]
+// CHECK: 134:6: MemberRefExpr=Case:88:42 SingleRefName=[134:6 - 134:10] RefName=[134:6 - 134:10] Extent=[105:10 - 134:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 133:35]
-// CHECK: 133:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 133:10]
+// CHECK: 133:6: MemberRefExpr=Case:88:42 SingleRefName=[133:6 - 133:10] RefName=[133:6 - 133:10] Extent=[105:10 - 133:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 132:33]
-// CHECK: 132:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 132:10]
+// CHECK: 132:6: MemberRefExpr=Case:88:42 SingleRefName=[132:6 - 132:10] RefName=[132:6 - 132:10] Extent=[105:10 - 132:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 131:33]
-// CHECK: 131:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 131:10]
+// CHECK: 131:6: MemberRefExpr=Case:88:42 SingleRefName=[131:6 - 131:10] RefName=[131:6 - 131:10] Extent=[105:10 - 131:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 130:33]
-// CHECK: 130:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 130:10]
+// CHECK: 130:6: MemberRefExpr=Case:88:42 SingleRefName=[130:6 - 130:10] RefName=[130:6 - 130:10] Extent=[105:10 - 130:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 129:33]
-// CHECK: 129:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 129:10]
+// CHECK: 129:6: MemberRefExpr=Case:88:42 SingleRefName=[129:6 - 129:10] RefName=[129:6 - 129:10] Extent=[105:10 - 129:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 128:33]
-// CHECK: 128:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 128:10]
+// CHECK: 128:6: MemberRefExpr=Case:88:42 SingleRefName=[128:6 - 128:10] RefName=[128:6 - 128:10] Extent=[105:10 - 128:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 127:33]
-// CHECK: 127:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 127:10]
+// CHECK: 127:6: MemberRefExpr=Case:88:42 SingleRefName=[127:6 - 127:10] RefName=[127:6 - 127:10] Extent=[105:10 - 127:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 126:33]
-// CHECK: 126:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 126:10]
+// CHECK: 126:6: MemberRefExpr=Case:88:42 SingleRefName=[126:6 - 126:10] RefName=[126:6 - 126:10] Extent=[105:10 - 126:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 125:29]
-// CHECK: 125:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 125:10]
+// CHECK: 125:6: MemberRefExpr=Case:88:42 SingleRefName=[125:6 - 125:10] RefName=[125:6 - 125:10] Extent=[105:10 - 125:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 124:33]
-// CHECK: 124:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 124:10]
+// CHECK: 124:6: MemberRefExpr=Case:88:42 SingleRefName=[124:6 - 124:10] RefName=[124:6 - 124:10] Extent=[105:10 - 124:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 123:33]
-// CHECK: 123:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 123:10]
+// CHECK: 123:6: MemberRefExpr=Case:88:42 SingleRefName=[123:6 - 123:10] RefName=[123:6 - 123:10] Extent=[105:10 - 123:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 122:31]
-// CHECK: 122:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 122:10]
+// CHECK: 122:6: MemberRefExpr=Case:88:42 SingleRefName=[122:6 - 122:10] RefName=[122:6 - 122:10] Extent=[105:10 - 122:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 121:31]
-// CHECK: 121:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 121:10]
+// CHECK: 121:6: MemberRefExpr=Case:88:42 SingleRefName=[121:6 - 121:10] RefName=[121:6 - 121:10] Extent=[105:10 - 121:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 120:31]
-// CHECK: 120:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 120:10]
+// CHECK: 120:6: MemberRefExpr=Case:88:42 SingleRefName=[120:6 - 120:10] RefName=[120:6 - 120:10] Extent=[105:10 - 120:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 119:31]
-// CHECK: 119:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 119:10]
+// CHECK: 119:6: MemberRefExpr=Case:88:42 SingleRefName=[119:6 - 119:10] RefName=[119:6 - 119:10] Extent=[105:10 - 119:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 118:31]
-// CHECK: 118:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 118:10]
+// CHECK: 118:6: MemberRefExpr=Case:88:42 SingleRefName=[118:6 - 118:10] RefName=[118:6 - 118:10] Extent=[105:10 - 118:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 117:31]
-// CHECK: 117:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 117:10]
+// CHECK: 117:6: MemberRefExpr=Case:88:42 SingleRefName=[117:6 - 117:10] RefName=[117:6 - 117:10] Extent=[105:10 - 117:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 116:31]
-// CHECK: 116:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 116:10]
+// CHECK: 116:6: MemberRefExpr=Case:88:42 SingleRefName=[116:6 - 116:10] RefName=[116:6 - 116:10] Extent=[105:10 - 116:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 115:29]
-// CHECK: 115:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 115:10]
+// CHECK: 115:6: MemberRefExpr=Case:88:42 SingleRefName=[115:6 - 115:10] RefName=[115:6 - 115:10] Extent=[105:10 - 115:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 114:29]
-// CHECK: 114:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 114:10]
+// CHECK: 114:6: MemberRefExpr=Case:88:42 SingleRefName=[114:6 - 114:10] RefName=[114:6 - 114:10] Extent=[105:10 - 114:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 113:29]
-// CHECK: 113:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 113:10]
+// CHECK: 113:6: MemberRefExpr=Case:88:42 SingleRefName=[113:6 - 113:10] RefName=[113:6 - 113:10] Extent=[105:10 - 113:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 112:31]
-// CHECK: 112:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 112:10]
+// CHECK: 112:6: MemberRefExpr=Case:88:42 SingleRefName=[112:6 - 112:10] RefName=[112:6 - 112:10] Extent=[105:10 - 112:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 111:29]
-// CHECK: 111:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 111:10]
+// CHECK: 111:6: MemberRefExpr=Case:88:42 SingleRefName=[111:6 - 111:10] RefName=[111:6 - 111:10] Extent=[105:10 - 111:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 110:27]
-// CHECK: 110:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 110:10]
+// CHECK: 110:6: MemberRefExpr=Case:88:42 SingleRefName=[110:6 - 110:10] RefName=[110:6 - 110:10] Extent=[105:10 - 110:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 109:27]
-// CHECK: 109:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 109:10]
+// CHECK: 109:6: MemberRefExpr=Case:88:42 SingleRefName=[109:6 - 109:10] RefName=[109:6 - 109:10] Extent=[105:10 - 109:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 108:27]
-// CHECK: 108:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 108:10]
+// CHECK: 108:6: MemberRefExpr=Case:88:42 SingleRefName=[108:6 - 108:10] RefName=[108:6 - 108:10] Extent=[105:10 - 108:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 107:33]
-// CHECK: 107:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 107:10]
+// CHECK: 107:6: MemberRefExpr=Case:88:42 SingleRefName=[107:6 - 107:10] RefName=[107:6 - 107:10] Extent=[105:10 - 107:10]
// CHECK: 105:10: CallExpr=Case:88:42 Extent=[105:10 - 106:27]
-// CHECK: 106:6: MemberRefExpr=Case:88:42 Extent=[105:10 - 106:10]
+// CHECK: 106:6: MemberRefExpr=Case:88:42 SingleRefName=[106:6 - 106:10] RefName=[106:6 - 106:10] Extent=[105:10 - 106:10]
// CHECK: 105:10: UnexposedExpr=StringSwitch:87:12 Extent=[105:10 - 105:63]
// CHECK: 105:16: TemplateRef=StringSwitch:83:47 Extent=[105:16 - 105:28]
// CHECK: 105:10: CallExpr=StringSwitch:87:12 Extent=[105:10 - 105:62]
diff --git a/test/Index/recursive-member-access.c b/test/Index/recursive-member-access.c
index 87855ca361..10a5610b7d 100644
--- a/test/Index/recursive-member-access.c
+++ b/test/Index/recursive-member-access.c
@@ -133,124 +133,124 @@ int test_rdar8650865(struct rdar8650865 *s) {
// CHECK: 6:29: TypeRef=struct rdar8650865:1:8 Extent=[6:29 - 6:40]
// CHECK: 6:45: UnexposedStmt= Extent=[6:45 - 124:2]
// CHECK: 7:3: UnexposedStmt= Extent=[7:3 - 123:8]
-// CHECK: 123:7: MemberRefExpr=x:3:7 Extent=[7:10 - 123:8]
-// CHECK: 122:7: MemberRefExpr=first:2:23 Extent=[7:10 - 122:12]
-// CHECK: 121:7: MemberRefExpr=first:2:23 Extent=[7:10 - 121:12]
-// CHECK: 120:7: MemberRefExpr=first:2:23 Extent=[7:10 - 120:12]
-// CHECK: 119:7: MemberRefExpr=first:2:23 Extent=[7:10 - 119:12]
-// CHECK: 118:7: MemberRefExpr=first:2:23 Extent=[7:10 - 118:12]
-// CHECK: 117:7: MemberRefExpr=first:2:23 Extent=[7:10 - 117:12]
-// CHECK: 116:7: MemberRefExpr=first:2:23 Extent=[7:10 - 116:12]
-// CHECK: 115:7: MemberRefExpr=first:2:23 Extent=[7:10 - 115:12]
-// CHECK: 114:7: MemberRefExpr=first:2:23 Extent=[7:10 - 114:12]
-// CHECK: 113:7: MemberRefExpr=first:2:23 Extent=[7:10 - 113:12]
-// CHECK: 112:7: MemberRefExpr=first:2:23 Extent=[7:10 - 112:12]
-// CHECK: 111:7: MemberRefExpr=first:2:23 Extent=[7:10 - 111:12]
-// CHECK: 110:7: MemberRefExpr=first:2:23 Extent=[7:10 - 110:12]
-// CHECK: 109:7: MemberRefExpr=first:2:23 Extent=[7:10 - 109:12]
-// CHECK: 108:7: MemberRefExpr=first:2:23 Extent=[7:10 - 108:12]
-// CHECK: 107:7: MemberRefExpr=first:2:23 Extent=[7:10 - 107:12]
-// CHECK: 106:7: MemberRefExpr=first:2:23 Extent=[7:10 - 106:12]
-// CHECK: 105:7: MemberRefExpr=first:2:23 Extent=[7:10 - 105:12]
-// CHECK: 104:7: MemberRefExpr=first:2:23 Extent=[7:10 - 104:12]
-// CHECK: 103:7: MemberRefExpr=first:2:23 Extent=[7:10 - 103:12]
-// CHECK: 102:7: MemberRefExpr=first:2:23 Extent=[7:10 - 102:12]
-// CHECK: 101:7: MemberRefExpr=first:2:23 Extent=[7:10 - 101:12]
-// CHECK: 100:7: MemberRefExpr=first:2:23 Extent=[7:10 - 100:12]
-// CHECK: 99:7: MemberRefExpr=first:2:23 Extent=[7:10 - 99:12]
-// CHECK: 98:7: MemberRefExpr=first:2:23 Extent=[7:10 - 98:12]
-// CHECK: 97:7: MemberRefExpr=first:2:23 Extent=[7:10 - 97:12]
-// CHECK: 96:7: MemberRefExpr=first:2:23 Extent=[7:10 - 96:12]
-// CHECK: 95:7: MemberRefExpr=first:2:23 Extent=[7:10 - 95:12]
-// CHECK: 94:7: MemberRefExpr=first:2:23 Extent=[7:10 - 94:12]
-// CHECK: 93:7: MemberRefExpr=first:2:23 Extent=[7:10 - 93:12]
-// CHECK: 92:7: MemberRefExpr=first:2:23 Extent=[7:10 - 92:12]
-// CHECK: 91:7: MemberRefExpr=first:2:23 Extent=[7:10 - 91:12]
-// CHECK: 90:7: MemberRefExpr=first:2:23 Extent=[7:10 - 90:12]
-// CHECK: 89:7: MemberRefExpr=first:2:23 Extent=[7:10 - 89:12]
-// CHECK: 88:7: MemberRefExpr=first:2:23 Extent=[7:10 - 88:12]
-// CHECK: 87:7: MemberRefExpr=first:2:23 Extent=[7:10 - 87:12]
-// CHECK: 86:7: MemberRefExpr=first:2:23 Extent=[7:10 - 86:12]
-// CHECK: 85:7: MemberRefExpr=first:2:23 Extent=[7:10 - 85:12]
-// CHECK: 84:7: MemberRefExpr=first:2:23 Extent=[7:10 - 84:12]
-// CHECK: 83:7: MemberRefExpr=first:2:23 Extent=[7:10 - 83:12]
-// CHECK: 82:7: MemberRefExpr=first:2:23 Extent=[7:10 - 82:12]
-// CHECK: 81:7: MemberRefExpr=first:2:23 Extent=[7:10 - 81:12]
-// CHECK: 80:7: MemberRefExpr=first:2:23 Extent=[7:10 - 80:12]
-// CHECK: 79:7: MemberRefExpr=first:2:23 Extent=[7:10 - 79:12]
-// CHECK: 78:7: MemberRefExpr=first:2:23 Extent=[7:10 - 78:12]
-// CHECK: 77:7: MemberRefExpr=first:2:23 Extent=[7:10 - 77:12]
-// CHECK: 76:7: MemberRefExpr=first:2:23 Extent=[7:10 - 76:12]
-// CHECK: 75:7: MemberRefExpr=first:2:23 Extent=[7:10 - 75:12]
-// CHECK: 74:7: MemberRefExpr=first:2:23 Extent=[7:10 - 74:12]
-// CHECK: 73:7: MemberRefExpr=first:2:23 Extent=[7:10 - 73:12]
-// CHECK: 72:7: MemberRefExpr=first:2:23 Extent=[7:10 - 72:12]
-// CHECK: 71:7: MemberRefExpr=first:2:23 Extent=[7:10 - 71:12]
-// CHECK: 70:7: MemberRefExpr=first:2:23 Extent=[7:10 - 70:12]
-// CHECK: 69:7: MemberRefExpr=first:2:23 Extent=[7:10 - 69:12]
-// CHECK: 68:7: MemberRefExpr=first:2:23 Extent=[7:10 - 68:12]
-// CHECK: 67:7: MemberRefExpr=first:2:23 Extent=[7:10 - 67:12]
-// CHECK: 66:7: MemberRefExpr=first:2:23 Extent=[7:10 - 66:12]
-// CHECK: 65:7: MemberRefExpr=first:2:23 Extent=[7:10 - 65:12]
-// CHECK: 64:7: MemberRefExpr=first:2:23 Extent=[7:10 - 64:12]
-// CHECK: 63:7: MemberRefExpr=first:2:23 Extent=[7:10 - 63:12]
-// CHECK: 62:7: MemberRefExpr=first:2:23 Extent=[7:10 - 62:12]
-// CHECK: 61:7: MemberRefExpr=first:2:23 Extent=[7:10 - 61:12]
-// CHECK: 60:7: MemberRefExpr=first:2:23 Extent=[7:10 - 60:12]
-// CHECK: 59:7: MemberRefExpr=first:2:23 Extent=[7:10 - 59:12]
-// CHECK: 58:7: MemberRefExpr=first:2:23 Extent=[7:10 - 58:12]
-// CHECK: 57:7: MemberRefExpr=first:2:23 Extent=[7:10 - 57:12]
-// CHECK: 56:7: MemberRefExpr=first:2:23 Extent=[7:10 - 56:12]
-// CHECK: 55:7: MemberRefExpr=first:2:23 Extent=[7:10 - 55:12]
-// CHECK: 54:7: MemberRefExpr=first:2:23 Extent=[7:10 - 54:12]
-// CHECK: 53:7: MemberRefExpr=first:2:23 Extent=[7:10 - 53:12]
-// CHECK: 52:7: MemberRefExpr=first:2:23 Extent=[7:10 - 52:12]
-// CHECK: 51:7: MemberRefExpr=f