diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-09-10 20:55:47 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-09-10 20:55:47 +0000 |
commit | 295995c9c3196416372c9cd35d9cedb6da37bd3d (patch) | |
tree | c5820fe77397795a45d2ef8bbafa9609c9dc424a /lib/AST/Expr.cpp | |
parent | 2e156225a29407a50dd19041aa5750171ad44ea3 (diff) |
First version of a testcase, plus fixes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@113624 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Expr.cpp')
-rw-r--r-- | lib/AST/Expr.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 35456b38ef..435f7548ea 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1369,6 +1369,9 @@ static Expr::CanThrowResult CanDynamicCastThrow(const CXXDynamicCastExpr *DC) { if (DC->isTypeDependent()) return Expr::CT_Dependent; + if (!DC->getTypeAsWritten()->isReferenceType()) + return Expr::CT_Cannot; + return DC->getCastKind() == clang::CK_Dynamic? Expr::CT_Can : Expr::CT_Cannot; } @@ -1429,7 +1432,8 @@ Expr::CanThrowResult Expr::CanThrow(ASTContext &C) const { return MergeCanThrow(CT, CanSubExprsThrow(C, this)); } - case CXXConstructExprClass: { + case CXXConstructExprClass: + case CXXTemporaryObjectExprClass: { CanThrowResult CT = CanCalleeThrow( cast<CXXConstructExpr>(this)->getConstructor()); if (CT == CT_Can) @@ -1479,7 +1483,6 @@ Expr::CanThrowResult Expr::CanThrow(ASTContext &C) const { case CXXDefaultArgExprClass: case CXXBindTemporaryExprClass: case CXXExprWithTemporariesClass: - case CXXTemporaryObjectExprClass: case ObjCIvarRefExprClass: case ObjCIsaExprClass: case ShuffleVectorExprClass: |