Index: lib/CodeGen/CGException.cpp =================================================================== --- lib/CodeGen/CGException.cpp +++ lib/CodeGen/CGException.cpp @@ -1679,6 +1679,7 @@ StartFunction(GlobalDecl(), RetTy, Fn, FnInfo, Args, OutlinedStmt->getLocStart(), OutlinedStmt->getLocStart()); + CurCodeDecl = ParentCGF.CurCodeDecl; CGM.SetLLVMFunctionAttributes(nullptr, FnInfo, CurFn); EmitCapturedLocals(ParentCGF, OutlinedStmt, IsFilter); Index: test/CodeGen/exceptions-seh-finally.c =================================================================== --- test/CodeGen/exceptions-seh-finally.c +++ test/CodeGen/exceptions-seh-finally.c @@ -230,3 +230,28 @@ // CHECK-LABEL: define internal void @"\01?fin$1@0@nested___finally___finally_with_eh_edge@@"({{.*}}) // CHECK: unreachable + +void finally_within_finally() { + __try { + might_crash(); + } __finally { + __try { + might_crash(); + } __finally { + } + } +} + +// CHECK-LABEL: define void @finally_within_finally( +// CHECK: invoke void @might_crash( + +// CHECK: call void @"\01?fin$0@0@finally_within_finally@@"( +// CHECK: call void @"\01?fin$0@0@finally_within_finally@@"({{.*}}) [ "funclet"( + +// CHECK-LABEL: define internal void @"\01?fin$0@0@finally_within_finally@@"( +// CHECK: invoke void @might_crash( + +// CHECK: call void @"\01?fin$1@0@finally_within_finally@@"( +// CHECK: call void @"\01?fin$1@0@finally_within_finally@@"({{.*}}) [ "funclet"( + +// CHECK-LABEL: define internal void @"\01?fin$1@0@finally_within_finally@@"(