objc-act.c (build_message_expr): If a class method cannot be found...
2001-09-05 Ziemowit Laski <zlaski@apple.com> * objc/objc-act.c (build_message_expr): If a class method cannot be found, do not issue a warning if a corresponding instance method exists in the root class. 2001-09-05 Ziemowit Laski <zlaski@apple.com> * objc.dg/method-2.m: New. From-SVN: r45428
This commit is contained in:
parent
2d25bf5d52
commit
89fc36051e
@ -1,3 +1,9 @@
|
||||
2001-09-05 Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
* objc/objc-act.c (build_message_expr): If a class method cannot
|
||||
be found, do not issue a warning if a corresponding instance
|
||||
method exists in the root class.
|
||||
|
||||
2001-09-05 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/alpha/alpha.c (alpha_expand_mov): Initialize temp.
|
||||
|
@ -5177,8 +5177,7 @@ build_message_expr (mess)
|
||||
method_prototype = lookup_class_method_static (iface, sel_name);
|
||||
}
|
||||
|
||||
if (!method_prototype
|
||||
|| TREE_CODE (method_prototype) != CLASS_METHOD_DECL)
|
||||
if (!method_prototype)
|
||||
{
|
||||
warning ("cannot find class (factory) method.");
|
||||
warning ("return type for `%s' defaults to id",
|
||||
@ -5687,7 +5686,9 @@ lookup_class_method_static (interface, ident)
|
||||
}
|
||||
while (inter);
|
||||
|
||||
/* Simulate wrap around. */
|
||||
/* If no class (factory) method was found, check if an _instance_
|
||||
method of the same name exists in the root class. This is what
|
||||
the Objective-C runtime will do. */
|
||||
return lookup_instance_method_static (root_inter, ident);
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-09-05 Ziemowit Laski <zlaski@apple.com>
|
||||
|
||||
* objc.dg/method-2.m: New.
|
||||
|
||||
2001-09-04 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
PR c++/4203
|
||||
|
31
gcc/testsuite/objc.dg/method-2.m
Normal file
31
gcc/testsuite/objc.dg/method-2.m
Normal file
@ -0,0 +1,31 @@
|
||||
/* Test for lookup of class (factory) methods. */
|
||||
/* Author: Ziemowit Laski <zlaski@apple.com>. */
|
||||
/* { dg-do compile } */
|
||||
|
||||
@interface MyBase
|
||||
- (void) rootInstanceMethod;
|
||||
@end
|
||||
|
||||
@interface MyIntermediate: MyBase
|
||||
@end
|
||||
|
||||
@interface MyDerived: MyIntermediate
|
||||
- (void) instanceMethod;
|
||||
+ (void) classMethod;
|
||||
@end
|
||||
|
||||
@implementation MyDerived
|
||||
- (void) instanceMethod {
|
||||
}
|
||||
|
||||
+ (void) classMethod { /* If a class method is not found, the root */
|
||||
[self rootInstanceMethod]; /* class is searched for an instance method */
|
||||
[MyIntermediate rootInstanceMethod]; /* with the same name. */
|
||||
|
||||
[self instanceMethod]; /* { dg-warning "cannot find class" } */
|
||||
/* { dg-warning "defaults to id" "" { target *-*-* } 25 } */
|
||||
[MyDerived instanceMethod]; /* { dg-warning "cannot find class" } */
|
||||
/* { dg-warning "defaults to id" "" { target *-*-* } 27 } */
|
||||
}
|
||||
@end
|
||||
|
Loading…
Reference in New Issue
Block a user