diff options
author | Anders Carlsson <andersca@mac.com> | 2009-11-17 17:11:23 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-11-17 17:11:23 +0000 |
commit | 6aa503900f17e9266b02ce4092c5df6d859dc4c2 (patch) | |
tree | 2be5cc965ca6ea7e9d472dabcae3bde0e37e4379 /clang/lib/AST/Expr.cpp | |
parent | bd22f1965df54776271167f5190c39364a701a6d (diff) | |
download | bcm5719-llvm-6aa503900f17e9266b02ce4092c5df6d859dc4c2.tar.gz bcm5719-llvm-6aa503900f17e9266b02ce4092c5df6d859dc4c2.zip |
Fix PR5531.
llvm-svn: 89106
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r-- | clang/lib/AST/Expr.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index d43d58aee9c..90b50c61f98 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -814,6 +814,11 @@ bool Expr::isUnusedResultAWarning(SourceLocation &Loc, SourceRange &R1, } return false; } + + case CXXTemporaryObjectExprClass: + case CXXConstructExprClass: + return false; + case ObjCMessageExprClass: return false; @@ -855,15 +860,19 @@ bool Expr::isUnusedResultAWarning(SourceLocation &Loc, SourceRange &R1, Loc = cast<CStyleCastExpr>(this)->getLParenLoc(); R1 = cast<CStyleCastExpr>(this)->getSubExpr()->getSourceRange(); return true; - case CXXFunctionalCastExprClass: - // If this is a cast to void, check the operand. Otherwise, the result of - // the cast is unused. - if (getType()->isVoidType()) + case CXXFunctionalCastExprClass: { + const CastExpr *CE = cast<CastExpr>(this); + + // If this is a cast to void or a constructor conversion, check the operand. + // Otherwise, the result of the cast is unused. + if (CE->getCastKind() == CastExpr::CK_ToVoid || + CE->getCastKind() == CastExpr::CK_ConstructorConversion) return (cast<CastExpr>(this)->getSubExpr() ->isUnusedResultAWarning(Loc, R1, R2, Ctx)); Loc = cast<CXXFunctionalCastExpr>(this)->getTypeBeginLoc(); R1 = cast<CXXFunctionalCastExpr>(this)->getSubExpr()->getSourceRange(); return true; + } case ImplicitCastExprClass: // Check the operand, since implicit casts are inserted by Sema |