compnerd
(Saleem Abdulrasool)
1
Working through some of the last remaining stdlib/Interpreter test failures, I'm finding that one of the choices that is causing problems is the use of the ClangImporter to import headers in some interesting tests (like unions-and-bitfields).
The problem is that #import is a keyword that conflicts on Windows as it is traditionally used for TLB (type library) imports for (D)COM. However, clang will treat it as the normal #import as per ObjC if we change the language to Objective-C rather than C.
The approaches that I see to handle this is:
- always use objective-c as the language irrespective of the platform
- change the importer to use
#include
- change the importer to switch between
#include and #import based on whether ObjC interop is enabled
Personally, I think that option 2 is the nicest as it provides the most consistent behaviour, but, I can see it causing some problems with some of the tests.
CC: @jrose
jrose
(Jordan Rose)
2
(1) is dangerous on Linux, so I don't think we can do it right away. However, there is actually a semantic effect of #import that's relied upon in some cases (specifically, in unit test bridging headers that import an app's bridging header): the target header is only included once. We haven't really supporting bridging headers anywhere but Apple platforms, though, and we've also long wanted to kill the "implicitly import a bridging header to match what the debugger does" behavior (but haven't figured out how). So we might have to go with (3).