Skip to content
  • Douglas Gregor's avatar
    Implement Objective-C Related Result Type semantics. · 33823727
    Douglas Gregor authored
    Related result types apply Cocoa conventions to the type of message
    sends and property accesses to Objective-C methods that are known to
    always return objects whose type is the same as the type of the
    receiving class (or a subclass thereof), such as +alloc and
    -init. This tightens up static type safety for Objective-C, so that we
    now diagnose mistakes like this:
    
    t.m:4:10: warning: incompatible pointer types initializing 'NSSet *'
    with an
          expression of type 'NSArray *' [-Wincompatible-pointer-types]
      NSSet *array = [[NSArray alloc] init];
             ^       ~~~~~~~~~~~~~~~~~~~~~~
    /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:72:1:
    note: 
          instance method 'init' is assumed to return an instance of its
          receiver
          type ('NSArray *')
    - (id)init;
    ^
    
    It also means that we get decent type inference when writing code in
    Objective-C++0x:
    
      auto array = [[NSMutableArray alloc] initWithObjects:@"one",  @"two",nil];
      //    ^ now infers NSMutableArray* rather than id
    
    llvm-svn: 132868
    33823727
Loading