[cfe-commits] r44682 - /cfe/trunk/Sema/SemaExpr.cpp
Chris Lattner
clattner at apple.com
Sat Dec 8 11:58:55 PST 2007
> URL: http://llvm.org/viewvc/llvm-project?rev=44682&view=rev
> Log:
>
> Lookup methods in the global pool even when a statically typed
> object's class interface isn't in scope!
> As the comment in the code indicates, I'm not fond of this.
> Nevertheless, gcc compat is a goal.
> Here is the case I'm talking about...
>
> #import <Foundation/Foundation.h>
>
> @interface AnyClass : NSObject
> - (NSRect)rect;
> @end
>
> @class Helicopter;
>
> static void func(Helicopter *obj) {
> NSRect r = [obj rect];
> }
>
> ..before this patch, we would warn/error. With this patch,
> everything "just works".
Yuck :). Please add this to the testsuite.
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- cfe/trunk/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/Sema/SemaExpr.cpp Fri Dec 7 14:41:14 2007
> @@ -2245,6 +2245,10 @@
> if (ObjcImplementationDecl *ImpDecl =
> ObjcImplementations[ClassDecl->getIdentifier()])
> Method = ImpDecl->lookupInstanceMethod(Sel);
> + // If we still haven't found a method, look in the global pool.
> + // I am not fond of this behavior, however we conform to what
> gcc does.
> + if (!Method)
> + Method = InstanceMethodPool[Sel].Method;
Generally, please avoid the first person in comments: "This behavior
isn't very desirable, however we need it for GCC compatibility."
Thanks!
-Chris
More information about the cfe-commits
mailing list