Files
swift-mirror/test/Interop/Cxx/class/Inputs/module.modulemap
Egor Zhdan 6943986c71 [cxx-interop] Import private fields of C++ structs
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
2024-11-12 12:47:26 +00:00

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
}