diff options
author | Abramo Bagnara <abramo.bagnara@bugseng.com> | 2012-10-04 21:42:10 +0000 |
---|---|---|
committer | Abramo Bagnara <abramo.bagnara@bugseng.com> | 2012-10-04 21:42:10 +0000 |
commit | 59c0a818a79be850f7ae8fdafd57a1710e5b809a (patch) | |
tree | e52b54d595d603dea2e8e8265ce1d1f293f053c4 /lib/Parse/ParseExprCXX.cpp | |
parent | 635311f94e8fd4ff153130d91046ff78ffe97b06 (diff) |
Fixed FunctionTypeLoc source range.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165259 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExprCXX.cpp')
-rw-r--r-- | lib/Parse/ParseExprCXX.cpp | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp index 41bf1b623f..e478ef4db3 100644 --- a/lib/Parse/ParseExprCXX.cpp +++ b/lib/Parse/ParseExprCXX.cpp @@ -756,10 +756,10 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( Scope::FunctionPrototypeScope | Scope::DeclScope); - SourceLocation DeclLoc, DeclEndLoc; + SourceLocation DeclEndLoc; BalancedDelimiterTracker T(*this, tok::l_paren); T.consumeOpen(); - DeclLoc = T.getOpenLocation(); + SourceLocation LParenLoc = T.getOpenLocation(); // Parse parameter-declaration-clause. ParsedAttributes Attr(AttrFactory); @@ -770,7 +770,8 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( ParseParameterDeclarationClause(D, Attr, ParamInfo, EllipsisLoc); T.consumeClose(); - DeclEndLoc = T.getCloseLocation(); + SourceLocation RParenLoc = T.getCloseLocation(); + DeclEndLoc = RParenLoc; // Parse 'mutable'[opt]. SourceLocation MutableLoc; @@ -796,9 +797,12 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( // Parse attribute-specifier[opt]. MaybeParseCXX0XAttributes(Attr, &DeclEndLoc); + SourceLocation FunLocalRangeEnd = DeclEndLoc; + // Parse trailing-return-type[opt]. TypeResult TrailingReturnType; if (Tok.is(tok::arrow)) { + FunLocalRangeEnd = Tok.getLocation(); SourceRange Range; TrailingReturnType = ParseTrailingReturnType(Range); if (Range.getEnd().isValid()) @@ -807,15 +811,17 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( PrototypeScope.Exit(); + SourceLocation NoLoc; D.AddTypeInfo(DeclaratorChunk::getFunction(/*hasProto=*/true, - /*isVariadic=*/EllipsisLoc.isValid(), - /*isAmbiguous=*/false, EllipsisLoc, + /*isAmbiguous=*/false, + LParenLoc, ParamInfo.data(), ParamInfo.size(), + EllipsisLoc, RParenLoc, DS.getTypeQualifiers(), /*RefQualifierIsLValueRef=*/true, - /*RefQualifierLoc=*/SourceLocation(), - /*ConstQualifierLoc=*/SourceLocation(), - /*VolatileQualifierLoc=*/SourceLocation(), + /*RefQualifierLoc=*/NoLoc, + /*ConstQualifierLoc=*/NoLoc, + /*VolatileQualifierLoc=*/NoLoc, MutableLoc, ESpecType, ESpecRange.getBegin(), DynamicExceptions.data(), @@ -823,7 +829,7 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( DynamicExceptions.size(), NoexceptExpr.isUsable() ? NoexceptExpr.get() : 0, - DeclLoc, DeclEndLoc, D, + LParenLoc, FunLocalRangeEnd, D, TrailingReturnType), Attr, DeclEndLoc); } else if (Tok.is(tok::kw_mutable) || Tok.is(tok::arrow)) { @@ -852,25 +858,28 @@ ExprResult Parser::ParseLambdaExpressionAfterIntroducer( } ParsedAttributes Attr(AttrFactory); + SourceLocation NoLoc; D.AddTypeInfo(DeclaratorChunk::getFunction(/*hasProto=*/true, - /*isVariadic=*/false, - /*isAmbiguous=*/false, - /*EllipsisLoc=*/SourceLocation(), - /*Params=*/0, /*NumParams=*/0, - /*TypeQuals=*/0, - /*RefQualifierIsLValueRef=*/true, - /*RefQualifierLoc=*/SourceLocation(), - /*ConstQualifierLoc=*/SourceLocation(), - /*VolatileQualifierLoc=*/SourceLocation(), - MutableLoc, - EST_None, - /*ESpecLoc=*/SourceLocation(), - /*Exceptions=*/0, - /*ExceptionRanges=*/0, - /*NumExceptions=*/0, - /*NoexceptExpr=*/0, - DeclLoc, DeclEndLoc, D, - TrailingReturnType), + /*isAmbiguous=*/false, + /*LParenLoc=*/NoLoc, + /*Params=*/0, + /*NumParams=*/0, + /*EllipsisLoc=*/NoLoc, + /*RParenLoc=*/NoLoc, + /*TypeQuals=*/0, + /*RefQualifierIsLValueRef=*/true, + /*RefQualifierLoc=*/NoLoc, + /*ConstQualifierLoc=*/NoLoc, + /*VolatileQualifierLoc=*/NoLoc, + MutableLoc, + EST_None, + /*ESpecLoc=*/NoLoc, + /*Exceptions=*/0, + /*ExceptionRanges=*/0, + /*NumExceptions=*/0, + /*NoexceptExpr=*/0, + DeclLoc, DeclEndLoc, D, + TrailingReturnType), Attr, DeclEndLoc); } |