Skip to content

Commit 44268d5

Browse files
committed
[WIP] Swift.String on embedded Swift
1 parent d3849fe commit 44268d5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+380
-502
lines changed

SwiftCompilerSources/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ function(add_swift_compiler_modules_library name)
100100

101101
set(swift_compile_options
102102
"-color-diagnostics"
103+
"-disable-target-os-checking"
103104
"-Xfrontend" "-validate-tbd-against-ir=none"
104105
"-Xfrontend" "-enable-experimental-cxx-interop"
105106
"-Xfrontend" "-disable-target-os-checking"

lib/Frontend/CompilerInvocation.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,6 +1373,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
13731373
Opts.UnavailableDeclOptimizationMode = UnavailableDeclOptimization::Complete;
13741374
Opts.DisableImplicitStringProcessingModuleImport = true;
13751375
Opts.DisableImplicitConcurrencyModuleImport = true;
1376+
Opts.DisableAvailabilityChecking = true;
13761377

13771378
if (FrontendOpts.EnableLibraryEvolution) {
13781379
Diags.diagnose(SourceLoc(), diag::evolution_with_embedded);

lib/Frontend/Frontend.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,9 @@ SerializationOptions CompilerInvocation::computeSerializationOptions(
244244

245245
serializationOpts.EmbeddedSwiftModule =
246246
LangOpts.hasFeature(Feature::Embedded);
247+
if (LangOpts.hasFeature(Feature::Embedded)) {
248+
serializationOpts.SerializeAllSIL = true;
249+
}
247250

248251
serializationOpts.IsOSSA = getSILOptions().EnableOSSAModules;
249252

lib/SIL/IR/Linker.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,9 @@ void SILLinkerVisitor::linkInVTable(ClassDecl *D) {
175175

176176
// Attempt to lookup the Vtbl from the SILModule.
177177
SILVTable *Vtbl = Mod.lookUpVTable(D);
178-
if (!Vtbl)
179-
return;
178+
if (!Vtbl) {
179+
Vtbl = Mod.getSILLoader()->lookupVTable(D);
180+
}
180181

181182
// Ok we found our VTable. Visit each function referenced by the VTable. If
182183
// any of the functions are external declarations, add them to the worklist

lib/SIL/Verifier/SILVerifier.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6791,7 +6791,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
67916791
"public-external function definition must be serialized");
67926792
break;
67936793
case SILLinkage::HiddenExternal:
6794-
require(F->isExternalDeclaration(),
6794+
require(F->isExternalDeclaration() || embedded,
67956795
"hidden-external function cannot have a body");
67966796
break;
67976797
}

lib/SILOptimizer/IPO/CrossModuleOptimization.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,18 @@ void CrossModuleOptimization::serializeFunctionsInModule() {
174174
}
175175
}
176176
}
177+
178+
if (everything) {
179+
for (SILVTable *T : M.getVTables()) {
180+
T->setSerialized(IsSerialized);
181+
for (auto &entry : T->getEntries()) {
182+
SILFunction *F = entry.getImplementation();
183+
if (canSerializeFunction(F, canSerializeFlags, /*maxDepth*/ 64)) {
184+
serializeFunction(F, canSerializeFlags);
185+
}
186+
}
187+
}
188+
}
177189
}
178190

179191
/// Recursively walk the call graph and select functions to be serialized.

