From 5fcf8da33dfb9a54f047718223ddba16a263f6c1 Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 12 Jul 2011 00:15:30 +0000 Subject: Do full-expression cleanups in a much more sensible way that still lets people write useful cleanup classes. llvm-svn: 134942 --- clang/lib/CodeGen/CGException.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'clang/lib/CodeGen/CGException.cpp') diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp index 35429e3b841..c25b9a68831 100644 --- a/clang/lib/CodeGen/CGException.cpp +++ b/clang/lib/CodeGen/CGException.cpp @@ -323,9 +323,10 @@ static llvm::Constant *getCleanupValue(CodeGenFunction &CGF) { namespace { /// A cleanup to free the exception object if its initialization /// throws. - struct FreeException { - static void Emit(CodeGenFunction &CGF, bool forEH, - llvm::Value *exn) { + struct FreeException : EHScopeStack::Cleanup { + llvm::Value *exn; + FreeException(llvm::Value *exn) : exn(exn) {} + void Emit(CodeGenFunction &CGF, bool forEH) { CGF.Builder.CreateCall(getFreeExceptionFn(CGF), exn) ->setDoesNotThrow(); } -- cgit v1.2.3