From b8a76c42b516e55b680ada2af960ecc9613a7c2d Mon Sep 17 00:00:00 2001 From: Sebastian Redl Date: Fri, 10 Sep 2010 22:34:40 +0000 Subject: Address Doug's comments. llvm-svn: 113650 --- clang/lib/AST/Expr.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'clang/lib/AST/Expr.cpp') diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index 435f7548ea5..65dafae35e4 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -1347,6 +1347,11 @@ static Expr::CanThrowResult CanCalleeThrow(const Decl *D, if (!VD) // If we have no clue what we're calling, assume the worst. return Expr::CT_Can; + // As an extension, we assume that __attribute__((nothrow)) functions don't + // throw. + if (isa(D) && D->hasAttr()) + return Expr::CT_Cannot; + QualType T = VD->getType(); const FunctionProtoType *FT; if ((FT = T->getAs())) { @@ -1482,7 +1487,7 @@ Expr::CanThrowResult Expr::CanThrow(ASTContext &C) const { case VAArgExprClass: case CXXDefaultArgExprClass: case CXXBindTemporaryExprClass: - case CXXExprWithTemporariesClass: + case CXXExprWithTemporariesClass: // FIXME: this thing calls destructors case ObjCIvarRefExprClass: case ObjCIsaExprClass: case ShuffleVectorExprClass: -- cgit v1.2.3