lib/SILOptimizer/Transforms/EagerSpecializer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,11 @@ void EagerSpecializerTransform::run() {
825825
if (!F.getLoweredFunctionType()->getInvocationGenericSignature())
826826
return;
827827

828+
if (F.getModule().getOptions().EmbeddedSwift) {
829+
F.clearSpecializeAttrs();
830+
return;
831+
}
832+
828833
// Create a specialized function with ReabstractionInfo for each attribute.
829834
SmallVector<SILFunction *, 8> SpecializedFuncs;
830835
SmallVector<ReabstractionInfo, 4> ReInfoVec;

lib/SILOptimizer/Transforms/VTableSpecializer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,11 +104,13 @@ bool VTableSpecializer::specializeVTables(SILModule &module) {
104104
return changed;
105105
}
106106

107+
__attribute__((optnone))
107108
SILVTable *swift::specializeVTableForType(SILType classTy, SILModule &module,
108109
SILTransform *transform) {
109110
CanType astType = classTy.getASTType();
110111
BoundGenericClassType *genClassTy = dyn_cast<BoundGenericClassType>(astType);
111112
if (!genClassTy) return nullptr;
113+
if (genClassTy->getString() == "_ContiguousArrayStorage<Element>") return nullptr;
112114

113115
if (module.lookUpSpecializedVTable(classTy)) return nullptr;
114116

@@ -143,6 +145,7 @@ SILVTable *swift::specializeVTableForType(SILType classTy, SILModule &module,
143145
return vtable;
144146
}
145147

148+
__attribute__((optnone))
146149
static SILFunction *specializeVTableMethod(SILFunction *origMethod,
147150
SubstitutionMap subs,
148151
SILModule &module,

lib/SILOptimizer/Utils/ConstExpr.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ SymbolicValue ConstExprFunctionState::computeConstantValue(SILValue value) {
335335
if (!val.isConstant()) {
336336
return val;
337337
}
338-
assert(val.getKind() == SymbolicValue::Aggregate);
338+
if (val.getKind() == SymbolicValue::String)
339+
return val;
340+
//assert(val.getKind() == SymbolicValue::Aggregate || );
339341
return val.getAggregateMembers()[sei->getFieldIndex()];
340342
}
341343

lib/Serialization/DeserializeSIL.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,12 @@ SILDeserializer::SILDeserializer(
196196

197197
if (kind == sil_index_block::SIL_FUNC_NAMES)
198198
FuncTable = readFuncTable(scratch, blobData);
199-
else if (kind == sil_index_block::SIL_VTABLE_NAMES)
199+
else if (kind == sil_index_block::SIL_VTABLE_NAMES) {
200200
VTableList = readFuncTable(scratch, blobData);
201+
for (auto Key : VTableList->keys()) {
202+
llvm::errs() << "Key: " << Key << "\n";
203+
}
204+
}
201205
else if (kind == sil_index_block::SIL_MOVEONLYDEINIT_NAMES)
202206
MoveOnlyDeinitList = readFuncTable(scratch, blobData);
203207
else if (kind == sil_index_block::SIL_GLOBALVAR_NAMES)

stdlib/public/core/Assert.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,6 @@ public func preconditionFailure(
263263
/// - line: The line number to print along with `message`. The default is the
264264
/// line number where `fatalError(_:file:line:)` is called.
265265
@_transparent
266-
@_unavailableInEmbedded
267266
public func fatalError(
268267
_ message: @autoclosure () -> String = String(),
269268
file: StaticString = #file, line: UInt = #line
@@ -272,17 +271,6 @@ public func fatalError(
272271
flags: _fatalErrorFlags())
273272
}
274273

275-
#if $Embedded
276-
@_transparent
277-
public func fatalError(
278-
_ message: @autoclosure () -> StaticString = StaticString(),
279-
file: StaticString = #file, line: UInt = #line
280-
) -> Never {
281-
_assertionFailure("Fatal error", message(), file: file, line: line,
282-
flags: _fatalErrorFlags())
283-
}
284-
#endif
285-
286274
/// Library precondition checks.
287275
///
288276
/// Library precondition checks are enabled in debug mode and release mode. When

stdlib/public/core/AssertCommon.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,12 @@ internal func _assertionFailure(
122122
@usableFromInline
123123
@inline(never)
124124
@_semantics("programtermination_point")
125-
@_unavailableInEmbedded
126125
internal func _assertionFailure(
127126
_ prefix: StaticString, _ message: String,
128127
file: StaticString, line: UInt,
129128
flags: UInt32
130129
) -> Never {
130+
#if !$Embedded
131131
prefix.withUTF8Buffer {
132132
(prefix) -> Void in
133133
var message = message
@@ -143,7 +143,7 @@ internal func _assertionFailure(
143143
}
144144
}
145145
}
146-
146+
#endif
147147
Builtin.int_trap()
148148
}
149149

stdlib/public/core/Builtin.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,6 @@ public func _openExistential<ExistentialType, ContainedType, ResultType>(
10591059
/// in the function containing the call to this SPI.
10601060
@_transparent
10611061
@_alwaysEmitIntoClient
1062-
@_unavailableInEmbedded
10631062
public // @SPI(OSLog)
10641063
func _getGlobalStringTablePointer(_ constant: String) -> UnsafePointer<CChar> {
10651064
return UnsafePointer<CChar>(Builtin.globalStringTablePointer(constant));

stdlib/public/core/CMakeLists.txt

Lines changed: 63 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ split_embedded_sources(
3434
EMBEDDED ArrayBody.swift
3535
EMBEDDED ArrayBuffer.swift
3636
EMBEDDED ArrayBufferProtocol.swift
37-
NORMAL ArrayCast.swift
37+
EMBEDDED ArrayCast.swift
3838
EMBEDDED Array.swift
3939
EMBEDDED ArrayShared.swift
4040
EMBEDDED ArraySlice.swift
4141
EMBEDDED ArrayType.swift
42-
NORMAL ASCII.swift
42+
EMBEDDED ASCII.swift
4343
EMBEDDED Assert.swift
4444
EMBEDDED AssertCommon.swift
4545
EMBEDDED BidirectionalCollection.swift
@@ -50,7 +50,7 @@ split_embedded_sources(
5050
NORMAL BridgingBuffer.swift
5151
EMBEDDED Builtin.swift
5252
EMBEDDED BuiltinMath.swift
53-
NORMAL Character.swift
53+
EMBEDDED Character.swift
5454
NORMAL CocoaArray.swift
5555
NORMAL Codable.swift
5656
EMBEDDED Collection.swift
@@ -59,10 +59,10 @@ split_embedded_sources(
5959
EMBEDDED CompilerProtocols.swift
6060
EMBEDDED Sendable.swift
6161
EMBEDDED ContiguousArray.swift
62-
NORMAL ContiguouslyStored.swift
62+
EMBEDDED ContiguouslyStored.swift
6363
EMBEDDED ClosedRange.swift
6464
EMBEDDED ContiguousArrayBuffer.swift
65-
NORMAL CString.swift
65+
EMBEDDED CString.swift
6666
EMBEDDED CTypes.swift
6767
NORMAL DebuggerSupport.swift
6868
NORMAL Dictionary.swift
@@ -92,7 +92,7 @@ split_embedded_sources(
9292
EMBEDDED HashTable.swift
9393
EMBEDDED Identifiable.swift
9494
EMBEDDED Indices.swift
95-
NORMAL InputStream.swift
95+
EMBEDDED InputStream.swift
9696
NORMAL IntegerParsing.swift
9797
EMBEDDED Integers.swift
9898
NORMAL Join.swift
@@ -106,24 +106,24 @@ split_embedded_sources(
106106
EMBEDDED ManagedBuffer.swift
107107
NORMAL Map.swift
108108
EMBEDDED MemoryLayout.swift
109-
NORMAL UnicodeScalar.swift # ORDER DEPENDENCY: Must precede Mirrors.swift
109+
EMBEDDED UnicodeScalar.swift # ORDER DEPENDENCY: Must precede Mirrors.swift
110110
NORMAL Mirrors.swift
111111
EMBEDDED Misc.swift
112112
EMBEDDED MutableCollection.swift
113113
NORMAL NativeDictionary.swift
114114
EMBEDDED NativeSet.swift
115115
NORMAL NewtypeWrapper.swift
116-
NORMAL NFC.swift
117-
NORMAL NFD.swift
116+
EMBEDDED NFC.swift
117+
EMBEDDED NFD.swift
118118
EMBEDDED ObjectIdentifier.swift
119119
EMBEDDED Optional.swift
120120
EMBEDDED OptionSet.swift
121-
NORMAL OutputStream.swift
121+
EMBEDDED OutputStream.swift
122122
EMBEDDED Pointer.swift
123123
EMBEDDED Policy.swift
124124
NORMAL PrefixWhile.swift
125125
NORMAL Prespecialize.swift
126-
NORMAL Print.swift
126+
EMBEDDED Print.swift
127127
NORMAL PtrAuth.swift
128128
EMBEDDED Random.swift
129129
EMBEDDED RandomAccessCollection.swift
@@ -150,68 +150,68 @@ split_embedded_sources(
150150
EMBEDDED ShadowProtocols.swift
151151
NORMAL Shims.swift
152152
EMBEDDED Slice.swift
153-
NORMAL SmallString.swift
153+
EMBEDDED SmallString.swift
154154
EMBEDDED Sort.swift
155155
EMBEDDED StaticString.swift
156-
NORMAL StaticPrint.swift
156+
EMBEDDED StaticPrint.swift
157157
EMBEDDED Stride.swift
158-
NORMAL StringHashable.swift # ORDER DEPENDENCY: Must precede String.swift
159-
NORMAL String.swift
160-
NORMAL StringBreadcrumbs.swift
161-
NORMAL StringBridge.swift
162-
NORMAL StringCharacterView.swift
163-
NORMAL StringComparable.swift
164-
NORMAL StringComparison.swift
165-
NORMAL StringCreate.swift
166-
NORMAL StringGuts.swift
167-
NORMAL StringGutsSlice.swift
168-
NORMAL StringGutsRangeReplaceable.swift
169-
NORMAL StringObject.swift
170-
NORMAL StringProtocol.swift
171-
NORMAL StringIndex.swift
172-
NORMAL StringIndexConversions.swift
173-
NORMAL StringIndexValidation.swift
174-
NORMAL StringInterpolation.swift
175-
NORMAL StringLegacy.swift
176-
NORMAL StringNormalization.swift
177-
NORMAL StringRangeReplaceableCollection.swift
178-
NORMAL StringStorage.swift
179-
NORMAL StringStorageBridge.swift
158+
EMBEDDED StringHashable.swift # ORDER DEPENDENCY: Must precede String.swift
159+
EMBEDDED String.swift
160+
EMBEDDED StringBreadcrumbs.swift
161+
EMBEDDED StringBridge.swift
162+
EMBEDDED StringCharacterView.swift
163+
EMBEDDED StringComparable.swift
164+
EMBEDDED StringComparison.swift
165+
EMBEDDED StringCreate.swift
166+
EMBEDDED StringGuts.swift
167+
EMBEDDED StringGutsSlice.swift
168+
EMBEDDED StringGutsRangeReplaceable.swift
169+
EMBEDDED StringObject.swift
170+
EMBEDDED StringProtocol.swift
171+
EMBEDDED StringIndex.swift
172+
EMBEDDED StringIndexConversions.swift
173+
EMBEDDED StringIndexValidation.swift
174+
EMBEDDED StringInterpolation.swift
175+
EMBEDDED StringLegacy.swift
176+
EMBEDDED StringNormalization.swift
177+
EMBEDDED StringRangeReplaceableCollection.swift
178+
EMBEDDED StringStorage.swift
179+
EMBEDDED StringStorageBridge.swift
180180
NORMAL StringSwitch.swift
181181
NORMAL StringTesting.swift
182-
NORMAL StringUnicodeScalarView.swift
183-
NORMAL StringUTF16View.swift
184-
NORMAL StringUTF8View.swift
185-
NORMAL StringUTF8Validation.swift
186-
NORMAL StringWordBreaking.swift
187-
NORMAL Substring.swift
182+
EMBEDDED StringUnicodeScalarView.swift
183+
EMBEDDED StringUTF16View.swift
184+
EMBEDDED StringUTF8View.swift
185+
EMBEDDED StringUTF8Validation.swift
186+
EMBEDDED StringWordBreaking.swift
187+
EMBEDDED Substring.swift
188188
EMBEDDED SwiftNativeNSArray.swift
189189
EMBEDDED TemporaryAllocation.swift
190190
NORMAL ThreadLocalStorage.swift
191-
NORMAL UIntBuffer.swift
192-
NORMAL UnavailableStringAPIs.swift
193-
NORMAL UnicodeData.swift
194-
NORMAL UnicodeEncoding.swift
195-
NORMAL UnicodeBreakProperty.swift
196-
NORMAL UnicodeHelpers.swift
197-
NORMAL UnicodeParser.swift
198-
NORMAL UnicodeScalarProperties.swift
199-
NORMAL CharacterProperties.swift # ORDER DEPENDENCY: UnicodeScalarProperties.swift
200-
NORMAL UnicodeSPI.swift
191+
EMBEDDED UIntBuffer.swift
192+
EMBEDDED UnavailableStringAPIs.swift
193+
EMBEDDED UnicodeData.swift
194+
EMBEDDED UnicodeEncoding.swift
195+
EMBEDDED UnicodeBreakProperty.swift
196+
EMBEDDED UnicodeHelpers.swift
197+
EMBEDDED UnicodeParser.swift
198+
EMBEDDED UnicodeScalarProperties.swift
199+
EMBEDDED CharacterProperties.swift # ORDER DEPENDENCY: UnicodeScalarProperties.swift
200+
EMBEDDED UnicodeSPI.swift
201201
EMBEDDED Unmanaged.swift
202-
NORMAL UnmanagedOpaqueString.swift
203-
NORMAL UnmanagedString.swift
202+
EMBEDDED UnmanagedOpaqueString.swift
203+
EMBEDDED UnmanagedString.swift
204204
EMBEDDED UnsafePointer.swift
205205
EMBEDDED UnsafeRawPointer.swift
206-
NORMAL UTFEncoding.swift
207-
NORMAL UTF8.swift
208-
NORMAL UTF16.swift
209-
NORMAL UTF32.swift
210-
NORMAL Unicode.swift # ORDER DEPENDENCY: must follow new unicode support
211-
NORMAL StringGraphemeBreaking.swift # ORDER DEPENDENCY: Must follow UTF16.swift
212-
NORMAL ValidUTF8Buffer.swift
206+
EMBEDDED UTFEncoding.swift
207+
EMBEDDED UTF8.swift
208+
EMBEDDED UTF16.swift
209+
EMBEDDED UTF32.swift
210+
EMBEDDED Unicode.swift # ORDER DEPENDENCY: must follow new unicode support
211+
EMBEDDED StringGraphemeBreaking.swift # ORDER DEPENDENCY: Must follow UTF16.swift
212+
EMBEDDED ValidUTF8Buffer.swift
213213
EMBEDDED WriteBackMutableSlice.swift
214-
NORMAL MigrationSupport.swift
214+
EMBEDDED MigrationSupport.swift
215215

216216
### "NON-ESSENTIAL" SOURCES, LAYERED ON TOP OF THE "ESSENTIAL" ONES
217217
### -- PLEASE KEEP THIS LIST IN ALPHABETICAL ORDER ###
@@ -230,7 +230,7 @@ split_embedded_sources(
230230
NORMAL StaticBigInt.swift
231231
NORMAL UnfoldSequence.swift
232232
NORMAL UnsafeBufferPointerSlice.swift
233-
NORMAL VarArgs.swift
233+
EMBEDDED VarArgs.swift
234234
EMBEDDED Zip.swift
235235
NORMAL "${SWIFT_SOURCE_DIR}/stdlib/linker-support/magic-symbols-for-install-name.c"
236236
)
@@ -397,6 +397,7 @@ if(SWIFT_SHOULD_BUILD_EMBEDDED_STDLIB)
397397
set(SWIFT_STDLIB_SUPPORT_BACK_DEPLOYMENT OFF)
398398
set(SWIFT_STDLIB_STABLE_ABI OFF)
399399
set(SWIFT_STDLIB_ENABLE_OBJC_INTEROP OFF)
400+
set(SWIFT_STDLIB_ENABLE_VECTOR_TYPES OFF)
400401

401402
foreach(entry ${EMBEDDED_STDLIB_TARGET_TRIPLES})
402403
string(REGEX REPLACE "[ \t]+" ";" list "${entry}")

0 commit comments

Comments
 (0)