[cfe-dev] Best way to get SourceLocation of a Declarator?

steve naroff snaroff at apple.com
Fri Aug 29 06:14:06 PDT 2008

On Aug 29, 2008, at 6:23 AM, Nico Weber wrote:

> Hi,
> what's the best way to get a SourceLocation of a Declarator? I want to
> skip all Declarators from system headers, so my ActOnDeclarator looks
> like this:
>   Action::DeclTy *
>   ActOnDeclarator(Scope *S, Declarator &D, DeclTy *LastInGroup) {
>     SourceLocation loc =  // loc of D
>     SourceManager& sm = pp.getSourceManager();
>     if (!sm.isInSystemHeader(loc)) {
>       // do stuff
>     }
>     return MinimalAction::ActOnDeclarator(S, D, LastInGroup);
>   }
> However, what's the best way to get a SourceLocation of a Declarator?
> I can use D.getIdentifierLoc(), but not all Declarators have an
> identifier (e.g. `struct s{};`). Likewise, I could use one of the
> TypeSpecLocs of the DeclSpec, but each of the typespecs is optional,
> too (e.g. `int a;` only has a TypeSpecType, `long a;` does not have a
> TypeSpecType location).

I don't believe this is true. Just to confirm, I added the following  
line to MinimalAction::ActOnDeclarator():

   if (D.getDeclSpec().getTypeSpecTypeLoc().isValid())
     printf("we have a valid source location\n");

[steve-naroffs-imac-2:llvm/tools/clang] snaroff% cat xx.c
int a;
long b;

[steve-naroffs-imac-2:llvm/tools/clang] snaroff% ../../Debug/bin/clang  
-parse-noop xx.c
we have a valid source location
we have a valid source location

> So, is there a general way to get the SourceLocation of a Declarator?

There isn't. As you note above, many structure definitions don't even  
have a top-level declarator.

In the past (in another compiler), I solved this problem by creating a  
node that represents the entire declaration. The declaration AST node  
could record the start/end (which would be uniform with how we  
implement ranges for statements). When I was working on the ObjC  
rewriter, I wished clang modeled it this way. Instead, I developed  
hacks to work around it.

If we are moving forward with Ted's DeclGroup proposal, it might make  
sense to consider a Declaration AST node as well? It would certainly  
simplify source analysis tools in particular...



> Thanks,
> Nico
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20080829/cd3463f5/attachment.html>

More information about the cfe-dev mailing list