SIL, @objc, and objc-interop


When ObjC interoperability is disabled, what does @objc in a SIL file mean and how is it supposed to work? I tried adding a SIL parsing assert to ensure that ObjC interop is enabled if @objc is used, but that exposed the fact that sil-opt doesn't seem to have a flag for controlling ObjC interop.


I don't know how it's "supposed to work", but I prefer that information like objc interop be embedded in the IR (SIL) itself. objc interop assumptions are deeper than just a type attribute, and mixing modes should be prohibited.

Ya, the assumptions are definitely deeper. I was just confused by test/IRGen/enum.sil which has some ObjC tests that could run on Linux without the runtime being present, but don't because ObjC interop is disabled. Is there a bug tracking the fact that SIL files need to formalize the ObjC interop status?

I don't see any open bugs and haven't heard anyone else mention the issue.