Skip to content

Commit 16e8ebc

Browse files
authored
Merge pull request #5193 from swiftix/wip-sil-opened-archetypes-tracker-fixes
Multiple fixes to fix the release builds
2 parents d9fe1d0 + 20a6d35 commit 16e8ebc

File tree

4 files changed

+46
-31
lines changed

4 files changed

+46
-31
lines changed

include/swift/SIL/SILOpenedArchetypesTracker.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@ namespace swift {
3232
class SILOpenedArchetypesTracker : public DeleteNotificationHandler {
3333
public:
3434
typedef llvm::DenseMap<Type, SILValue> OpenedArchetypeDefsMap;
35+
36+
SILOpenedArchetypesTracker(SILOpenedArchetypesTracker &Tracker)
37+
: SILOpenedArchetypesTracker(Tracker.F, Tracker) {}
38+
39+
SILOpenedArchetypesTracker(const SILOpenedArchetypesTracker &Tracker)
40+
: SILOpenedArchetypesTracker(Tracker.F) {
41+
assert(Tracker.getOpenedArchetypeDefs().empty() &&
42+
"Only empty const SILOpenedArchetypesTracker can be copied");
43+
}
44+
3545
// Re-use pre-populated map if available.
3646
SILOpenedArchetypesTracker(const SILFunction &F,
3747
SILOpenedArchetypesTracker &Tracker)
@@ -105,6 +115,9 @@ class SILOpenedArchetypesTracker : public DeleteNotificationHandler {
105115
}
106116

107117
private:
118+
// Never copy
119+
SILOpenedArchetypesTracker &operator = (const SILOpenedArchetypesTracker &) = delete;
120+
108121
/// The function whose opened archetypes are being tracked.
109122
/// Used only for verification purposes.
110123
const SILFunction &F;

include/swift/Serialization/ModuleFile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class ModuleFile : public LazyMemberLoader {
7979
StringRef IdentifierData;
8080

8181
/// A callback to be invoked every time a type was deserialized.
82-
llvm::function_ref<void(Type)> DeserializedTypeCallback;
82+
std::function<void(Type)> DeserializedTypeCallback;
8383

8484
public:
8585
/// Represents another module that has been imported as a dependency.

lib/SILOptimizer/Transforms/SimplifyCFG.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1601,7 +1601,8 @@ bool SimplifyCFG::simplifySwitchEnumUnreachableBlocks(SwitchEnumInst *SEI) {
16011601
.createUncheckedEnumData(SEI->getLoc(), SEI->getOperand(), Element, Ty);
16021602

16031603
assert(Dest->bbarg_size() == 1 && "Expected only one argument!");
1604-
ArrayRef<SILValue> Args = { UED };
1604+
SmallVector<SILValue, 1> Args;
1605+
Args.push_back(UED);
16051606
SILBuilderWithScope(SEI).createBranch(SEI->getLoc(), Dest, Args);
16061607

16071608
addToWorklist(SEI->getParent());

lib/SILOptimizer/Utils/Generics.cpp

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -628,37 +628,37 @@ static bool linkSpecialization(SILModule &M, SILFunction *F) {
628628
return false;
629629
}
630630

631+
// The whitelist of classes and functions from the stdlib,
632+
// whose specializations we want to preserve.
633+
static const char *const WhitelistedSpecializations[] = {
634+
"Array",
635+
"_ArrayBuffer",
636+
"_ContiguousArrayBuffer",
637+
"Range",
638+
"RangeIterator",
639+
"CountableRange",
640+
"CountableRangeIterator",
641+
"ClosedRange",
642+
"ClosedRangeIterator",
643+
"CountableClosedRange",
644+
"CountableClosedRangeIterator",
645+
"IndexingIterator",
646+
"Collection",
647+
"MutableCollection",
648+
"BidirectionalCollection",
649+
"RandomAccessCollection",
650+
"RangeReplaceableCollection",
651+
"_allocateUninitializedArray",
652+
"UTF8",
653+
"UTF16",
654+
"String",
655+
"_StringBuffer",
656+
"_toStringReadOnlyPrintable",
657+
};
658+
631659
/// Check of a given name could be a name of a white-listed
632660
/// specialization.
633661
bool swift::isWhitelistedSpecialization(StringRef SpecName) {
634-
// The whitelist of classes and functions from the stdlib,
635-
// whose specializations we want to preserve.
636-
ArrayRef<StringRef> Whitelist = {
637-
"Array",
638-
"_ArrayBuffer",
639-
"_ContiguousArrayBuffer",
640-
"Range",
641-
"RangeIterator",
642-
"CountableRange",
643-
"CountableRangeIterator",
644-
"ClosedRange",
645-
"ClosedRangeIterator",
646-
"CountableClosedRange",
647-
"CountableClosedRangeIterator",
648-
"IndexingIterator",
649-
"Collection",
650-
"MutableCollection",
651-
"BidirectionalCollection",
652-
"RandomAccessCollection",
653-
"RangeReplaceableCollection",
654-
"_allocateUninitializedArray",
655-
"UTF8",
656-
"UTF16",
657-
"String",
658-
"_StringBuffer",
659-
"_toStringReadOnlyPrintable",
660-
};
661-
662662
// TODO: Once there is an efficient API to check if
663663
// a given symbol is a specialization of a specific type,
664664
// use it instead. Doing demangling just for this check
@@ -701,7 +701,8 @@ bool swift::isWhitelistedSpecialization(StringRef SpecName) {
701701

702702
pos += OfStr.size();
703703

704-
for (auto Name: Whitelist) {
704+
for (auto NameStr: WhitelistedSpecializations) {
705+
StringRef Name = NameStr;
705706
auto pos1 = DemangledName.find(Name, pos);
706707
if (pos1 == pos && !isalpha(DemangledName[pos1+Name.size()])) {
707708
return true;

0 commit comments

Comments
 (0)