Index: include/clang-c/Index.h
===================================================================
--- include/clang-c/Index.h	(revision 210875)
+++ include/clang-c/Index.h	(working copy)
@@ -3518,6 +3518,24 @@
                                                              unsigned reserved);
 
 /**
+ * \brief Given a cursor that represents an Objective-C property declaration,
+ * retrieve a cursor representing the property's getter method.
+ *
+ * If given a cursor that does not represent an Objective-C property
+ * declaration a NULL cursor is returned.
+ */
+CINDEX_LINKAGE CXCursor clang_Cursor_getObjCPropertyGetter(CXCursor C);
+
+/**
+ * \brief Given a cursor that represents an Objective-C property declaration,
+ * retrieve a cursor representing the property's setter method.
+ *
+ * If given a cursor that does not represent an Objective-C property
+ * declaration or represents a readonly property a NULL cursor is returned.
+ */
+CINDEX_LINKAGE CXCursor clang_Cursor_getObjCPropertySetter(CXCursor C);
+
+/**
  * \brief 'Qualifiers' written next to the return and parameter types in
  * Objective-C method declarations.
  */
Index: test/Index/print-objc-property-methods.m
===================================================================
--- test/Index/print-objc-property-methods.m	(revision 0)
+++ test/Index/print-objc-property-methods.m	(working copy)
@@ -0,0 +1,10 @@
+@interface Test1
+@property int prop1;
+@property (readonly) int prop2;
+@property (getter=customGetter, setter=customSetter:) int prop3;
+@end
+
+// RUN: c-index-test -test-print-property-methods %s | FileCheck %s
+// CHECK: ObjCPropertyDecl=prop1:2:15 getter=prop1:2:15 setter=setProp1::2:15
+// CHECK: ObjCPropertyDecl=prop2:3:26 [readonly,] getter=prop2:3:26
+// CHECK: ObjCPropertyDecl=prop3:4:59 [getter,setter,] getter=customGetter:4:59 setter=customSetter::4:59
Index: tools/c-index-test/c-index-test.c
===================================================================
--- tools/c-index-test/c-index-test.c	(revision 210875)
+++ tools/c-index-test/c-index-test.c	(working copy)
@@ -1382,6 +1382,45 @@
 }
 
 /******************************************************************************/
+/* Objective-C property method testing.                                       */
+/******************************************************************************/
+
+static void PrintObjCPropertyMethod(const char *label, CXCursor cursor) {
+  unsigned line;
+  unsigned column;
+  CXString spelling = clang_getCursorSpelling(cursor);
+  CXSourceLocation location = clang_getCursorLocation(cursor);
+  clang_getSpellingLocation(location, NULL, &line, &column, NULL);
+  printf(" %s=%s:%u:%u", label, clang_getCString(spelling), line, column);
+  clang_disposeString(spelling);
+}
+
+static enum CXChildVisitResult PrintObjCPropertyMethods(CXCursor cursor,
+                                                        CXCursor p,
+                                                        CXClientData d) {
+  CXCursor method;
+
+  if (clang_getCursorKind(cursor) != CXCursor_ObjCPropertyDecl)
+    return CXChildVisit_Recurse;
+
+  PrintCursor(cursor, NULL);
+
+  method = clang_Cursor_getObjCPropertyGetter(cursor);
+  if (!clang_equalCursors(method, clang_getNullCursor())) {
+    PrintObjCPropertyMethod("getter", method);
+  }
+
+  method = clang_Cursor_getObjCPropertySetter(cursor);
+  if (!clang_equalCursors(method, clang_getNullCursor())) {
+    PrintObjCPropertyMethod("setter", method);
+  }
+
+  printf("\n");
+
+  return CXChildVisit_Recurse;
+}
+
+/******************************************************************************/
 /* Loading ASTs/source.                                                       */
 /******************************************************************************/
 
@@ -3988,6 +4027,7 @@
     "       c-index-test -test-print-type {<args>}*\n"
     "       c-index-test -test-print-type-size {<args>}*\n"
     "       c-index-test -test-print-bitwidth {<args>}*\n"
+    "       c-index-test -test-print-property-methods {<args>}*\n"
     "       c-index-test -print-usr [<CursorKind> {<args>}]*\n"
     "       c-index-test -print-usr-file <file>\n"
     "       c-index-test -write-pch <file> <compiler arguments>\n");
@@ -4081,6 +4121,9 @@
   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-property-methods") == 0)
+    return perform_test_load_source(argc - 2, argv + 2, "all",
+                                    PrintObjCPropertyMethods, 0);
   else if (argc > 1 && strcmp(argv[1], "-print-usr") == 0) {
     if (argc > 2)
       return print_usrs(argv + 2, argv + argc);
Index: tools/libclang/CIndex.cpp
===================================================================
--- tools/libclang/CIndex.cpp	(revision 210875)
+++ tools/libclang/CIndex.cpp	(working copy)
@@ -6242,6 +6242,28 @@
   return Result;
 }
 
+CXCursor clang_Cursor_getObjCPropertyGetter(CXCursor C) {
+  if (C.kind != CXCursor_ObjCPropertyDecl)
+    return clang_getNullCursor();
+
+  const ObjCPropertyDecl *D = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C));
+  if (!D || !D->getGetterMethodDecl())
+    return clang_getNullCursor();
+
+  return MakeCXCursor(D->getGetterMethodDecl(), getCursorTU(C));
+}
+
+CXCursor clang_Cursor_getObjCPropertySetter(CXCursor C) {
+  if (C.kind != CXCursor_ObjCPropertyDecl)
+    return clang_getNullCursor();
+
+  const ObjCPropertyDecl *D = dyn_cast<ObjCPropertyDecl>(getCursorDecl(C));
+  if (!D || !D->getSetterMethodDecl())
+    return clang_getNullCursor();
+
+  return MakeCXCursor(D->getSetterMethodDecl(), getCursorTU(C));
+}
+
 unsigned clang_Cursor_getObjCDeclQualifiers(CXCursor C) {
   if (!clang_isDeclaration(C.kind))
     return CXObjCDeclQualifier_None;
Index: tools/libclang/libclang.exports
===================================================================
--- tools/libclang/libclang.exports	(revision 210875)
+++ tools/libclang/libclang.exports	(working copy)
@@ -14,6 +14,8 @@
 clang_Cursor_getNumArguments
 clang_Cursor_getObjCDeclQualifiers
 clang_Cursor_getObjCPropertyAttributes
+clang_Cursor_getObjCPropertyGetter
+clang_Cursor_getObjCPropertySetter
 clang_Cursor_getObjCSelectorIndex
 clang_Cursor_getSpellingNameRange
 clang_Cursor_getTranslationUnit
