Skip to content

Commit 222c704

Browse files
Merge pull request #5515 from swiftwasm/main
[pull] swiftwasm from main
2 parents c209503 + 2db4a03 commit 222c704

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+554
-136
lines changed

include/swift/AST/Decl.h

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ class alignas(1 << DeclAlignInBits) Decl : public ASTAllocated<Decl> {
659659
HasAnyUnavailableValues : 1
660660
);
661661

662-
SWIFT_INLINE_BITFIELD(ModuleDecl, TypeDecl, 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1,
662+
SWIFT_INLINE_BITFIELD(ModuleDecl, TypeDecl, 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1,
663663
/// If the module is compiled as static library.
664664
StaticLibrary : 1,
665665

@@ -709,7 +709,10 @@ class alignas(1 << DeclAlignInBits) Decl : public ASTAllocated<Decl> {
709709

710710
/// If the map from @objc provided name to top level swift::Decl in this
711711
/// module is populated
712-
ObjCNameLookupCachePopulated : 1
712+
ObjCNameLookupCachePopulated : 1,
713+
714+
/// Whether this module has been built with C++ interoperability enabled.
715+
HasCxxInteroperability : 1
713716
);
714717

715718
SWIFT_INLINE_BITFIELD(PrecedenceGroupDecl, Decl, 1+2,
@@ -5293,10 +5296,10 @@ class AbstractStorageDecl : public ValueDecl {
52935296

52945297
/// Overwrite the registered implementation-info. This should be
52955298
/// used carefully.
5296-
void setImplInfo(StorageImplInfo implInfo) {
5297-
LazySemanticInfo.ImplInfoComputed = 1;
5298-
ImplInfo = implInfo;
5299-
}
5299+
void setImplInfo(StorageImplInfo implInfo);
5300+
5301+
/// Cache the implementation-info, for use by the request-evaluator.
5302+
void cacheImplInfo(StorageImplInfo implInfo);
53005303

53015304
ReadImplKind getReadImpl() const {
53025305
return getImplInfo().getReadImpl();
@@ -5311,9 +5314,7 @@ class AbstractStorageDecl : public ValueDecl {
53115314

53125315
/// Return true if this is a VarDecl that has storage associated with
53135316
/// it.
5314-
bool hasStorage() const {
5315-
return getImplInfo().hasStorage();
5316-
}
5317+
bool hasStorage() const;
53175318

53185319
/// Return true if this storage has the basic accessors/capability
53195320
/// to be mutated. This is generally constant after the accessors are

include/swift/AST/DiagnosticsSema.def

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,6 +874,12 @@ ERROR(need_hermetic_seal_to_import_module,none,
874874
"module %0 was built with -experimental-hermetic-seal-at-link, but "
875875
"current compilation does not have -experimental-hermetic-seal-at-link",
876876
(Identifier))
877+
ERROR(need_cxx_interop_to_import_module,none,
878+
"module %0 was built with C++ interoperability enabled, but "
879+
"current compilation does not enable C++ interoperability",
880+
(Identifier))
881+
NOTE(enable_cxx_interop_docs,none,
882+
"visit https://www.swift.org/documentation/cxx-interop/project-build-setup to learn how to enable C++ interoperability", ())
877883

878884
ERROR(modularization_issue_decl_moved,Fatal,
879885
"reference to %select{top-level declaration|type}0 %1 broken by a context change; "
@@ -7181,6 +7187,13 @@ ERROR(invalid_macro_role_for_macro_syntax,none,
71817187
(unsigned))
71827188
ERROR(macro_cannot_introduce_names,none,
71837189
"'%0' macros are not allowed to introduce names", (StringRef))
7190+
ERROR(macro_accessor_missing_from_expansion,none,
7191+
"expansion of macro %0 did not produce a %select{non-|}1observing "
7192+
"accessor",
7193+
(DeclName, bool))
7194+
ERROR(macro_init_accessor_not_documented,none,
7195+
"expansion of macro %0 produced an unexpected 'init' accessor",
7196+
(DeclName))
71847197

71857198
ERROR(macro_resolve_circular_reference, none,
71867199
"circular reference resolving %select{freestanding|attached}0 macro %1",

include/swift/AST/Evaluator.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,12 @@ class Evaluator {
316316
cache.insert<Request>(request, std::move(output));
317317
}
318318

319+
template<typename Request,
320+
typename std::enable_if<!Request::hasExternalCache>::type* = nullptr>
321+
bool hasCachedResult(const Request &request) {
322+
return cache.find_as(request) != cache.end<Request>();
323+
}
324+
319325
/// Do not introduce new callers of this function.
320326
template<typename Request,
321327
typename std::enable_if<!Request::hasExternalCache>::type* = nullptr>

include/swift/AST/Module.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,14 @@ class ModuleDecl
654654
Bits.ModuleDecl.HasHermeticSealAtLink = enabled;
655655
}
656656

657+
/// Returns true if this module was built with C++ interoperability enabled.
658+
bool hasCxxInteroperability() const {
659+
return Bits.ModuleDecl.HasCxxInteroperability;
660+
}
661+
void setHasCxxInteroperability(bool enabled = true) {
662+
Bits.ModuleDecl.HasCxxInteroperability = enabled;
663+
}
664+
657665
/// \returns true if this module is a system module; note that the StdLib is
658666
/// considered a system module.
659667
bool isSystemModule() const {

include/swift/AST/NameLookup.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,13 @@ void forEachPotentialResolvedMacro(
556556
llvm::function_ref<void(MacroDecl *, const MacroRoleAttr *)> body
557557
);
558558

559+
/// For each macro with the given role that might be attached to the given
560+
/// declaration, call the body.
561+
void forEachPotentialAttachedMacro(
562+
Decl *decl, MacroRole role,
563+
llvm::function_ref<void(MacroDecl *macro, const MacroRoleAttr *)> body
564+
);
565+
559566
} // end namespace namelookup
560567

561568
/// Describes an inherited nominal entry.

include/swift/AST/TypeCheckRequests.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1686,6 +1686,26 @@ class InitAccessorPropertiesRequest :
16861686
ArrayRef<VarDecl *>
16871687
evaluate(Evaluator &evaluator, NominalTypeDecl *decl) const;
16881688

1689+
// Evaluation.
1690+
bool evaluate(Evaluator &evaluator, AbstractStorageDecl *decl) const;
1691+
1692+
public:
1693+
bool isCached() const { return true; }
1694+
};
1695+
1696+
class HasStorageRequest :
1697+
public SimpleRequest<HasStorageRequest,
1698+
bool(AbstractStorageDecl *),
1699+
RequestFlags::Cached> {
1700+
public:
1701+
using SimpleRequest::SimpleRequest;
1702+
1703+
private:
1704+
friend SimpleRequest;
1705+
1706+
// Evaluation.
1707+
bool evaluate(Evaluator &evaluator, AbstractStorageDecl *decl) const;
1708+
16891709
public:
16901710
bool isCached() const { return true; }
16911711
};

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,9 @@ SWIFT_REQUEST(TypeChecker, SelfAccessKindRequest, SelfAccessKind(FuncDecl *),
302302
SWIFT_REQUEST(TypeChecker, StorageImplInfoRequest,
303303
StorageImplInfo(AbstractStorageDecl *), SeparatelyCached,
304304
NoLocationInfo)
305+
SWIFT_REQUEST(TypeChecker, HasStorageRequest,
306+
bool(AbstractStorageDecl *), Cached,
307+
NoLocationInfo)
305308
SWIFT_REQUEST(TypeChecker, StoredPropertiesAndMissingMembersRequest,
306309
ArrayRef<Decl *>(NominalTypeDecl *), Cached, NoLocationInfo)
307310
SWIFT_REQUEST(TypeChecker, StoredPropertiesRequest,

include/swift/Basic/LangOptions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@ namespace swift {
313313
/// Imports getters and setters as computed properties.
314314
bool CxxInteropGettersSettersAsProperties = false;
315315

316+
/// Should the compiler require C++ interoperability to be enabled
317+
/// when importing Swift modules that enable C++ interoperability.
318+
bool RequireCxxInteropToImportCxxInteropModule = true;
319+
316320
/// On Darwin platforms, use the pre-stable ABI's mark bit for Swift
317321
/// classes instead of the stable ABI's bit. This is needed when
318322
/// targeting OSes prior to macOS 10.14.4 and iOS 12.2, where

include/swift/Option/FrontendOptions.td

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,11 @@ def cxx_interop_getters_setters_as_properties :
865865
HelpText<"Import getters and setters as computed properties in Swift">,
866866
Flags<[FrontendOption, HelpHidden]>;
867867

868+
def cxx_interop_disable_requirement_at_import :
869+
Flag<["-"], "disable-cxx-interop-requirement-at-import">,
870+
HelpText<"Do not require C++ interoperability to be enabled when importing a Swift module that enables C++ interoperability">,
871+
Flags<[FrontendOption, HelpHidden]>;
872+
868873
def use_malloc : Flag<["-"], "use-malloc">,
869874
HelpText<"Allocate internal data structures using malloc "
870875
"(for memory debugging)">;

include/swift/SIL/SILModule.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,9 +395,7 @@ class SILModule {
395395
/// Action to be executed for serializing the SILModule.
396396
ActionCallback SerializeSILAction;
397397

398-
#ifndef NDEBUG
399398
BasicBlockNameMapType basicBlockNames;
400-
#endif
401399

402400
SILModule(llvm::PointerUnion<FileUnit *, ModuleDecl *> context,
403401
Lowering::TypeConverter &TC, const SILOptions &Options,

0 commit comments

Comments
 (0)