[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