Closed
Description
Previous ID | SR-13032 |
Radar | rdar://problem/64517049 |
Original Reporter | martinboehme (JIRA User) |
Type | Bug |
Additional Detail from JIRA
Votes | 0 |
Component/s | Compiler |
Labels | Bug, ParseableInterfaces |
Assignee | None |
Priority | Medium |
md5: 13b4c87976347810d07df29fa015e2a2
Issue Description:
The following commit contains a failing test demonstrating the problem:
It generates a .swiftinterface
for module MainModule
, but this .swiftinterface
then fails to compile with the error message:
MainModule.swiftinterface:6:46: error: cannot find type 'ForeignA' in scope
public func funcTakingForeignStruct(_ param: ForeignA.ForeignStruct)
^~~~~~~~
To summarize the situation:
- The Swift module
SubModule
imports Clang modulesForeignA
andForeignB
. BothForeignA
andForeignB
include a textual header containing the structForeignStruct
.
- SubModule re-exports
ForeignB
but notForeignA
.ForeignStruct
is therefore available to clients ofSubModule
; those clients can use it either using the unqualified nameForeignStruct
or the qualified nameForeignB.ForeignStruct
, but notForeignA.ForeignStruct
(becauseSubModule
doesn't re-exportForeignA
).
- The Swift module
MainModule
importsSubModule
and usesForeignStruct
in the signature offuncTakingForeignStruct
. WhenMainModule
is compiled to a.swiftinterface
file, that signature erroneously refers toForeignStruct
asForeignA.ForeignStruct
instead ofForeignB.ForeignStruct
. Because of this, the resulting.swiftinterface
file does not compile.
I discovered this issue in the course of investigating a CI failure on #32404. The repro above corresponds to the situation in the failing test as follows:
-
SubModule
isGlibc
-
ForeignA
isSwiftOverlayShims
-
ForeignB
isSwiftGlibc
-
The textual header is
sys/time.h
, andForeignStruct
isstruct timeval
I believe this needs to be fixed in TypePrinter::printModuleContext()
, but I'm not sure exactly how.