summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2010-09-10 20:55:47 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2010-09-10 20:55:47 +0000
commit5f0180d815ddc131371e65d7efb942d0573a21d3 (patch)
treeb60a265c3a8ce958e985a17b422233987534de2d /clang/lib/AST/Expr.cpp
parent4202c0f2a998581abd9ebedeb10f804b45b72340 (diff)
downloadbcm5719-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.cpp7
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:
OpenPOWER on IntegriCloud