mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
In #69257, we modified `ObjCReason` to carry a pointer to the @implementation attribute for the `MemberOfObjCImplementationExtension` kind. This made it mark the @implementation attribute as invalid, suppressing diagnostics from the ObjCImplementationChecker. However, invalidating the attribute *also* causes it to be skipped by serialization. That isn’t a problem if the diagnostics are errors, since we’ll never emit the serialized module, but #74135 softened these diagnostics to warnings for early adopters. The upshot was that if Swift emitted one of these warnings when it compiled a library, clients of that library would see the objcImpl extension as a normal extension instead. This would cause various kinds of mischief: ambiguous name lookups because implementations weren’t being excluded, overrides failing because an implementation was `public` instead of `open`, asserts and crashes in SILGen and IRGen because stored properties were found in seemingly normal extensions, etc. Fix this by setting a separate bit on ObjCImplementationAttr, rather than the invalid bit, and modifying the implementation checker to manually suppress many diagnostics when that bit is set. Fixes rdar://134730183.
13 lines
161 B
Plaintext
13 lines
161 B
Plaintext
|
|
module CLibrary {
|
|
header "CLibrary.h"
|
|
}
|
|
|
|
module RawLayoutCXX {
|
|
header "raw_layout_cxx.h"
|
|
}
|
|
|
|
module objc_implementation {
|
|
header "objc_implementation.h"
|
|
}
|