From d81e30b8d3f683e92f462a86bef5333b936998a2 Mon Sep 17 00:00:00 2001 From: Richard Frith-Macdonald Date: Tue, 23 Nov 2010 19:20:54 +0000 Subject: [PATCH] In libobjc/: 2010-11-23 Richard Frith-Macdonald In libobjc/: 2010-11-23 Richard Frith-Macdonald * sendmsg.c (get_imp): Fixed call to __objc_get_forward_imp to pass nil as the receiver since we don't know the receiver at this point. From-SVN: r167092 --- libobjc/ChangeLog | 6 ++++++ libobjc/sendmsg.c | 9 +++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 02be0ebd0e8..08e74a8405e 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,9 @@ +2010-11-23 Richard Frith-Macdonald + + * sendmsg.c (get_imp): Fixed call to __objc_get_forward_imp to + pass nil as the receiver since we don't know the receiver at this + point. + 2010-11-18 Nicola Pero * ivars.c: Include stdlib.h. diff --git a/libobjc/sendmsg.c b/libobjc/sendmsg.c index ee1f0a36150..7f7024c275a 100644 --- a/libobjc/sendmsg.c +++ b/libobjc/sendmsg.c @@ -189,8 +189,13 @@ get_imp (Class class, SEL sel) /* The dispatch table has been installed, and the method is not in the dispatch table. So the method just doesn't exist for the class. Return the forwarding - implementation. */ - res = __objc_get_forward_imp ((id)class, sel); + implementation. We don't know the receiver (only its + class), so we have to pass 'nil' as the first + argument. Passing the class as first argument is + wrong because the class is not the receiver; it can + result in us calling a class method when we want an + instance method of the same name. */ + res = __objc_get_forward_imp (nil, sel); } } }