Commit Graph

18 Commits

Author SHA1 Message Date
Becca Royal-Gordon
fd84e7273d Rename module.map -> module.modulemap in tests
The legacy `module.map` spelling of module map files was deprecated by llvm/llvm-project#75142 and clang expects to remove support for them in the future. Switch all tests to use the supported spelling.

Fixes rdar://128431478.
2024-08-12 17:47:26 -07:00
Michael Spencer
b2640e15e4 [test] Rename all module.map files to module.modulemap
`module.map` as a module map name has been discouraged since 2014, and
Clang will soon warn on its usage. This patch renames all instances of
`module.map` in the Swift tests to `module.modulemap` in preparation
for this change to Clang.

rdar://106123303
2023-08-21 15:58:59 -07:00
Apollo Zhu
cde0ce7fd7 Add test for canImport submodule in mixed framework 2022-04-01 13:10:17 -07:00
Jordan Rose
b00bc829f8 [ClangImporter] Fall back to Swift class names when resolving @class (#27921)
Christopher Rogers' (good) work in 49fd5acbb2 caught places where
the Swift compiler was allowing a @class to resolve to a Swift class
even if that class had a conflicting Objective-C name, or wasn't
intended to be exposed to Objective-C at all. Unfortunately, this
broke source compatibility in projects where people were relying on
this. Restore that functionality, but only as a fallback; matching the
Objective-C name is better than matching the Swift name.

rdar://problem/56681046
2019-10-29 09:50:49 -07:00
Christopher Rogers
eff9ec4735 [ClangImporter] Fix edge cases where custom name matches native name
The code does naive lookup of Swift types using the type name, but sometimes the Swift type we're looking for only has that name in its @objc attribute. This change makes the compiler exclude certain Swift declarations from matching even if the Swift name is the same (namely, not being available in Obj-C or having a mismatched `@objc` name) and continue to find the correct declaration without using lookup by name.

Fixes SR-4827
2019-10-23 10:40:33 +09:00
Jordan Rose
caa5be84d5 [ClangImporter] Use external_source_symbol to identify Swift decls (#27355)
...rather than replacing particular macros with an 'annotate'
attribute and then looking for that. This isn't /really/ any
particular win except maybe ever-so-slightly faster module imports
(with one fewer attribute being added to each declaration in a
mixed-source header).

This doesn't remove the SWIFT_CLASS_EXTRA, SWIFT_PROTOCOL_EXTRA, or
SWIFT_ENUM_EXTRA macros from PrintAsObjC (note that
SWIFT_EXTENSION_EXTRA was never used). They're not exactly needed
anymore, but they're not doing any harm if someone else is using them.
2019-09-25 15:30:03 -07:00
Jordan Rose
734b2cf986 Don't create import loops in mixed-source frameworks w/ submodules
Swift handles Clang submodules as far as controlling visibility, but
pretends that all the declarations live in the top-level module for
the purposes of lookup. This was interacting poorly with another
feature: automatically importing the Swift part of a mixed-source
framework and using that as the "presentation" of a Clang module...
or a submodule in the same framework. Therefore, if you are

- compiling the Swift part of a mixed-source framework, and
- importing one of the framework's (Clang) submodules

name binding would say that the current file imports the Swift module
currently being compiled, in addition to the Clang module we actually
want. Just break the cycle in that case.
2019-07-09 10:36:23 -07:00
Jordan Rose
03c2ff47b0 [test] Make sure we don't try to autolink the framework we're building (#20245)
...even the Clang part of it.

rdar://problem/42604464
2018-11-05 11:35:28 -08:00
Jordan Rose
1327d38436 Add test case for problem found by rdar://problem/43312726 (#18855)
This was fixed by Doug's work in e15f67e453. It isn't actually the
underlying problem in rdar://problem/43312726, but it's worth
recording the test case so we don't regress.
2018-08-20 16:40:37 -07:00
Jordan Rose
53e0fad181 Assume it's okay for decls in a cross-module extension to be public (#18741)
...even if the base decl isn't.

This isn't normally possible, but it can come up when an imported type
is import-as-member'd onto an internal Swift declaration. This isn't
even such an unreasonable thing to do, since internal Swift
declarations are exposed in the generated header for an app.

rdar://problem/43312660
2018-08-16 10:06:54 -07:00
Jordan Rose
480ac06c95 [test] Tweak resolve-cross-language.swift to avoid a Clang bug (#18406)
We don't really care about modules without `export *`, but I filed
https://bugs.llvm.org/show_bug.cgi?id=38392 anyway.

rdar://problem/42570029
2018-07-31 13:31:14 -07:00
Saleem Abdulrasool
bdb7901a1c test: modernise nullability attributes (NFC)
Use the modern spelling for the nullability attributes in the test mock
headers.  Currently, this was relying on the predefined macros from
clang to work.  However, those are only available on Darwin targets.
This is needed to make the mock environments more portable.
2017-11-01 23:27:33 -07:00
Jordan Rose
fbf5a5162a [ClangImporter] Test for not being in a module correctly. (#9992)
For the Optional<Module *> returned by getClangSubmoduleForDecl, the
outside Optional specifies whether there's an answer at all. That
answer can still be null if the declaration comes from a bridging
header.  In this particular case, we're guaranteed to get an answer,
but that answer may be null.

rdar://problem/32463543
2017-05-31 09:24:51 -07:00
Graydon Hoare
416a12eafe [Clang Importer] Test for deferred module imports, rdar://30615193 2017-02-27 15:38:26 -08:00
Jordan Rose
e6a85f6602 [ClangImporter] Resolve forward declarations before importing names. (#7555)
This allows a previously-working case of Objective-C forward-declaring
a type in a /different/ Swift module to continue working, as long as
the Swift context being compiled manages to import the other module
properly (including its generated header). This isn't really our
recommended pattern---that would be to @import the module in the
bridging header and forego the forward declaration---but it doesn't
cost much to keep it working. It's also a place where textual and
precompiled bridging headers behaved differently, because precompiled
ones are processed much earlier.

https://bugs.swift.org/browse/SR-3798
2017-02-20 13:24:03 -08:00
Jordan Rose
81e2638c09 [SILOpt] Don't do callee analysis on destructors of imported classes. (#6313)
If by chance we haven't imported the members of a particular class,
SIL should not fault them in if at all possible.

The test case was a pain to come up with; it involves a class using
a forward-declared protocol that's actually defined in Swift /in a
non-primary file/, where that protocol is never mentioned in the
primary file and the class's members are never accessed otherwise.

rdar://problem/29535170
2016-12-21 13:13:56 -08:00
Jordan Rose
b5e4e8aaea [ClangImporter] Not all protocols adopted in ObjC come from ObjC. (#6320)
So when sorting, don't just jump directly to the Clang decl and get
its name, because there might not be a Clang decl; instead, use the
'objc' attribute if there is one and the protocol's base name if
not. We're not using ProtocolType::compareProtocols because we'd
rather not depend on knowing for sure which Clang module a protocol
lives in.

This wasn't caught until now because it required adopting a protocol
in Objective-C that itself adopted (directly or indirectly) at least
two protocols, at least one of which originally came from Swift.

rdar://problem/26232085
2016-12-15 18:28:11 -08:00
Jordan Rose
61798ff6ec [test] Rename test/ClangModules to test/ClangImporter. (#5618)
...to match the component in include/ and lib/. No content change.
2016-11-02 18:00:53 -07:00