diff --git a/lib/CodeGen/CGException.cpp b/lib/CodeGen/CGException.cpp index 79646f3316..cb7bad2575 100644 --- a/lib/CodeGen/CGException.cpp +++ b/lib/CodeGen/CGException.cpp @@ -526,7 +526,7 @@ static void EmitAnyExprToExn(CodeGenFunction &CGF, const Expr *E, // __cxa_allocate_exception returns a void*; we need to cast this // to the appropriate type for the object. - const llvm::Type *Ty = CGF.ConvertType(E->getType())->getPointerTo(); + const llvm::Type *Ty = CGF.ConvertTypeForMem(E->getType())->getPointerTo(); llvm::Value *TypedExnLoc = CGF.Builder.CreateBitCast(ExnLoc, Ty); // FIXME: this isn't quite right! If there's a final unelided call diff --git a/test/CodeGenCXX/throw-expressions.cpp b/test/CodeGenCXX/throw-expressions.cpp index 1670e44502..f41d35ec37 100644 --- a/test/CodeGenCXX/throw-expressions.cpp +++ b/test/CodeGenCXX/throw-expressions.cpp @@ -8,3 +8,8 @@ int& test1() { int test2() { return val ? throw val : val; } + +// rdar://problem/8608801 +void test3() { + throw false; +}