Index: lib/MC/MCStreamer.cpp =================================================================== --- lib/MC/MCStreamer.cpp +++ lib/MC/MCStreamer.cpp @@ -816,10 +816,11 @@ } void MCStreamer::Finish() { - if (!DwarfFrameInfos.empty() && !DwarfFrameInfos.back().End) - getContext().reportError(SMLoc(), "Unfinished frame!"); - if (!WinFrameInfos.empty() && !WinFrameInfos.back()->End) + if ((!DwarfFrameInfos.empty() && !DwarfFrameInfos.back().End) || + (!WinFrameInfos.empty() && !WinFrameInfos.back()->End)) { getContext().reportError(SMLoc(), "Unfinished frame!"); + return; + } MCTargetStreamer *TS = getTargetStreamer(); if (TS) Index: test/MC/X86/cfi-scope-unclosed.s =================================================================== --- test/MC/X86/cfi-scope-unclosed.s +++ test/MC/X86/cfi-scope-unclosed.s @@ -0,0 +1,10 @@ +# RUN: not llvm-mc %s -filetype=obj -triple=x86_64-unknown-linux \ +# RUN: -o /dev/null 2>&1 | FileCheck %s + +## Check we don't crash on unclosed frame scope. +# CHECK: error: Unfinished frame! + +.text +.globl foo +foo: + .cfi_startproc