Skip to content

Merge main 2022-06-09 #4635

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 57 commits into from
Jun 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
8bda524
[SourceKit] Update for primary associated types
rintaro May 18, 2022
be711e3
[cxx-interop][SwiftCompilerSources] Fix conversion between `std::stri…
egorzhdan May 30, 2022
2b3980b
[SwiftCompilerSources][build] Require recent Swift compiler in `HOSTT…
egorzhdan May 23, 2022
19c5c20
[Parseable Output] Generate valid output for files of unknown types
artemcm Jun 3, 2022
8fe890b
[CodeCompletion] Don't suggest precedence groups in expr/type position
rintaro Jun 3, 2022
c6f00fa
[Sema] Allow TreatArrayLiteralAsDictionary fix to handle literals wit…
LucianoPAlmeida Jun 6, 2022
13052bd
[Test] Reenable reflect_task.swift on Darwin.
mikeash Jun 6, 2022
fa09001
Fix actor/job/task leaks in the back deployment runtime.
mikeash Jun 2, 2022
06061a6
Fold away unnecessary SWIFT_CONCURRENCY_BACK_DEPLOYMENT checks
DougGregor Jun 6, 2022
3c6f6f2
Add a test that ensures tasks get invalidated
DougGregor Jun 6, 2022
6b6a557
SILGen: Carry WMO of type lowering context to closure captures.
jckarter Jun 7, 2022
42cf1b7
[Sema] Adjusting repairArraLiteralUsedAsDictionary to also ignore Opt…
LucianoPAlmeida Jun 7, 2022
27787e0
SIL: @objc thunks should have private SIL linkage
slavapestov Jun 7, 2022
1e8f306
Merge pull request #59288 from DougGregor/back-deploy-concurrency-tas…
DougGregor Jun 7, 2022
c9f1004
Merge pull request #59277 from LucianoPAlmeida/dictionary-array-literals
LucianoPAlmeida Jun 7, 2022
8b77860
Merge pull request #59285 from mikeash/reenable-reflect_task
mikeash Jun 7, 2022
bcc07cc
[cxx-interop] Enable C++ stdlib overlay on Linux
egorzhdan May 19, 2022
737507e
[cxx-interop] Fix a potential dangling pointer in `String(cxxString:)`
egorzhdan Jun 7, 2022
831be7f
Merge pull request #59293 from slavapestov/objc-thunk-linkage
slavapestov Jun 7, 2022
51659f0
Merge pull request #59263 from rintaro/ide-completion-precedencegroup…
rintaro Jun 7, 2022
7cf67e7
Fix computation of dominance frontier (#59278)
meg-gupta Jun 7, 2022
11f24ca
Merge pull request #59256 from artemcm/FrontendParseableUnknownExtens…
artemcm Jun 7, 2022
59bb4cb
Merge pull request #59297 from apple/egorzhdan/cxx-overlay-dangling-ptr
egorzhdan Jun 7, 2022
9e69e4d
Merge pull request #58983 from apple/egorzhdan/cxx-overlay-linux
egorzhdan Jun 7, 2022
066bbd1
[CSClosure] Fix handling of property wrapped pattern bindings
xedin Jun 7, 2022
3ccf723
Fix test/IRGen/abitypes.swift for i386-watchos
slavapestov Jun 7, 2022
efc66c7
Merge pull request #59302 from slavapestov/fix-test-watchos-i386
shahmishal Jun 7, 2022
08d77cd
[move-only] Make SILType::getRawASTType() private and make SILPrinter…
gottesmm Jun 7, 2022
7690329
[move-only] Rename some of the SILType move only wrapper methods to b…
gottesmm Jun 7, 2022
fb01ad7
[Testing] Use the SDK name for the back-deployment concurrency librar…
DougGregor Jun 8, 2022
931b5f6
Merge pull request #59306 from DougGregor/test-back-deploy-concurrenc…
DougGregor Jun 8, 2022
c37a4ba
Sema: Eagerly resolve typealiases in protocol extensions in ::Structu…
slavapestov Jun 7, 2022
0da9745
Sema: Simplify TypeResolution::areSameType()
slavapestov Jun 8, 2022
ea980d6
RequirementMachine: Dump rewrite system when minimal conformances det…
slavapestov Jun 8, 2022
9695b19
RequirementMachine: Concrete contraction needs to substitute the pare…
slavapestov Jun 8, 2022
2007d65
Revert "Merge pull request #59293 from slavapestov/objc-thunk-linkage"
ahoppen Jun 8, 2022
c724621
Merge pull request #59311 from ahoppen/pr/revert-abitypes
ahoppen Jun 8, 2022
95481a5
Revert "Merge pull request #58983 from apple/egorzhdan/cxx-overlay-li…
ahoppen Jun 8, 2022
dadbfa2
Merge pull request #59312 from ahoppen/pr/revert-cxx-overlay-linux
ahoppen Jun 8, 2022
a754bb1
Revert "Revert "Merge pull request #59293 from slavapestov/objc-thunk…
slavapestov Jun 8, 2022
f40d4e8
Fix test/IRGen/abitypes.swift again
slavapestov Jun 8, 2022
5fbede2
Merge pull request #59313 from slavapestov/reapply-objc-thunk-linkage
swift-ci Jun 8, 2022
9c09020
Merge pull request #59020 from apple/egorzhdan/libswift-version-check
egorzhdan Jun 8, 2022
c6a95c6
Merge pull request #59152 from apple/egorzhdan/libswift-string-init
egorzhdan Jun 8, 2022
1c76e22
Merge pull request #59310 from slavapestov/rqm-nested-concrete-contra…
slavapestov Jun 8, 2022
9542837
Revert "[cxx-interop][SwiftCompilerSources] Fix conversion between `s…
egorzhdan Jun 8, 2022
fd2a8e7
Merge pull request #59290 from jckarter/type-expansion-wmo-private-type
jckarter Jun 8, 2022
fc73047
Merge pull request #59317 from apple/egorzhdan/revert-libswift-string…
egorzhdan Jun 8, 2022
9e1a293
Fix abitypes.swift on arm64e-ios
slavapestov Jun 8, 2022
55051a7
[test] Explicitly specify --cmake %cmake for build_lld.test
ahoppen Jun 8, 2022
9507315
Merge pull request #58973 from rintaro/ide-primaryassociatedtype-rdar…
rintaro Jun 8, 2022
f6f1be5
Merge pull request #59303 from gottesmm/pr-cd7072441becdbf718aaf324a1…
gottesmm Jun 8, 2022
7663875
Merge pull request #59321 from slavapestov/fix-test-ios-arm64e
slavapestov Jun 8, 2022
23273d8
Merge pull request #59322 from ahoppen/pr/specify-cmake-build-lld-test
shahmishal Jun 8, 2022
965a54f
Merge pull request #59304 from xedin/rdar-94506352
xedin Jun 8, 2022
3574af8
Merge remote-tracking branch 'apple/main' into katei/merge-main-2022-…
kateinoigakukun Jun 8, 2022
802d051
[test] Stop calling exit with wrong calling convention
kateinoigakukun Jun 9, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions SwiftCompilerSources/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,19 @@ else()
message(FATAL_ERROR "Need a swift toolchain building swift compiler sources")
endif()

if(${BOOTSTRAPPING_MODE} STREQUAL "HOSTTOOLS")
if(NOT SWIFT_EXEC_FOR_SWIFT_MODULES STREQUAL CMAKE_Swift_COMPILER)
message(FATAL_ERROR "The Swift compiler (${CMAKE_Swift_COMPILER}) differs from the Swift compiler in SWIFT_NATIVE_SWIFT_TOOLS_PATH (${SWIFT_NATIVE_SWIFT_TOOLS_PATH}/swiftc).")
endif()

set(min_supported_swift_version 5.5)
if(CMAKE_Swift_COMPILER_VERSION VERSION_LESS "${min_supported_swift_version}")
message(FATAL_ERROR
"Outdated Swift compiler: building with host tools requires Swift ${min_supported_swift_version} or newer. "
"Please update your Swift toolchain or switch BOOTSTRAPPING_MODE to BOOTSTRAPPING(-WITH-HOSTLIBS)? or OFF.")
endif()
endif()

add_swift_compiler_modules_library(swiftCompilerModules
SWIFT_EXEC "${SWIFT_EXEC_FOR_SWIFT_MODULES}")

Expand Down
14 changes: 6 additions & 8 deletions include/swift/SIL/Dominance.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,12 @@ class DominanceInfo : public DominatorTreeBase {
///
/// Precondition: no critical edges (OSSA)
///
/// Postcondition: each block in \p frontier is dominated by \p root and either
/// exits the function or has a single successor that is not dominated by \p
/// root.
///
/// With no critical edges, the dominance frontier is identified simply by leaf
/// blocks in the dominance subtree.
void computeDominanceFrontier(SILBasicBlock *root, DominanceInfo *domTree,
SmallVectorImpl<SILBasicBlock *> &frontier);
/// Postcondition: each block in \p boundary is dominated by \p root and either
/// exits the function or has a single successor which has a predecessor that is
/// not dominated by \p root.

void computeDominatedBoundaryBlocks(SILBasicBlock *root, DominanceInfo *domTree,
SmallVectorImpl<SILBasicBlock *> &boundary);

/// Helper class for visiting basic blocks in dominance order, based on a
/// worklist algorithm. Example usage:
Expand Down
40 changes: 24 additions & 16 deletions include/swift/SIL/SILType.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ enum class SILValueCategory : uint8_t {
Address,
};

class SILPrinter;

/// SILType - A Swift type that has been lowered to a SIL representation type.
/// In addition to the Swift type system, SIL adds "address" types that can
/// reference any Swift type (but cannot take the address of an address). *T
Expand Down Expand Up @@ -113,6 +115,8 @@ class SILType {

friend class Lowering::TypeConverter;
friend struct llvm::DenseMapInfo<SILType>;
friend class SILPrinter;

public:
SILType() = default;

Expand Down Expand Up @@ -184,8 +188,11 @@ class SILType {
/// type. This is done under the assumption that in all cases where we are
/// performing these AST queries on SILType, we are not interested in the
/// move only-ness of the value (which we can query separately anyways).
CanType getASTType() const { return withoutMoveOnly().getRawASTType(); }
CanType getASTType() const {
return removingMoveOnlyWrapper().getRawASTType();
}

private:
/// Returns the canonical AST type references by this SIL type without looking
/// through move only. Should only be used by internal utilities of SILType.
CanType getRawASTType() const { return CanType(value.getPointer()); }
Expand Down Expand Up @@ -597,33 +604,34 @@ class SILType {
///
/// Canonical way to check if a SILType is move only. Using is/getAs/castTo
/// will look through moveonly-ness.
bool isMoveOnly() const { return getRawASTType()->is<SILMoveOnlyType>(); }
bool isMoveOnlyWrapped() const {
return getRawASTType()->is<SILMoveOnlyType>();
}

/// Return *this if already move only... otherwise, wrap the current type
/// within a move only type wrapper and return that. Idempotent!
SILType asMoveOnly() const {
if (isMoveOnly())
/// If this is already a move only wrapped type, return *this. Otherwise, wrap
/// the copyable type in the mov eonly wrapper.
SILType addingMoveOnlyWrapper() const {
if (isMoveOnlyWrapped())
return *this;
auto newType = SILMoveOnlyType::get(getRawASTType());
return SILType::getPrimitiveType(newType, getCategory());
}

/// Return this SILType, removing moveonly-ness.
///
/// Is idempotent.
SILType withoutMoveOnly() const {
if (!isMoveOnly())
/// If this is already a copyable type, just return *this. Otherwise, if this
/// is a move only wrapped copyable type, return the inner type.
SILType removingMoveOnlyWrapper() const {
if (!isMoveOnlyWrapped())
return *this;
auto moveOnly = getRawASTType()->castTo<SILMoveOnlyType>();
return SILType::getPrimitiveType(moveOnly->getInnerType(), getCategory());
}

/// If \p otherType is move only, return this type that is move only as
/// well. Otherwise, returns self. Useful for propagating "move only"-ness
/// If \p otherType is move only wrapped, return this type that is move only
/// as well. Otherwise, returns self. Useful for propagating "move only"-ness
/// from a parent type to a subtype.
SILType copyMoveOnly(SILType otherType) const {
if (otherType.isMoveOnly()) {
return asMoveOnly();
SILType copyingMoveOnlyWrapper(SILType otherType) const {
if (otherType.isMoveOnlyWrapped()) {
return addingMoveOnlyWrapper();
}
return *this;
}
Expand Down
5 changes: 5 additions & 0 deletions include/swift/SIL/TypeLowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,8 @@ class TypeConverter {

llvm::DenseMap<AbstractClosureExpr *, Optional<AbstractionPattern>>
ClosureAbstractionPatterns;
llvm::DenseMap<SILDeclRef, TypeExpansionContext>
CaptureTypeExpansionContexts;

CanAnyFunctionType makeConstantInterfaceType(SILDeclRef constant);

Expand Down Expand Up @@ -1225,6 +1227,7 @@ class TypeConverter {
/// the abstraction pattern is queried using this function. Once the
/// abstraction pattern has been asked for, it may not be changed.
Optional<AbstractionPattern> getConstantAbstractionPattern(SILDeclRef constant);
TypeExpansionContext getCaptureTypeExpansionContext(SILDeclRef constant);

/// Set the preferred abstraction pattern for a closure.
///
Expand All @@ -1234,6 +1237,8 @@ class TypeConverter {
void setAbstractionPattern(AbstractClosureExpr *closure,
AbstractionPattern pattern);

void setCaptureTypeExpansionContext(SILDeclRef constant,
SILModule &M);
private:
CanType computeLoweredRValueType(TypeExpansionContext context,
AbstractionPattern origType,
Expand Down
9 changes: 6 additions & 3 deletions include/swift/Sema/CSFix.h
Original file line number Diff line number Diff line change
Expand Up @@ -708,10 +708,13 @@ class TreatArrayLiteralAsDictionary final : public ContextualMismatch {
}

bool diagnose(const Solution &solution, bool asNote = false) const override;
bool diagnoseForAmbiguity(CommonFixesArray commonFixes) const override {
return diagnose(*commonFixes.front().first);
}

static TreatArrayLiteralAsDictionary *create(ConstraintSystem &cs,
Type dictionaryTy, Type arrayTy,
ConstraintLocator *loc);
static TreatArrayLiteralAsDictionary *attempt(ConstraintSystem &cs,
Type dictionaryTy, Type arrayTy,
ConstraintLocator *loc);

static bool classof(ConstraintFix *fix) {
return fix->getKind() == FixKind::TreatArrayLiteralAsDictionary;
Expand Down
5 changes: 3 additions & 2 deletions lib/AST/ASTPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3583,8 +3583,9 @@ void PrintAST::printPrimaryAssociatedTypes(ProtocolDecl *decl) {
[&](AssociatedTypeDecl *assocType) {
Printer.callPrintStructurePre(PrintStructureKind::GenericParameter,
assocType);
Printer.printName(assocType->getName(),
PrintNameContext::GenericParameter);
Printer.printTypeRef(assocType->getDeclaredInterfaceType(), assocType,
assocType->getName(),
PrintNameContext::GenericParameter);
Printer.printStructurePost(PrintStructureKind::GenericParameter,
assocType);
},
Expand Down
19 changes: 11 additions & 8 deletions lib/AST/RequirementMachine/ConcreteContraction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ class ConcreteContraction {
Optional<Type> ConcreteContraction::substTypeParameterRec(
Type type, Position position) const {

// If the requirement is of the form 'T == C' or 'T : C', don't
// substitute T, since then we end up with 'C == C' or 'C : C',
// If we have a superclass (T : C) or same-type requirement (T == C),
// don't substitute T, since then we end up with 'C == C' or 'C : C',
// losing the requirement.
if (position == Position::BaseType ||
position == Position::ConformanceRequirement) {
Expand Down Expand Up @@ -399,9 +399,10 @@ ConcreteContraction::substRequirement(const Requirement &req) const {
!module->lookupConformance(substFirstType, proto,
allowMissing, allowUnavailable)) {
// Handle the case of <T where T : P, T : C> where C is a class and
// C does not conform to P by leaving the conformance requirement
// unsubstituted.
return req;
// C does not conform to P and only substitute the parent type of T
// by pretending we have a same-type requirement here.
substFirstType = substTypeParameter(
firstType, Position::SameTypeRequirement);
}

// Otherwise, replace the generic parameter in the conformance
Expand All @@ -418,9 +419,11 @@ ConcreteContraction::substRequirement(const Requirement &req) const {
if (!substFirstType->isTypeParameter() &&
!substFirstType->satisfiesClassConstraint() &&
req.getLayoutConstraint()->isClass()) {
// If the concrete type doesn't satisfy the layout constraint,
// leave it unsubstituted so that we produce a better diagnostic.
return req;
// If the concrete type doesn't satisfy the layout constraint, produce
// a better diagnostic and only substitute the parent type by pretending
// we have a same-type requirement here.
substFirstType = substTypeParameter(
firstType, Position::SameTypeRequirement);
}

return Requirement(req.getKind(),
Expand Down
1 change: 1 addition & 0 deletions lib/AST/RequirementMachine/MinimalConformances.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ MinimalConformances::decomposeTermIntoConformanceRuleLeftHandSides(
bool simplified = System.simplify(term, &steps);
if (!simplified) {
llvm::errs() << "Term does not conform to protocol: " << term << "\n";
System.dump(llvm::errs());
abort();
}

Expand Down
1 change: 1 addition & 0 deletions lib/Basic/ParseableOutput.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ template <> struct ScalarEnumerationTraits<file_types::ID> {
std::string typeName = file_types::getTypeName(ty).str();
out.enumCase(value, typeName.c_str(), ty);
});
out.enumCase(value, "unknown", file_types::ID::TY_INVALID);
}
};

Expand Down
1 change: 1 addition & 0 deletions lib/FrontendTool/FrontendTool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -602,6 +602,7 @@ static swift::file_types::ID computeFileTypeForPath(const StringRef Path) {
// then iterate over all preceeding possible extension variants.
while (llvm::sys::path::has_extension(PathStem)) {
auto NextExtension = llvm::sys::path::extension(PathStem);
PathStem = llvm::sys::path::stem(PathStem);
Extension = NextExtension.str() + Extension;
FileType = file_types::lookupTypeForExtension(Extension);
if (FileType != swift::file_types::ID::TY_INVALID)
Expand Down
4 changes: 3 additions & 1 deletion lib/IDE/CodeCompletionConsumer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ static MutableArrayRef<CodeCompletionResult *> copyCodeCompletionResults(
};
} else {
shouldIncludeResult = [](const ContextFreeCodeCompletionResult *R) -> bool {
return true;
// PrecedenceGroups are only valid in 'onlyPrecedenceGroups'.
return R->getAssociatedDeclKind() !=
CodeCompletionDeclKind::PrecedenceGroup;
};
}

Expand Down
15 changes: 15 additions & 0 deletions lib/IDE/SourceEntityWalker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,21 @@ bool SemaAnnotator::walkToDeclPreProper(Decl *D) {
if (!ReportParamList(ParamList))
return false;
}

if (auto proto = dyn_cast<ProtocolDecl>(VD)) {
// Report a primary associated type as a references to the associated type
// declaration.
for (auto parsedName : proto->getPrimaryAssociatedTypeNames()) {
Identifier name = parsedName.first;
SourceLoc loc = parsedName.second;
if (auto assocTypeDecl = proto->getAssociatedType(name)) {
passReference(assocTypeDecl,
assocTypeDecl->getDeclaredInterfaceType(),
DeclNameLoc(loc),
ReferenceMetaData(SemaReferenceKind::TypeRef, None));
}
}
}
} else if (auto *ED = dyn_cast<ExtensionDecl>(D)) {
SourceRange SR = SourceRange();
if (auto *repr = ED->getExtendedTypeRepr())
Expand Down
1 change: 0 additions & 1 deletion lib/IRGen/GenObjC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -944,7 +944,6 @@ static llvm::Constant *findSwiftAsObjCThunk(IRGenModule &IGM, SILDeclRef ref,
SILFn = IGM.getSILModule().lookUpFunction(ref);
assert(SILFn && "no IR function for swift-as-objc thunk");
auto fn = IGM.getAddrOfSILFunction(SILFn, NotForDefinition);
ApplyIRLinkage(IRLinkage::Internal).to(fn);
// Don't add the unnamed_addr attribute: in some places Foundation is
// comparing ObjC method pointers. Therefore LLVM's function merging pass must
// not create aliases for identical functions, but create thunks.
Expand Down
7 changes: 7 additions & 0 deletions lib/SIL/IR/SILDeclRef.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -396,13 +396,20 @@ SILLinkage SILDeclRef::getLinkage(ForDefinition_t forDefinition) const {
if (fn->hasForcedStaticDispatch()) {
limit = Limit::OnDemand;
}
}

if (auto fn = dyn_cast<AbstractFunctionDecl>(d)) {
// Native-to-foreign thunks for top-level decls are created on-demand,
// unless they are marked @_cdecl, in which case they expose a dedicated
// entry-point with the visibility of the function.
//
// Native-to-foreign thunks for methods are always just private, since
// they're anchored by Objective-C metadata.
if (isNativeToForeignThunk() && !fn->getAttrs().hasAttribute<CDeclAttr>()) {
if (fn->getDeclContext()->isModuleScopeContext())
limit = Limit::OnDemand;
else
return SILLinkage::Private;
}
}

Expand Down
10 changes: 3 additions & 7 deletions lib/SIL/IR/SILFunctionType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2078,13 +2078,9 @@ static CanSILFunctionType getSILFunctionType(
// Lower in the context of the closure. Since the set of captures is a
// private contract between the closure and its enclosing context, we
// don't need to keep its capture types opaque.
auto expansion = TypeExpansionContext::maximal(
constant->getAnyFunctionRef()->getAsDeclContext(), false);
// ...unless it's inlinable, in which case it might get inlined into
// some place we need to keep opaque types opaque.
if (constant->isSerialized())
expansion = TypeExpansionContext::minimal();
lowerCaptureContextParameters(TC, *constant, genericSig, expansion, inputs);
lowerCaptureContextParameters(TC, *constant, genericSig,
TC.getCaptureTypeExpansionContext(*constant),
inputs);
}

auto calleeConvention = ParameterConvention::Direct_Unowned;
Expand Down
9 changes: 6 additions & 3 deletions lib/SIL/IR/SILPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -532,8 +532,6 @@ static void printSILFunctionNameAndType(llvm::raw_ostream &OS,
}

namespace {

class SILPrinter;

// 1. Accumulate opcode-specific comments in this stream.
// 2. Start emitting comments: lineComments.start()
Expand Down Expand Up @@ -598,6 +596,10 @@ class LineComments : public raw_ostream {
}
};

} // namespace

namespace swift {

/// SILPrinter class - This holds the internal implementation details of
/// printing SIL structures.
class SILPrinter : public SILInstructionVisitor<SILPrinter> {
Expand Down Expand Up @@ -2740,7 +2742,8 @@ class SILPrinter : public SILInstructionVisitor<SILPrinter> {
}
}
};
} // end anonymous namespace

} // namespace swift

static void printBlockID(raw_ostream &OS, SILBasicBlock *bb) {
SILPrintContext Ctx(OS);
Expand Down
Loading