Skip to content

[rebranch] Manually merge main to rebranch #75727

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 55 commits into from
Aug 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
76adead
Basic test for RemoteMirror reflecting checked continuations
tbkka Aug 1, 2024
5c3b777
Implement a SwiftIfConfig.BuildConfiguration that queries the ASTContext
DougGregor Jul 6, 2024
d06e408
Re-implement SourceFile::getIfConfigClauseRanges on top of SwiftIfConfig
DougGregor Jul 7, 2024
ca588b7
Insert `#endif` directives into `#if` config ranges list produced by …
DougGregor Jul 7, 2024
ddbbb5a
Address code review comments and build failure
DougGregor Jul 8, 2024
0c9a8a8
Sink implementation of SourceFile::getIfConfigClauseRanges into Sema
DougGregor Jul 15, 2024
a844f4f
Free memory allocated in Swift from Swift, not C++
DougGregor Jul 18, 2024
b4fb572
ModuleInterface: Don't warn on name conflict when the alias workaroun…
xymus Aug 2, 2024
816f0b9
[Sema] NFC: Remove `SuppressDiagnostics` from `PreCheckResultBuilderR…
hamishknight Aug 3, 2024
30d7c9a
[Sema] Remove `ParentExpr` from pre-check walker
hamishknight Aug 3, 2024
9a04f3f
[Sema] Remove a check for `SequenceExpr` in pre-check
hamishknight Aug 3, 2024
ae87dbb
[Sema] Simplify pattern pre-check skipping logic
hamishknight Aug 3, 2024
cd0e521
[Sema] Add `SyntacticElementTarget::getPattern`
hamishknight Aug 3, 2024
23e8340
[Sema] Use `SyntacticElementTarget::walk` to pre-check
hamishknight Aug 3, 2024
a73e44a
[Sema] Split out result builder pre-checking
hamishknight Aug 3, 2024
d686a3e
Handle `$FeatureName` custom conditions in CompilerBuildConfiguration
DougGregor Aug 4, 2024
cfd0a3f
Thread a source location through canImport evaluation in CompilerBuil…
DougGregor Aug 4, 2024
4d630fd
Demangling: Fix -Wunused-but-set-variable warnings
nico Aug 5, 2024
55d27a7
Fix build error with gcc in swift demangling code
nico Aug 5, 2024
a05b305
[cxx-interop] Fix crash with reverse interop in Embedded Swift
Aug 2, 2024
345f9c1
AliasAnalysis: handle `destroy_value [dead_end]` in computeMemoryEffect
eeckstein Aug 5, 2024
8f839f0
AliasAnalysis: use `AccessBase.isLet` instead of duplicating the code
eeckstein Aug 5, 2024
ac3e2cb
EscapeUtils: handle more use types for unchecked_addr_cast
eeckstein Aug 5, 2024
def3b6f
AccessUtils: recognize addressor calls of globals as a "global" acces…
eeckstein Aug 5, 2024
933f8eb
[Concurrency] Split up the non-Sendable argument diagnostics and improve
hborla Aug 5, 2024
bd1653e
[Concurrency] Split up the non-Sendable result diagnostics and improve
hborla Aug 5, 2024
9f0b2ec
[Concurrency] Minor wording change to witness and override Sendable d…
hborla Aug 5, 2024
5424ddd
Merge pull request #75644 from swiftlang/gaborh/embedded-swift
Xazax-hun Aug 5, 2024
fff4beb
AST: Clarify SourceFile's existing missing imports record.
tshortli Aug 1, 2024
02255d2
Sema: Move diagnoseMissingImportForMember() to Sema.
tshortli Jul 29, 2024
7d95914
Sema: Don't include @_exported on suggested imports.
tshortli Jul 30, 2024
661f368
Merge pull request #75620 from tbkka/tbkka-remotemirror-checkedcontin…
tbkka Aug 5, 2024
3ef1600
Sema: Add an access level to the fix-its for missing imports when app…
tshortli Jul 30, 2024
05a280b
Test: try to re-enable
kavon Aug 5, 2024
eea22c2
Merge pull request #75659 from xymus/shadow-dont-warn-with-alias-work…
xymus Aug 5, 2024
f0902a9
Expose an ImportNonPublicDependencies LangOpt for LLDB (NFC).
adrian-prantl Aug 2, 2024
1aae57a
Suppress these tests under "asan", not "ASAN"
tbkka Aug 5, 2024
d433919
Merge pull request #75694 from tshortli/member-import-visibility-impo…
tshortli Aug 5, 2024
976d921
[Concurrency] Split up the non-Sendable property diagnostics and improve
hborla Aug 5, 2024
18a6109
[region-isolation] Re-group diagnostics in header based on which diag…
gottesmm Aug 2, 2024
7dbec84
[NFC] Update a few tests for concurrency diagnostics changes.
hborla Aug 5, 2024
fc28cfe
Merge pull request #75680 from nico/unused-but-set
compnerd Aug 6, 2024
262ba2b
Merge pull request #75682 from nico/fpermissive
compnerd Aug 6, 2024
34cc7ea
[Concurrency] Emit a better note when an isolated stored property ini…
hborla Aug 6, 2024
16627a0
Merge pull request #75703 from gottesmm/pr-12c964b902efd010879d6af6f3…
gottesmm Aug 6, 2024
8ce7456
Merge pull request #75698 from tbkka/tbkka-reflection-test-no-asan
tbkka Aug 6, 2024
9319102
Merge pull request #75687 from hborla/sendable-param-diagnostics
hborla Aug 6, 2024
f672c77
Merge pull request #75657 from adrian-prantl/133088201
adrian-prantl Aug 6, 2024
d5d9338
Merge pull request #75689 from eeckstein/alias-analysis-improvements
eeckstein Aug 6, 2024
fef8782
Merge pull request #75014 from DougGregor/swiftifconfig-build-configu…
DougGregor Aug 6, 2024
da61cd6
Merge pull request #75533 from hamishknight/prewash
hamishknight Aug 6, 2024
0ccbc7b
Merge pull request #75705 from hborla/isolated-property-init-note
hborla Aug 6, 2024
b55651f
Take into account pauth address discrimination on arm64e in test matc…
asl Aug 6, 2024
81469eb
Merge pull request #75695 from kavon/kavon-fixes-4
kavon Aug 6, 2024
7bdf1e1
Merge remote-tracking branch 'origin/main' into manually-merge-main-t…
bnbarham Aug 6, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,11 @@ struct AliasAnalysis {
if destroy.destroyedValue.type.isNoEscapeFunction {
return .noEffects
}
if destroy.isDeadEnd {
// We don't have to take deinit effects into acount for a `destroy_value [dead_end]`.
// Such destroys are lowered to no-ops and will not call any deinit.
return .noEffects
}
return defaultEffects(of: destroy, on: memLoc)

default:
Expand Down Expand Up @@ -569,11 +574,7 @@ private enum MemoryLocation {
var isLetValue: Bool {
switch self {
case .memoryAddress(let addr):
switch addr.accessBase {
case .global(let global): return global.isLet
case .class(let rea): return rea.fieldIsLet
default: return false
}
return addr.accessBase.isLet
case .modifyAccessScope:
return false
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ fileprivate struct EscapeWalker<V: EscapeVisitor> : ValueDefUseWalker,
switch uacUse.instruction {
case is IsUniqueInst:
break
case is LoadInst, is LoadBorrowInst:
case is LoadInst, is LoadBorrowInst, is ApplyInst, is TryApplyInst:
if followLoads(at: path) {
return .abortWalk
}
Expand Down
10 changes: 0 additions & 10 deletions SwiftCompilerSources/Sources/Optimizer/Utilities/OptUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -625,16 +625,6 @@ private struct EscapesToValueVisitor : EscapeVisitor {
}

extension Function {
var globalOfGlobalInitFunction: GlobalVariable? {
if isGlobalInitFunction,
let ret = returnInstruction,
let atp = ret.returnedValue as? AddressToPointerInst,
let ga = atp.address as? GlobalAddrInst {
return ga.global
}
return nil
}

var initializedGlobal: GlobalVariable? {
if !isGlobalInitOnceFunction {
return nil
Expand Down
5 changes: 5 additions & 0 deletions SwiftCompilerSources/Sources/SIL/Instruction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,11 @@ final public class UnmanagedAutoreleaseValueInst : RefCountingInst {}

final public class DestroyValueInst : Instruction, UnaryInstruction {
public var destroyedValue: Value { operand.value }

/// True if this `destroy_value` is inside a dead-end block is only needed to formally
/// end the lifetime of its operand.
/// Such `destroy_value` instructions are lowered to no-ops.
public var isDeadEnd: Bool { bridged.DestroyValueInst_isDeadEnd() }
}

final public class DestroyAddrInst : Instruction, UnaryInstruction {
Expand Down
26 changes: 26 additions & 0 deletions SwiftCompilerSources/Sources/SIL/Utilities/AccessUtils.swift
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,17 @@ private extension PointerToAddressInst {
}
return walker.result
}

var resultOfGlobalAddressorCall: GlobalVariable? {
if isStrict,
let apply = pointer as? ApplyInst,
let callee = apply.referencedFunction,
let global = callee.globalOfGlobalInitFunction
{
return global
}
return nil
}
}

/// The `EnclosingScope` of an access is the innermost `begin_access`
Expand Down Expand Up @@ -507,6 +518,9 @@ private struct AccessPathWalker : AddressUseDefWalker {
if let p2ai = address as? PointerToAddressInst {
if let originatingAddr = p2ai.originatingAddress {
return walkUp(address: originatingAddr, path: path)
} else if let global = p2ai.resultOfGlobalAddressorCall {
self.result = AccessPath(base: .global(global), projectionPath: path.projectionPath)
return .continueWalk
} else {
self.result = AccessPath(base: .pointer(p2ai), projectionPath: path.projectionPath)
return .continueWalk
Expand Down Expand Up @@ -628,3 +642,15 @@ extension ValueUseDefWalker where Path == SmallProjectionPath {
}
}
}

extension Function {
public var globalOfGlobalInitFunction: GlobalVariable? {
if isGlobalInitFunction,
let ret = returnInstruction,
let atp = ret.returnedValue as? AddressToPointerInst,
let ga = atp.address as? GlobalAddrInst {
return ga.global
}
return nil
}
}
113 changes: 113 additions & 0 deletions include/swift/AST/ASTBridging.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "swift/AST/Attr.h"
#include "swift/AST/DiagnosticConsumer.h"
#include "swift/AST/DiagnosticEngine.h"
#include "swift/AST/IfConfigClauseRangeInfo.h"
#include "swift/AST/Stmt.h"
#endif

Expand Down Expand Up @@ -190,6 +191,75 @@ bool BridgedASTContext_langOptsHasFeature(BridgedASTContext cContext,
SWIFT_NAME("getter:BridgedASTContext.majorLanguageVersion(self:)")
unsigned BridgedASTContext_majorLanguageVersion(BridgedASTContext cContext);

SWIFT_NAME("BridgedASTContext.langOptsCustomConditionSet(self:_:)")
bool BridgedASTContext_langOptsCustomConditionSet(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsHasFeatureNamed(self:_:)")
bool BridgedASTContext_langOptsHasFeatureNamed(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsHasAttributeNamed(self:_:)")
bool BridgedASTContext_langOptsHasAttributeNamed(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsIsActiveTargetOS(self:_:)")
bool BridgedASTContext_langOptsIsActiveTargetOS(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsIsActiveTargetArchitecture(self:_:)")
bool BridgedASTContext_langOptsIsActiveTargetArchitecture(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsIsActiveTargetEnvironment(self:_:)")
bool BridgedASTContext_langOptsIsActiveTargetEnvironment(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsIsActiveTargetRuntime(self:_:)")
bool BridgedASTContext_langOptsIsActiveTargetRuntime(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("BridgedASTContext.langOptsIsActiveTargetPtrAuth(self:_:)")
bool BridgedASTContext_langOptsIsActiveTargetPtrAuth(BridgedASTContext cContext,
BridgedStringRef cName);

SWIFT_NAME("getter:BridgedASTContext.langOptsTargetPointerBitWidth(self:)")
unsigned BridgedASTContext_langOptsTargetPointerBitWidth(BridgedASTContext cContext);

SWIFT_NAME("BridgedASTContext.langOptsGetTargetAtomicBitWidths(self:_:)")
SwiftInt BridgedASTContext_langOptsGetTargetAtomicBitWidths(BridgedASTContext cContext,
SwiftInt* _Nullable * _Nonnull cComponents);

enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedEndianness : size_t {
EndianLittle,
EndianBig,
};

SWIFT_NAME("getter:BridgedASTContext.langOptsTargetEndianness(self:)")
BridgedEndianness BridgedASTContext_langOptsTargetEndianness(BridgedASTContext cContext);

SWIFT_NAME("BridgedASTContext.langOptsGetLanguageVersion(self:_:)")
SwiftInt BridgedASTContext_langOptsGetLanguageVersion(BridgedASTContext cContext,
SwiftInt* _Nullable * _Nonnull cComponents);

SWIFT_NAME("BridgedASTContext.langOptsGetCompilerVersion(self:_:)")
SwiftInt BridgedASTContext_langOptsGetCompilerVersion(BridgedASTContext cContext,
SwiftInt* _Nullable * _Nonnull cComponents);

enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedCanImportVersion : size_t {
CanImportUnversioned,
CanImportVersion,
CanImportUnderlyingVersion,
};

SWIFT_NAME("BridgedASTContext.canImport(self:importPath:location:versionKind:versionComponents:numVersionComponents:)")
bool BridgedASTContext_canImport(BridgedASTContext cContext,
BridgedStringRef importPath,
BridgedSourceLoc canImportLoc,
BridgedCanImportVersion versionKind,
const SwiftInt * _Nullable versionComponents,
SwiftInt numVersionComponents);

//===----------------------------------------------------------------------===//
// MARK: AST nodes
//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -1844,6 +1914,49 @@ BridgedParameterList BridgedParameterList_createParsed(
BridgedASTContext cContext, BridgedSourceLoc cLeftParenLoc,
BridgedArrayRef cParameters, BridgedSourceLoc cRightParenLoc);

//===----------------------------------------------------------------------===//
// MARK: #if handling
//===----------------------------------------------------------------------===//

/// Bridged version of IfConfigClauseRangeInfo::ClauseKind.
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedIfConfigClauseKind : size_t {
IfConfigActive,
IfConfigInactive,
IfConfigEnd
};

/// Bridged version of IfConfigClauseRangeInfo.
struct BridgedIfConfigClauseRangeInfo {
BridgedSourceLoc directiveLoc;
BridgedSourceLoc bodyLoc;
BridgedSourceLoc endLoc;
BridgedIfConfigClauseKind kind;

#ifdef USED_IN_CPP_SOURCE
swift::IfConfigClauseRangeInfo unbridged() const {
swift::IfConfigClauseRangeInfo::ClauseKind clauseKind;
switch (kind) {
case IfConfigActive:
clauseKind = swift::IfConfigClauseRangeInfo::ActiveClause;
break;

case IfConfigInactive:
clauseKind = swift::IfConfigClauseRangeInfo::InactiveClause;
break;

case IfConfigEnd:
clauseKind = swift::IfConfigClauseRangeInfo::EndDirective;
break;
}

return swift::IfConfigClauseRangeInfo(directiveLoc.unbridged(),
bodyLoc.unbridged(),
endLoc.unbridged(),
clauseKind);
}
#endif
};

//===----------------------------------------------------------------------===//
// MARK: Plugins
//===----------------------------------------------------------------------===//
Expand Down
Loading