diff options
| author | Douglas Gregor <dgregor@apple.com> | 2011-07-15 16:25:15 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2011-07-15 16:25:15 +0000 |
| commit | e9d62935d3c42cb73c39fc4d0dc46bc35dc213ec (patch) | |
| tree | 036b86922700ec62b02752888abd69f8ab3f1993 /clang/lib/Sema/TreeTransform.h | |
| parent | 397745e5406b0b6aefeddc43c71c1cc8e937bf5d (diff) | |
| download | bcm5719-llvm-e9d62935d3c42cb73c39fc4d0dc46bc35dc213ec.tar.gz bcm5719-llvm-e9d62935d3c42cb73c39fc4d0dc46bc35dc213ec.zip | |
Store bracket locations for array subscript expressions, from Erik Verbruggen!
llvm-svn: 135275
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
| -rw-r--r-- | clang/lib/Sema/TreeTransform.h | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 0530b5a1725..fa87217821a 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -8357,11 +8357,24 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, return SemaRef.CreateOverloadedUnaryOp(OpLoc, Opc, Functions, First); } - if (Op == OO_Subscript) - return SemaRef.CreateOverloadedArraySubscriptExpr(Callee->getLocStart(), - OpLoc, - First, - Second); + if (Op == OO_Subscript) { + SourceLocation LBrace; + SourceLocation RBrace; + + if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Callee)) { + DeclarationNameLoc &NameLoc = DRE->getNameInfo().getInfo(); + LBrace = SourceLocation::getFromRawEncoding( + NameLoc.CXXOperatorName.BeginOpNameLoc); + RBrace = SourceLocation::getFromRawEncoding( + NameLoc.CXXOperatorName.EndOpNameLoc); + } else { + LBrace = Callee->getLocStart(); + RBrace = OpLoc; + } + + return SemaRef.CreateOverloadedArraySubscriptExpr(LBrace, RBrace, + First, Second); + } // Create the overloaded operator invocation for binary operators. BinaryOperatorKind Opc = BinaryOperator::getOverloadedOpcode(Op); |

