1/* Check if finding multiple signatures for a method is handled gracefully
2   when method lookup succeeds (see also method-7.m).  */
3/* Contributed by Ziemowit Laski <zlaski@apple.com>  */
4/* { dg-do compile } */
5/* { dg-options "-Wstrict-selector-match" } */
6
7
8#include "../objc-obj-c++-shared/TestsuiteObject.h"
9
10@protocol MyObject
11- (id)initWithData:(TestsuiteObject *)data;
12@end
13
14@protocol SomeOther
15- (id)initWithData:(int)data;
16@end
17
18@protocol MyCoding
19- (id)initWithData:(id<MyObject, MyCoding>)data;
20@end
21
22@interface NTGridDataObject: TestsuiteObject <MyCoding>
23{
24    TestsuiteObject<MyCoding> *_data;
25}
26+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data;
27@end
28
29@implementation NTGridDataObject
30- (id)initWithData:(id<MyObject, MyCoding>)data {
31  return data;
32}
33+ (NTGridDataObject*)dataObject:(id<MyObject, MyCoding>)data
34{
35    NTGridDataObject *result = [[NTGridDataObject alloc] initWithData:data];
36    /* { dg-warning "multiple methods named .\\-initWithData:. found" "" { target *-*-* } 35 } */
37    /* { dg-message "using .\\-\\(id\\)initWithData:\\(TestsuiteObject \\*\\)data." "" { target *-*-* } 11 } */
38    /* { dg-message "also found .\\-\\(id\\)initWithData:\\(id <MyObject, MyCoding>\\)data." "" { target *-*-* } 19 } */
39    /* { dg-message "also found .\\-\\(id\\)initWithData:\\(int\\)data." "" { target *-*-* } 15 } */
40
41    /* The following warning is a consequence of picking the "wrong" method signature.  */
42    /* { dg-warning "passing argument 1 of .initWithData:. from distinct Objective\\-C type" "" { target *-*-* } 35 } */
43    return result;
44}
45@end
46