On Jul 15, 2011, at 3:04 PM, Argyrios Kyrtzidis wrote:

> 
> On Jul 15, 2011, at 2:49 PM, Douglas Gregor wrote:
> 
>> 
>> On Jul 15, 2011, at 2:39 PM, Argyrios Kyrtzidis wrote:
>> 
>>> Author: akirtzidis
>>> Date: Fri Jul 15 16:39:32 2011
>>> New Revision: 135304
>>> 
>>> URL: http://llvm.org/viewvc/llvm-project?rev=135304&view=rev
>>> Log:
>>> The canonical decl for an ObjCImplDecl is it's interface class. Fixes 
>>> rdar://8728637.
>>> 
>>> Modified:
>>>  cfe/trunk/include/clang/AST/DeclObjC.h
>>> 
>>> Modified: cfe/trunk/include/clang/AST/DeclObjC.h
>>> URL: 
>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclObjC.h?rev=135304&r1=135303&r2=135304&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/AST/DeclObjC.h (original)
>>> +++ cfe/trunk/include/clang/AST/DeclObjC.h Fri Jul 15 16:39:32 2011
>>> @@ -1122,6 +1122,12 @@
>>>     ClassInterface(classInterface) {}
>>> 
>>> public:
>>> +  virtual Decl *getCanonicalDecl() {
>>> +    if (Decl *interface = getClassInterface())
>>> +      return interface;
>>> +    return this;
>>> +  }
>>> +
>> 
>> I think this change should be limited to libclang's 
>> clang_getCanonicalCursor(). Sema and AST are almost certainly not ready for 
>> getCanonicalCursor() to change the kind of declaration node except in the 
>> *very* limited cases corresponding to using declarations.
> 
> How does it affect negatively Sema and AST, could you give an example ?

It's assumed that calling getCanonicalDecl() on a declaration returns a 
declaration of the same kind… but interfaces and implementations are handled 
very differently (especially in Sema), so getCanonicalDecl() should not map one 
to the other.

It's really only in the libclang world where we want to equate interfaces and 
implementations. The same issue occurs with categories and category 
implementations.

        - Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to