[SwiftCompilerSources] Fix typos

This commit is contained in:
Alexander Cyon
2024-08-09 07:22:39 +02:00
committed by GitHub
parent ffba6d1498
commit c18a24e499
21 changed files with 44 additions and 44 deletions

View File

@@ -590,7 +590,7 @@ private func analyzeForDemotion(_ function: Function) -> Node? {
// because it may be a caller of a function that can be demoted. // because it may be a caller of a function that can be demoted.
var executors = Set<Executor>() var executors = Set<Executor>()
var knownAsyncApplys: [ApplySite] = [] var knownAsyncApplySites: [ApplySite] = []
var hops: [Instruction] = [] var hops: [Instruction] = []
var unknownAsyncOp: Instruction? = nil var unknownAsyncOp: Instruction? = nil
@@ -614,7 +614,7 @@ private func analyzeForDemotion(_ function: Function) -> Node? {
if apply.referencedFunction == nil { if apply.referencedFunction == nil {
unknownAsyncOp.setIfUnset(inst) unknownAsyncOp.setIfUnset(inst)
} else { } else {
knownAsyncApplys.append(apply) knownAsyncApplySites.append(apply)
stats.tick(.asyncKnownCallsCount) stats.tick(.asyncKnownCallsCount)
} }
@@ -630,7 +630,7 @@ private func analyzeForDemotion(_ function: Function) -> Node? {
let data: AnalysisResult.Data = let data: AnalysisResult.Data =
(function: function, (function: function,
knownAsyncCalls: knownAsyncApplys, knownAsyncCalls: knownAsyncApplySites,
executors: executors, executors: executors,
hops: hops) hops: hops)

View File

@@ -145,7 +145,7 @@ private struct CollectedEffects {
// In addition to the effects of the apply, also consider the // In addition to the effects of the apply, also consider the
// effects of the capture, which reads the captured value in // effects of the capture, which reads the captured value in
// order to move it into the context. This only applies to // order to move it into the context. This only applies to
// addressible values, because capturing does not dereference // addressable values, because capturing does not dereference
// any class objects. // any class objects.
// //
// Ignore captures for on-stack partial applies. They only // Ignore captures for on-stack partial applies. They only
@@ -332,7 +332,7 @@ private struct CollectedEffects {
/// Adds effects to a specific value. /// Adds effects to a specific value.
/// ///
/// If the value comes from an argument (or multiple arguments), then the effects are added /// If the value comes from an argument (or multiple arguments), then the effects are added
/// to the corrseponding `argumentEffects`. Otherwise they are added to the `global` effects. /// to the corresponding `argumentEffects`. Otherwise they are added to the `global` effects.
private mutating func addEffects(_ effects: SideEffects.GlobalEffects, to value: Value) { private mutating func addEffects(_ effects: SideEffects.GlobalEffects, to value: Value) {
addEffects(effects, to: value, fromInitialPath: defaultPath(for: value)) addEffects(effects, to: value, fromInitialPath: defaultPath(for: value))
} }

View File

@@ -112,7 +112,7 @@ private func extendAccessScopes(dependence: LifetimeDependence,
/// caller scope, which is handled separately). A nested 'read' access can never interfere with another access in the /// caller scope, which is handled separately). A nested 'read' access can never interfere with another access in the
/// same outer 'read', because it is impossible to nest a 'modify' access within a 'read'. For 'modify' accesses, /// same outer 'read', because it is impossible to nest a 'modify' access within a 'read'. For 'modify' accesses,
/// however, the inner scope must be extended for correctness. A 'modify' access can interfere with other 'modify' /// however, the inner scope must be extended for correctness. A 'modify' access can interfere with other 'modify'
/// accesss in the same scope. We rely on exclusivity diagnostics to report these interferences. For example: /// access in the same scope. We rely on exclusivity diagnostics to report these interferences. For example:
/// ///
/// sil @foo : $(@inout C) -> () { /// sil @foo : $(@inout C) -> () {
/// bb0(%0 : $*C): /// bb0(%0 : $*C):
@@ -133,12 +133,12 @@ private func extendAccessScopes(dependence: LifetimeDependence,
/// violation, and that subsequent optimizations do not shrink the inner access `%a1`. /// violation, and that subsequent optimizations do not shrink the inner access `%a1`.
private func extendAccessScope(beginAccess: BeginAccessInst, range: inout InstructionRange, private func extendAccessScope(beginAccess: BeginAccessInst, range: inout InstructionRange,
_ context: FunctionPassContext) -> FunctionArgument? { _ context: FunctionPassContext) -> FunctionArgument? {
var endAcceses = [Instruction]() var endAccesses = [Instruction]()
// Collect the original end_access instructions and extend the range to to cover them. The resulting access scope must // Collect the original end_access instructions and extend the range to to cover them. The resulting access scope must
// cover the original scope because it may protect other memory operations. // cover the original scope because it may protect other memory operations.
var requiresExtension = false var requiresExtension = false
for end in beginAccess.endInstructions { for end in beginAccess.endInstructions {
endAcceses.append(end) endAccesses.append(end)
if range.contains(end) { if range.contains(end) {
// If any end_access is inside the new range, then all end_accesses must be rewritten. // If any end_access is inside the new range, then all end_accesses must be rewritten.
requiresExtension = true requiresExtension = true
@@ -171,7 +171,7 @@ private func extendAccessScope(beginAccess: BeginAccessInst, range: inout Instru
range.insert(endAccess) range.insert(endAccess)
} }
// Delete original end_access instructions // Delete original end_access instructions
for endAccess in endAcceses { for endAccess in endAccesses {
context.erase(instruction: endAccess) context.erase(instruction: endAccess)
} }
// TODO: Add SIL support for lifetime dependence and write unit test for nested access scopes // TODO: Add SIL support for lifetime dependence and write unit test for nested access scopes

View File

@@ -273,7 +273,7 @@ private struct ComputeOuterBlockrange : EscapeVisitorWithResult {
// instructions (for which the `visitUse` closure is not called). // instructions (for which the `visitUse` closure is not called).
result.insert(operandsDefinitionBlock) result.insert(operandsDefinitionBlock)
// We need to explicitly add predecessor blocks of phis becaues they // We need to explicitly add predecessor blocks of phis because they
// are not necesesarily visited during the down-walk in `isEscaping()`. // are not necesesarily visited during the down-walk in `isEscaping()`.
// This is important for the special case where there is a back-edge from the // This is important for the special case where there is a back-edge from the
// inner range to the inner rage's begin-block: // inner range to the inner rage's begin-block:

View File

@@ -132,7 +132,7 @@ private extension Instruction {
// In instruction simplification we don't have a domtree. Therefore do a simple dominance // In instruction simplification we don't have a domtree. Therefore do a simple dominance
// check based on same-block relations. // check based on same-block relations.
if parentBlock == value.parentBlock { if parentBlock == value.parentBlock {
// The value and instruction are in the same block. All uses are dominanted by both. // The value and instruction are in the same block. All uses are dominated by both.
return true return true
} }
let destroys = value.uses.filterUsers(ofType: DestroyValueInst.self) let destroys = value.uses.filterUsers(ofType: DestroyValueInst.self)

View File

@@ -20,7 +20,7 @@ extension LoadInst : OnoneSimplifyable, SILCombineSimplifyable {
if optimizeLoadFromStringLiteral(context) { if optimizeLoadFromStringLiteral(context) {
return return
} }
if optmizeLoadFromEmptyCollection(context) { if optimizeLoadFromEmptyCollection(context) {
return return
} }
if replaceLoadOfGlobalLet(context) { if replaceLoadOfGlobalLet(context) {
@@ -85,7 +85,7 @@ extension LoadInst : OnoneSimplifyable, SILCombineSimplifyable {
/// Loading `count` or `capacity` from the empty `Array`, `Set` or `Dictionary` singleton /// Loading `count` or `capacity` from the empty `Array`, `Set` or `Dictionary` singleton
/// is replaced by a 0 literal. /// is replaced by a 0 literal.
private func optmizeLoadFromEmptyCollection(_ context: SimplifyContext) -> Bool { private func optimizeLoadFromEmptyCollection(_ context: SimplifyContext) -> Bool {
if self.isZeroLoadFromEmptyCollection() { if self.isZeroLoadFromEmptyCollection() {
let builder = Builder(before: self, context) let builder = Builder(before: self, context)
let zeroLiteral = builder.createIntegerLiteral(0, type: type) let zeroLiteral = builder.createIntegerLiteral(0, type: type)

View File

@@ -184,7 +184,7 @@ extension MutatingContext {
} }
func inlineFunction(apply: FullApplySite, mandatoryInline: Bool) { func inlineFunction(apply: FullApplySite, mandatoryInline: Bool) {
// This is only a best-effort attempt to notity the new cloned instructions as changed. // This is only a best-effort attempt to notify the new cloned instructions as changed.
// TODO: get a list of cloned instructions from the `inlineFunction` // TODO: get a list of cloned instructions from the `inlineFunction`
let instAfterInling: Instruction? let instAfterInling: Instruction?
switch apply { switch apply {

View File

@@ -194,7 +194,7 @@ extension AddressUseVisitor {
if operand.instruction.isIncidentalUse { if operand.instruction.isIncidentalUse {
return leafAddressUse(of: operand) return leafAddressUse(of: operand)
} }
// Unkown instruction. // Unknown instruction.
return unknownAddressUse(of: operand) return unknownAddressUse(of: operand)
} }
} }
@@ -289,7 +289,7 @@ extension AddressInitializationWalker {
} }
} }
// Implement AddresUseVisitor // Implement AddressUseVisitor
extension AddressInitializationWalker { extension AddressInitializationWalker {
/// An address projection produces a single address result and does not /// An address projection produces a single address result and does not
/// escape its address operand in any other way. /// escape its address operand in any other way.
@@ -359,7 +359,7 @@ extension AddressInitializationWalker {
} }
} }
/// A live range representing the ownership of addressible memory. /// A live range representing the ownership of addressable memory.
/// ///
/// This live range represents the minimal guaranteed lifetime of the object being addressed. Uses of derived addresses /// This live range represents the minimal guaranteed lifetime of the object being addressed. Uses of derived addresses
/// may be extended up to the ends of this scope without violating ownership. /// may be extended up to the ends of this scope without violating ownership.

View File

@@ -126,7 +126,7 @@
// //
// //
// TODO: These utilities should be integrated with OSSA SIL verification and // TODO: These utilities should be integrated with OSSA SIL verification and
// guaranteed to be compelete (produce known results for all legal SIL // guaranteed to be complete (produce known results for all legal SIL
// patterns). // patterns).
// ===----------------------------------------------------------------------===// // ===----------------------------------------------------------------------===//
@@ -211,7 +211,7 @@ enum BorrowingInstruction : CustomStringConvertible, Hashable {
/// the last in the function (e.g. a store rather than a destroy or return). /// the last in the function (e.g. a store rather than a destroy or return).
/// The client needs to use LifetimeDependenceDefUseWalker to do better. /// The client needs to use LifetimeDependenceDefUseWalker to do better.
/// ///
/// TODO: to hande reborrow-extended uses, migrate ExtendedLiveness /// TODO: to handle reborrow-extended uses, migrate ExtendedLiveness
/// to SwiftCompilerSources. /// to SwiftCompilerSources.
/// ///
/// TODO: Handle .partialApply and .markDependence forwarded uses /// TODO: Handle .partialApply and .markDependence forwarded uses
@@ -278,7 +278,7 @@ enum BorrowingInstruction : CustomStringConvertible, Hashable {
/// ///
/// If the value is a begin_apply result, then it may be the token or /// If the value is a begin_apply result, then it may be the token or
/// one of the yielded values. In any case, the scope ending operands /// one of the yielded values. In any case, the scope ending operands
/// are on the end_apply or abort_apply intructions that use the /// are on the end_apply or abort_apply instructions that use the
/// token. /// token.
/// ///
/// Note: equivalent to C++ BorrowedValue, but also handles begin_apply. /// Note: equivalent to C++ BorrowedValue, but also handles begin_apply.

View File

@@ -156,7 +156,7 @@ protocol EscapeVisitor {
/// If true, the traversals follow values with trivial types. /// If true, the traversals follow values with trivial types.
var followTrivialTypes: Bool { get } var followTrivialTypes: Bool { get }
/// If true, the traveral follows loaded values. /// If true, the traversal follows loaded values.
var followLoads: Bool { get } var followLoads: Bool { get }
} }

View File

@@ -113,7 +113,7 @@ struct LifetimeDependence : CustomStringConvertible {
case yield(Value) case yield(Value)
/// An owned value whose OSSA lifetime encloses nonescapable values /// An owned value whose OSSA lifetime encloses nonescapable values
case owned(Value) case owned(Value)
/// Singly-initialized addressible storage (likely for an /// Singly-initialized addressable storage (likely for an
/// immutable address-only value). The lifetime extends until the /// immutable address-only value). The lifetime extends until the
/// memory is destroyed. e.g. A value produced by an @in /// memory is destroyed. e.g. A value produced by an @in
/// FunctionArgument or @out apply. @inout has caller scope /// FunctionArgument or @out apply. @inout has caller scope
@@ -559,7 +559,7 @@ extension LifetimeDependence {
/// This uses LifetimeDependenceUseDefWalker to find the introducers /// This uses LifetimeDependenceUseDefWalker to find the introducers
/// of a dependence chain, which represent the value's "inherited" /// of a dependence chain, which represent the value's "inherited"
/// dependencies. This stops at an address, unless the address refers /// dependencies. This stops at an address, unless the address refers
/// to a singly-initialized temprorary, in which case it continues to /// to a singly-initialized temporary, in which case it continues to
/// walk up the stored value. /// walk up the stored value.
/// ///
/// This overrides LifetimeDependenceUseDefWalker to stop at a value /// This overrides LifetimeDependenceUseDefWalker to stop at a value
@@ -773,7 +773,7 @@ extension LifetimeDependenceUseDefWalker {
/// follows interior pointers using AddressUseVisitor. Handles stores to and loads from local variables using /// follows interior pointers using AddressUseVisitor. Handles stores to and loads from local variables using
/// LocalVariableReachabilityCache. /// LocalVariableReachabilityCache.
/// ///
/// Ignores trivial values (~Escapable types are never trivial. Escapable types may only be lifetime-depenent values if /// Ignores trivial values (~Escapable types are never trivial. Escapable types may only be lifetime-dependent values if
/// they are non-trivial). /// they are non-trivial).
/// ///
/// Skips uses within nested borrow scopes. /// Skips uses within nested borrow scopes.

View File

@@ -10,7 +10,7 @@
// //
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
/// ///
/// SIL operates on three kinds of addressible memory: /// SIL operates on three kinds of addressable memory:
/// ///
/// 1. Temporary RValues. These are recognied by AddressInitializationWalker. These largely disappear with opaque SIL /// 1. Temporary RValues. These are recognied by AddressInitializationWalker. These largely disappear with opaque SIL
/// values. /// values.
@@ -35,13 +35,13 @@ private func log(_ message: @autoclosure () -> String) {
// Local variables are accessed in one of these ways. // Local variables are accessed in one of these ways.
// //
// Note: @in is only immutable up to when it is destroyed, so still requies a local live range. // Note: @in is only immutable up to when it is destroyed, so still requires a local live range.
struct LocalVariableAccess: CustomStringConvertible { struct LocalVariableAccess: CustomStringConvertible {
enum Kind { enum Kind {
case incomingArgument // @in, @inout, @inout_aliasable case incomingArgument // @in, @inout, @inout_aliasable
case outgoingArgument // @inout, @inout_aliasable case outgoingArgument // @inout, @inout_aliasable
case inoutYield // indirect yield from this accessor case inoutYield // indirect yield from this accessor
case beginAccess // Reading or reassinging a 'var' case beginAccess // Reading or reassigning a 'var'
case load // Reading a 'let'. Returning 'var' from an initializer. case load // Reading a 'let'. Returning 'var' from an initializer.
case store // 'var' initialization and destruction case store // 'var' initialization and destruction
case apply // indirect arguments case apply // indirect arguments
@@ -214,7 +214,7 @@ class LocalVariableAccessInfo: CustomStringConvertible {
} }
} }
/// Model the formal accesses of an addressible variable introduced by an alloc_box, alloc_stack, or indirect /// Model the formal accesses of an addressable variable introduced by an alloc_box, alloc_stack, or indirect
/// FunctionArgument. /// FunctionArgument.
/// ///
/// This instantiates a unique LocalVariableAccessInfo instances for each access instruction, caching it an an access /// This instantiates a unique LocalVariableAccessInfo instances for each access instruction, caching it an an access

View File

@@ -554,7 +554,7 @@ extension BasicBlock {
extension SimplifyContext { extension SimplifyContext {
/// Replaces a pair of redudant instructions, like /// Replaces a pair of redundant instructions, like
/// ``` /// ```
/// %first = enum $E, #E.CaseA!enumelt, %replacement /// %first = enum $E, #E.CaseA!enumelt, %replacement
/// %second = unchecked_enum_data %first : $E, #E.CaseA!enumelt /// %second = unchecked_enum_data %first : $E, #E.CaseA!enumelt

View File

@@ -275,10 +275,10 @@ protocol OwnershipUseVisitor {
mutating func pointerEscapingUse(of operand: Operand) -> WalkResult mutating func pointerEscapingUse(of operand: Operand) -> WalkResult
/// A use that creates an implicit borrow scope over the lifetime of /// A use that creates an implicit borrow scope over the lifetime of
/// an owned dependent value. The operand owership is .borrow, but /// an owned dependent value. The operand ownership is .borrow, but
/// there are no explicit scope-ending operations. Instead /// there are no explicit scope-ending operations. Instead
/// BorrowingInstruction.scopeEndingOperands will return the final /// BorrowingInstruction.scopeEndingOperands will return the final
/// consumes in the dependent value's forwaring chain. /// consumes in the dependent value's forwarding chain.
mutating func dependentUse(of operand: Operand, into value: Value) mutating func dependentUse(of operand: Operand, into value: Value)
-> WalkResult -> WalkResult
@@ -490,7 +490,7 @@ extension OwnershipUseVisitor {
/// ///
/// - Does not assume the current lifetime is linear. Transitively /// - Does not assume the current lifetime is linear. Transitively
/// follows guaranteed forwarding and address uses within the current /// follows guaranteed forwarding and address uses within the current
/// scope. Phis that are not dominanted by definingValue or an outer /// scope. Phis that are not dominated by definingValue or an outer
/// adjacent phi are marked "unenclosed" to signal an incomplete /// adjacent phi are marked "unenclosed" to signal an incomplete
/// lifetime. /// lifetime.
/// ///

View File

@@ -13,7 +13,7 @@
import SIL import SIL
import OptimizerBridging import OptimizerBridging
private protocol VerifyableInstruction : Instruction { private protocol VerifiableInstruction : Instruction {
func verify(_ context: FunctionPassContext) func verify(_ context: FunctionPassContext)
} }
@@ -36,8 +36,8 @@ extension Function {
inst.checkForwardingConformance() inst.checkForwardingConformance()
if let verifyableInst = inst as? VerifyableInstruction { if let verifiableInst = inst as? VerifiableInstruction {
verifyableInst.verify(context) verifiableInst.verify(context)
} }
} }
} }
@@ -54,7 +54,7 @@ private extension Instruction {
} }
} }
extension BorrowedFromInst : VerifyableInstruction { extension BorrowedFromInst : VerifiableInstruction {
func verify(_ context: FunctionPassContext) { func verify(_ context: FunctionPassContext) {
var computedEVs = Stack<Value>(context) var computedEVs = Stack<Value>(context)
defer { computedEVs.deinitialize() } defer { computedEVs.deinitialize() }

View File

@@ -162,7 +162,7 @@ extension Function {
} }
if isProgramTerminationPoint { if isProgramTerminationPoint {
// We can ignore any memory writes in a program termination point, because it's not relevant // We can ignore any memory writes in a program termination point, because it's not relevant
// for the caller. But we need to consider memory reads, otherwise preceeding memory writes // for the caller. But we need to consider memory reads, otherwise preceding memory writes
// would be eliminated by dead-store-elimination in the caller. E.g. String initialization // would be eliminated by dead-store-elimination in the caller. E.g. String initialization
// for error strings which are printed by the program termination point. // for error strings which are printed by the program termination point.
// Regarding ownership: a program termination point must not touch any reference counted objects. // Regarding ownership: a program termination point must not touch any reference counted objects.
@@ -394,7 +394,7 @@ public struct SideEffects : CustomStringConvertible, NoReflectionChildren {
/// Returns the effects of an argument. /// Returns the effects of an argument.
/// ///
/// In constrast to using `arguments` directly, it's valid to have an `argumentIndex` /// In contrast to using `arguments` directly, it's valid to have an `argumentIndex`
/// which is larger than the number of elements in `arguments`. /// which is larger than the number of elements in `arguments`.
public func getArgumentEffects(for argumentIndex: Int) -> ArgumentEffects { public func getArgumentEffects(for argumentIndex: Int) -> ArgumentEffects {
if argumentIndex < arguments.count { if argumentIndex < arguments.count {
@@ -430,7 +430,7 @@ public struct SideEffects : CustomStringConvertible, NoReflectionChildren {
/// Side-effects of a specific function argument. /// Side-effects of a specific function argument.
/// ///
/// The paths describe what (projeted) values of an argument are affected. /// The paths describe what (projected) values of an argument are affected.
/// If a path is nil, than there is no such effect on the argument. /// If a path is nil, than there is no such effect on the argument.
/// ///
/// A path can contain any projection or wildcards, as long as there is no load involved. /// A path can contain any projection or wildcards, as long as there is no load involved.

View File

@@ -87,7 +87,7 @@ public struct OperandArray : RandomAccessCollection, CustomReflectable {
/// Returns a sub-array defined by `bounds`. /// Returns a sub-array defined by `bounds`.
/// ///
/// Note: this does not return a Slice. The first index of the returnd array is always 0. /// Note: this does not return a Slice. The first index of the returned array is always 0.
public subscript(bounds: Range<Int>) -> OperandArray { public subscript(bounds: Range<Int>) -> OperandArray {
assert(bounds.lowerBound >= startIndex && bounds.upperBound <= endIndex) assert(bounds.lowerBound >= startIndex && bounds.upperBound <= endIndex)
return OperandArray( return OperandArray(

View File

@@ -335,7 +335,7 @@ public struct AccessPath : CustomStringConvertible {
/// Returns true if this access addresses the same memory location as `other` or if `other` /// Returns true if this access addresses the same memory location as `other` or if `other`
/// is a sub-field of this access. /// is a sub-field of this access.
/// Note that this access _contains_ `other` if `other` has a _larger_ projection path than this acccess. /// Note that this access _contains_ `other` if `other` has a _larger_ projection path than this access.
/// For example: /// For example:
/// `%value.s0` contains `%value.s0.s1` /// `%value.s0` contains `%value.s0.s1`
public func isEqualOrContains(_ other: AccessPath) -> Bool { public func isEqualOrContains(_ other: AccessPath) -> Bool {

View File

@@ -570,7 +570,7 @@ extension AddressDefUseWalker {
/// to reflect that a further projection is needed to reach the value of interest from the new initial value. /// to reflect that a further projection is needed to reach the value of interest from the new initial value.
/// 2. If the instruction of the definition is a value construction such as `struct` and /// 2. If the instruction of the definition is a value construction such as `struct` and
/// the head of the path matches the instruction type then the walk continues /// the head of the path matches the instruction type then the walk continues
/// with a call to `walkUp` with initial value the operand defintion denoted by the path /// with a call to `walkUp` with initial value the operand definition denoted by the path
/// and the suffix path as path since the target value can now be reached with fewer projections. /// and the suffix path as path since the target value can now be reached with fewer projections.
/// If the defining instruction of the value does not match the head of the path as in /// If the defining instruction of the value does not match the head of the path as in
/// `%t = tuple ...` and `"s0.t1"` then `unmatchedPath(%t, ...)` is called. /// `%t = tuple ...` and `"s0.t1"` then `unmatchedPath(%t, ...)` is called.

View File

@@ -198,7 +198,7 @@ extension Value {
ProjectedValue(value: self, path: path) ProjectedValue(value: self, path: path)
} }
/// Returns a projected value, defined by this value and path containig a single field of `kind` and `index`. /// Returns a projected value, defined by this value and path containing a single field of `kind` and `index`.
public func at(_ kind: SmallProjectionPath.FieldKind, index: Int = 0) -> ProjectedValue { public func at(_ kind: SmallProjectionPath.FieldKind, index: Int = 0) -> ProjectedValue {
ProjectedValue(value: self, path: SmallProjectionPath(kind, index: index)) ProjectedValue(value: self, path: SmallProjectionPath(kind, index: index))
} }

View File

@@ -11,5 +11,5 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
/// Dummy source file to force CMake generated SwiftInTheCompiler.xcodeproj /// Dummy source file to force CMake generated SwiftInTheCompiler.xcodeproj
/// to successfully build static libraries conatining only object files used /// to successfully build static libraries containing only object files used
/// during "bootstrap" process to link Swift sources into the compiler. /// during "bootstrap" process to link Swift sources into the compiler.