diff options
author | John McCall <rjmccall@apple.com> | 2009-11-04 07:28:41 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-11-04 07:28:41 +0000 |
commit | 4c98fd8953f7d7a8f3a31f49630c28c5ca55b9f4 (patch) | |
tree | b3700f5f6caba16a0572e65cd457e630136ff5cc /clang/lib/Index/ResolveLocation.cpp | |
parent | c95a1fa7f6b7284ad6c334294f0a0e3cecc1eec9 (diff) | |
download | bcm5719-llvm-4c98fd8953f7d7a8f3a31f49630c28c5ca55b9f4.tar.gz bcm5719-llvm-4c98fd8953f7d7a8f3a31f49630c28c5ca55b9f4.zip |
Preserve type source information in sizeof/alignof expressions, and pass it
through to indexing.
llvm-svn: 86018
Diffstat (limited to 'clang/lib/Index/ResolveLocation.cpp')
-rw-r--r-- | clang/lib/Index/ResolveLocation.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Index/ResolveLocation.cpp b/clang/lib/Index/ResolveLocation.cpp index ec8c1dcb381..73b584b5205 100644 --- a/clang/lib/Index/ResolveLocation.cpp +++ b/clang/lib/Index/ResolveLocation.cpp @@ -92,6 +92,7 @@ public: StmtLocResolver(ASTContext &ctx, SourceLocation loc, Decl *parent) : LocResolverBase(ctx, loc), Parent(parent) {} + ASTLocation VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *Node); ASTLocation VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node); ASTLocation VisitDeclStmt(DeclStmt *Node); ASTLocation VisitStmt(Stmt *Node); @@ -136,6 +137,25 @@ public: } // anonymous namespace ASTLocation +StmtLocResolver::VisitSizeOfAlignOfExpr(SizeOfAlignOfExpr *Node) { + assert(ContainsLocation(Node) && + "Should visit only after verifying that loc is in range"); + + if (Node->isArgumentType()) { + DeclaratorInfo *DInfo = Node->getArgumentTypeInfo(); + if (ContainsLocation(DInfo)) + return ResolveInDeclarator(Parent, Node, DInfo); + } else { + Expr *SubNode = Node->getArgumentExpr(); + if (ContainsLocation(SubNode)) + return Visit(SubNode); + } + + return ASTLocation(Parent, Node); +} + + +ASTLocation StmtLocResolver::VisitCXXOperatorCallExpr(CXXOperatorCallExpr *Node) { assert(ContainsLocation(Node) && "Should visit only after verifying that loc is in range"); |