aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Parse/ParseDecl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
-rw-r--r--clang/lib/Parse/ParseDecl.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index e6812ac..96c25ba 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -6987,6 +6987,15 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
continue;
DeclsInPrototype.push_back(ND);
}
+ // Sort DeclsInPrototype based on raw encoding of the source location.
+ // Scope::decls() is iterating over a SmallPtrSet so sort the Decls before
+ // moving to DeclContext. This provides a stable ordering for traversing
+ // Decls in DeclContext, which is important for tasks like ASTWriter for
+ // deterministic output.
+ llvm::sort(DeclsInPrototype, [](Decl *D1, Decl *D2) {
+ return D1->getLocation().getRawEncoding() <
+ D2->getLocation().getRawEncoding();
+ });
}
// Remember that we parsed a function type, and remember the attributes.