Skip to content

Commit 11c50f9

Browse files
[AST] Get it a deterministic traverse order
Replace `DenseMap` for `std::map` for deterministic traversing order. This allows deterministic iteration order for top level decl and class members, and allows producing deterministic swiftdeps output. rdar://147513165
1 parent 922a01d commit 11c50f9

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

lib/AST/Module.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class swift::SourceLookupCache {
147147
/// A lookup map for value decls. When declarations are added they are added
148148
/// under all variants of the name they can be found under.
149149
class ValueDeclMap {
150-
llvm::DenseMap<DeclName, TinyPtrVector<ValueDecl *>> Members;
150+
std::map<DeclName, TinyPtrVector<ValueDecl *>> Members;
151151

152152
public:
153153
void add(ValueDecl *VD) {
@@ -161,7 +161,7 @@ class swift::SourceLookupCache {
161161
}
162162

163163
void clear() {
164-
Members.shrink_and_clear();
164+
Members.clear();
165165
}
166166

167167
decltype(Members)::const_iterator begin() const { return Members.begin(); }

test/Frontend/output_determinism_check.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,28 @@
3838

3939
public var x = 1
4040
public func test() {}
41+
42+
class A {
43+
var a = 0
44+
var b = 0
45+
var c = 0
46+
var d = 0
47+
}
48+
class B {
49+
var a = 0
50+
var b = 0
51+
var c = 0
52+
var d = 0
53+
}
54+
class C {
55+
var a = 0
56+
var b = 0
57+
var c = 0
58+
var d = 0
59+
}
60+
class D {
61+
var a = 0
62+
var b = 0
63+
var c = 0
64+
var d = 0
65+
}

0 commit comments

Comments
 (0)