Commits

Doug Gregor committed 3df2c11c8a5
Diagnose Objective-C method overrides not reflected as Swift overrides. Diagnose cases where the use of @objc will produce Objective-C methods that end up overriding an Objective-C method in a superclass, when that override is not properly represented as an override in the Swift type system. This can happen when the Objective-C methods are produced by different kinds of entities. For example: class Super { @objc var property: Int } class Sub : Super { @objc func setProperty(property: Int) { } } In Swift, Sub.setProperty and Super.property are completely unrelated. However, both produce an Objective-C instance method with the selector "setProperty:", so we end up with unexpected overriding behavior. Diagnose this whenever it occurs, regardless of the kind of @objc entity that produced the Objective-C methods: initializers, deinitializers, methods, properties, or subscripts. Implements the rest of the intended functionality of rdar://problem/18391046, with the caveat that there are two remaining classes of bugs: 1) Superclasses defined in a module (or imported from a Clang module) aren't handled properly yet; we might not see those methods. 2) We won't properly detect all of these failures when the methods are scattered across different source files in the same module. Swift SVN r23170