diff --git a/clang/test/Index/overrides.m b/clang/test/Index/overrides.m index d0447b74739d..d2f1506fef5f 100644 --- a/clang/test/Index/overrides.m +++ b/clang/test/Index/overrides.m @@ -99,11 +99,11 @@ // RUN: c-index-test -test-load-source local %s | FileCheck %s // CHECK: overrides.m:12:9: ObjCInstanceMethodDecl=protoMethod:12:9 [Overrides @3:9] // CHECK: overrides.m:22:9: ObjCInstanceMethodDecl=method:22:9 [Overrides @16:9] -// CHECK: overrides.m:23:9: ObjCInstanceMethodDecl=protoMethod:23:9 [Overrides @12:9, @8:9, @32:9, @17:9] +// CHECK: overrides.m:23:9: ObjCInstanceMethodDecl=protoMethod:23:9 [Overrides @8:9, @12:9, @17:9, @32:9] // CHECK: overrides.m:27:9: ObjCInstanceMethodDecl=method:27:9 (Definition) [Overrides @16:9] // CHECK: overrides.m:28:9: ObjCClassMethodDecl=methodWithParam::28:9 (Definition) [Overrides @18:9] // CHECK: overrides.m:32:9: ObjCInstanceMethodDecl=protoMethod:32:9 [Overrides @8:9] -// CHECK: overrides.m:36:9: ObjCInstanceMethodDecl=protoMethod:36:9 [Overrides @12:9, @8:9, @32:9, @17:9] +// CHECK: overrides.m:36:9: ObjCInstanceMethodDecl=protoMethod:36:9 [Overrides @8:9, @12:9, @17:9, @32:9] // CHECK: overrides.m:50:8: ObjCInstanceMethodDecl=meth:50:8 (Definition) [Overrides @43:8] // CHECK: overrides.m:55:8: ObjCInstanceMethodDecl=kol:55:8 Extent=[55:1 - 55:12] // CHECK: overrides.m:65:26: ObjCInstanceMethodDecl=prop1:65:26 [Overrides @59:25] Extent=[65:26 - 65:31] diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index 5df21ec2a85d..2cbeadcaba24 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -554,6 +554,19 @@ static void PrintCursorComments(CXTranslationUnit TU, } } +typedef struct { + unsigned line; + unsigned col; +} LineCol; + +static int lineCol_cmp(const void *p1, const void *p2) { + const LineCol *lhs = p1; + const LineCol *rhs = p2; + if (lhs->line != rhs->line) + return (int)lhs->line - (int)rhs->line; + return (int)lhs->col - (int)rhs->col; +} + static void PrintCursor(CXCursor Cursor, CommentXMLValidationData *ValidationData) { CXTranslationUnit TU = clang_Cursor_getTranslationUnit(Cursor); @@ -718,13 +731,21 @@ static void PrintCursor(CXCursor Cursor, clang_getOverriddenCursors(Cursor, &overridden, &num_overridden); if (num_overridden) { unsigned I; + LineCol lineCols[50]; + assert(num_overridden <= 50); printf(" [Overrides "); for (I = 0; I != num_overridden; ++I) { CXSourceLocation Loc = clang_getCursorLocation(overridden[I]); clang_getSpellingLocation(Loc, 0, &line, &column, 0); + lineCols[I].line = line; + lineCols[I].col = column; + } + // Make the order of the override list deterministic. + qsort(lineCols, num_overridden, sizeof(LineCol), lineCol_cmp); + for (I = 0; I != num_overridden; ++I) { if (I) printf(", "); - printf("@%d:%d", line, column); + printf("@%d:%d", lineCols[I].line, lineCols[I].col); } printf("]"); clang_disposeOverriddenCursors(overridden);