From: Argyrios Kyrtzidis Date: Wed, 16 May 2012 23:49:15 +0000 (+0000) Subject: [libclang/AST] When declaring a local class, don't neglect to set the end location X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5641b0d02563840c51c33b93dc663c55306093f3;p=clang [libclang/AST] When declaring a local class, don't neglect to set the end location of the DeclStmt node, otherwise libclang will not work for anything inside that class. rdar://10837710 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156966 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index ba40c9b262..d1350104bc 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -1050,6 +1050,7 @@ Parser::DeclGroupPtrTy Parser::ParseSimpleDeclaration(StmtVector &Stmts, // C99 6.7.2.3p6: Handle "struct-or-union identifier;", "enum { X };" // declaration-specifiers init-declarator-list[opt] ';' if (Tok.is(tok::semi)) { + DeclEnd = Tok.getLocation(); if (RequireSemi) ConsumeToken(); Decl *TheDecl = Actions.ParsedFreeStandingDeclSpec(getCurScope(), AS_none, DS); diff --git a/test/Index/get-cursor.cpp b/test/Index/get-cursor.cpp index e1e6835bec..8b70216dd1 100644 --- a/test/Index/get-cursor.cpp +++ b/test/Index/get-cursor.cpp @@ -38,6 +38,13 @@ void test() { } catch (X e) { X x; } + + struct LocalS { + void meth() { + int x; + ++x; + } + }; } // RUN: c-index-test -cursor-at=%s:6:4 %s | FileCheck -check-prefix=CHECK-COMPLETION-1 %s @@ -93,3 +100,6 @@ void test() { // RUN: c-index-test -test-load-source-usrs local %s | FileCheck -check-prefix=CHECK-USR %s // CHECK-USR: get-cursor.cpp c:get-cursor.cpp@472@F@test#@e Extent=[38:12 - 38:15] // CHECK-USR: get-cursor.cpp c:get-cursor.cpp@483@F@test#@x Extent=[39:5 - 39:8] + +// RUN: c-index-test -cursor-at=%s:45:9 %s | FileCheck -check-prefix=CHECK-LOCALCLASS %s +// CHECK-LOCALCLASS: 45:9 DeclRefExpr=x:44:11 Extent=[45:9 - 45:10] Spelling=x ([45:9 - 45:10])