[cfe-commits] r133929 - in /cfe/trunk: test/Index/annotate-tokens.cpp tools/libclang/CIndex.cpp

Douglas Gregor dgregor at apple.com
Mon Jun 27 12:48:41 PDT 2011


On Jun 27, 2011, at 12:42 PM, Argyrios Kyrtzidis wrote:

> Author: akirtzidis
> Date: Mon Jun 27 14:42:20 2011
> New Revision: 133929
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=133929&view=rev
> Log:
> [libclang] Avoid having the cursor of an expression "overwrite" the annotation of the
> variable declaration that it belongs to.
> 
> This can happen for C++ constructor expressions whose range generally
> include the variable declaration, e.g.:
> 
>  MyCXXClass foo; // Make sure we don't annotate 'foo' as a CallExpr cursor.
> 
> rdar://9124499.
> 
> Modified:
>    cfe/trunk/test/Index/annotate-tokens.cpp
>    cfe/trunk/tools/libclang/CIndex.cpp
> 
> Modified: cfe/trunk/test/Index/annotate-tokens.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/annotate-tokens.cpp?rev=133929&r1=133928&r2=133929&view=diff
> ==============================================================================
> --- cfe/trunk/test/Index/annotate-tokens.cpp (original)
> +++ cfe/trunk/test/Index/annotate-tokens.cpp Mon Jun 27 14:42:20 2011
> @@ -17,9 +17,10 @@
> struct S2 { S1 *operator->(); };
> void test3(S2 s2) {
>   s2->f();
> +  X foo;
> }
> 
> -// RUN: c-index-test -test-annotate-tokens=%s:1:1:20:1 %s | FileCheck %s
> +// RUN: c-index-test -test-annotate-tokens=%s:1:1:21:1 %s | FileCheck %s
> // CHECK: Keyword: "struct" [1:1 - 1:7] StructDecl=bonk:1:8 (Definition)
> // CHECK: Identifier: "bonk" [1:8 - 1:12] StructDecl=bonk:1:8 (Definition)
> // CHECK: Punctuation: "{" [1:13 - 1:14] StructDecl=bonk:1:8 (Definition)
> @@ -115,4 +116,7 @@
> // CHECK: Punctuation: "(" [19:8 - 19:9] CallExpr=f:16:18
> // CHECK: Punctuation: ")" [19:9 - 19:10] CallExpr=f:16:18
> // CHECK: Punctuation: ";" [19:10 - 19:11] UnexposedStmt=
> -// CHECK: Punctuation: "}" [20:1 - 20:2] UnexposedStmt=
> +// CHECK: Identifier: "X" [20:3 - 20:4] TypeRef=struct X:7:8
> +// CHECK: Identifier: "foo" [20:5 - 20:8] VarDecl=foo:20:5 (Definition)
> +// CHECK: Punctuation: ";" [20:8 - 20:9] UnexposedStmt=
> +// CHECK: Punctuation: "}" [21:1 - 21:2] UnexposedStmt=
> 
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=133929&r1=133928&r2=133929&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Mon Jun 27 14:42:20 2011
> @@ -4627,6 +4627,24 @@
>     break;
>   }
> 
> +  // Avoid having the cursor of an expression "overwrite" the annotation of the
> +  // variable declaration that it belongs to.
> +  // This can happen for C++ constructor expressions whose range generally
> +  // include the variable declaration, e.g.:
> +  //  MyCXXClass foo; // Make sure we don't annotate 'foo' as a CallExpr cursor.
> +  if (clang_isExpression(cursorK)) {
> +    Expr *E = getCursorExpr(cursor);
> +    if (Decl *D = getCursorDecl(cursor)) {

I'm confused by this logic, since a cursor can't be both a declaration and an expression. Is the latter supposed to be

  if (Decl *D = getCursorDecl(parent)) {

?

	- Doug



More information about the cfe-commits mailing list