diff options
| author | John McCall <rjmccall@apple.com> | 2010-01-15 19:13:16 +0000 |
|---|---|---|
| committer | John McCall <rjmccall@apple.com> | 2010-01-15 19:13:16 +0000 |
| commit | d377e04489153352aad249b3a54cd4fb7c338611 (patch) | |
| tree | 68bc149e85aa2c74529499b3bf64a68698278eb2 /clang/lib/Sema/SemaCXXCast.cpp | |
| parent | 86e61533823ed3b35fc10480b9af844d8f211036 (diff) | |
| download | bcm5719-llvm-d377e04489153352aad249b3a54cd4fb7c338611.tar.gz bcm5719-llvm-d377e04489153352aad249b3a54cd4fb7c338611.zip | |
Preserve type source information for C++ named casts through template
instantiation.
llvm-svn: 93533
Diffstat (limited to 'clang/lib/Sema/SemaCXXCast.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaCXXCast.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaCXXCast.cpp b/clang/lib/Sema/SemaCXXCast.cpp index 178bc7a0140..57c4f9bc2a2 100644 --- a/clang/lib/Sema/SemaCXXCast.cpp +++ b/clang/lib/Sema/SemaCXXCast.cpp @@ -116,13 +116,26 @@ Sema::ActOnCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, SourceLocation RAngleBracketLoc, SourceLocation LParenLoc, ExprArg E, SourceLocation RParenLoc) { - Expr *Ex = E.takeAs<Expr>(); + TypeSourceInfo *DestTInfo; QualType DestType = GetTypeFromParser(Ty, &DestTInfo); if (!DestTInfo) DestTInfo = Context.getTrivialTypeSourceInfo(DestType, SourceLocation()); - SourceRange OpRange(OpLoc, RParenLoc); - SourceRange DestRange(LAngleBracketLoc, RAngleBracketLoc); + + return BuildCXXNamedCast(OpLoc, Kind, DestTInfo, move(E), + SourceRange(LAngleBracketLoc, RAngleBracketLoc), + SourceRange(LParenLoc, RParenLoc)); +} + +Action::OwningExprResult +Sema::BuildCXXNamedCast(SourceLocation OpLoc, tok::TokenKind Kind, + TypeSourceInfo *DestTInfo, ExprArg E, + SourceRange AngleBrackets, SourceRange Parens) { + Expr *Ex = E.takeAs<Expr>(); + QualType DestType = DestTInfo->getType(); + + SourceRange OpRange(OpLoc, Parens.getEnd()); + SourceRange DestRange = AngleBrackets; // If the type is dependent, we won't do the semantic analysis now. // FIXME: should we check this in a more fine-grained manner? |

