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 | 5f0180d815ddc131371e65d7efb942d0573a21d3 (patch) | |
| tree | b60a265c3a8ce958e985a17b422233987534de2d /clang/lib/AST/Expr.cpp | |
| parent | 4202c0f2a998581abd9ebedeb10f804b45b72340 (diff) | |
| download | bcm5719-llvm-5f0180d815ddc131371e65d7efb942d0573a21d3.tar.gz bcm5719-llvm-5f0180d815ddc131371e65d7efb942d0573a21d3.zip | |
First version of a testcase, plus fixes.
llvm-svn: 113624
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
| -rw-r--r-- | clang/lib/AST/Expr.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 35456b38efc..435f7548ea5 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/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: |

