mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
While private and protected fields coming from C++ cannot be accessed from Swift, they can affect Swift typechecking. For instance, the Swift typechecker mechanism that adds implicit `Sendable` conformances works by iterating over all of the struct's fields and checking whether all of them are `Sendable`. This logic was broken for C++ types with private fields, since they were never accounted for. This resulted in erroneous implicit `Sendable` confromances being added. Same applies for `BitwiseCopyable`. In addition to this, ClangImporter used to mistakenly mark all C++ structs that have private fields as types with unreferenceable storage, which hampered optimizations. As a side effect of this change, we now also provide a better diagnostic when someone tries to access a private C++ field from Swift. rdar://134430857
154 lines
2.5 KiB
Plaintext
154 lines
2.5 KiB
Plaintext
module AccessSpecifiers {
|
|
header "access-specifiers.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module TypeClassification {
|
|
header "type-classification.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module Constructors {
|
|
header "constructors.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ConstructorsObjC {
|
|
header "constructors-objc.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module CustomNewOperator {
|
|
header "custom-new-operator.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module Destructors {
|
|
header "destructors.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module DestructorsWithTemporaryValues {
|
|
header "destructors-with-temporary-values.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module Extensions {
|
|
header "extensions.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module LoadableTypes {
|
|
header "loadable-types.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module MemberwiseInitializer {
|
|
header "memberwise-initializer.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module MemoryLayout {
|
|
header "memory-layout.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module MemberVariables {
|
|
header "member-variables.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module MutableMembers {
|
|
header "mutable-members.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module MutabilityAnnotations {
|
|
header "mutability-annotations.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module NoDiscard {
|
|
header "nodiscard.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ProtocolConformance {
|
|
header "protocol-conformance.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module Sendable {
|
|
header "sendable.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module StructuredBindingsGetMethod {
|
|
header "structured-bindings-get-method.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module SynthesizedInitializers {
|
|
header "synthesized-initializers.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module DebugInfo {
|
|
header "debug-info.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module NestedRecords {
|
|
header "nested-records.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module LinkedRecords {
|
|
header "linked-records.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module InvalidNestedStruct {
|
|
header "invalid-nested-struct.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ClassProtocolNameClash {
|
|
header "class-protocol-name-clash.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module DictionaryOfNSStrings {
|
|
header "dictionary-of-nsstrings.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ForwardDeclaredCxxRecord {
|
|
header "forward-declared-cxx-record.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ReturnsLargeClass {
|
|
header "returns-large-class.h"
|
|
}
|
|
|
|
module ForwardDeclaredInNamespace {
|
|
header "forward-declared-in-namespace.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module ConformsTo {
|
|
header "conforms-to.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module CopyMoveAssignment {
|
|
header "copy-move-assignment.h"
|
|
requires cplusplus
|
|
}
|
|
|
|
module Closure {
|
|
header "closure.h"
|
|
requires cplusplus
|
|
}
|