From 81f3830f2ed0b26e8bd7ae62e127db427f9f350d Mon Sep 17 00:00:00 2001
From: Charles Davis <cdavis@mines.edu>
Date: Sat, 21 May 2011 17:36:25 +0000
Subject: [PATCH] Don't allow .seh_handler and .seh_handlerdata directives
 inside chained unwind areas.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131795 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/MC/MCStreamer.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lib/MC/MCStreamer.cpp b/lib/MC/MCStreamer.cpp
index 1ec7688a5ed..a760f2cfb59 100644
--- a/lib/MC/MCStreamer.cpp
+++ b/lib/MC/MCStreamer.cpp
@@ -361,6 +361,8 @@ void MCStreamer::EmitWin64EHHandler(const MCSymbol *Sym, bool Unwind,
                                     bool Except) {
   EnsureValidW64UnwindInfo();
   MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
+  if (CurFrame->ChainedParent)
+    report_fatal_error("Chained unwind areas can't have handlers!");
   CurFrame->ExceptionHandler = Sym;
   if (!Except && !Unwind)
     report_fatal_error("Don't know what kind of handler this is!");
@@ -372,6 +374,9 @@ void MCStreamer::EmitWin64EHHandler(const MCSymbol *Sym, bool Unwind,
 
 void MCStreamer::EmitWin64EHHandlerData() {
   EnsureValidW64UnwindInfo();
+  MCWin64EHUnwindInfo *CurFrame = CurrentW64UnwindInfo;
+  if (CurFrame->ChainedParent)
+    report_fatal_error("Chained unwind areas can't have handlers!");
 }
 
 void MCStreamer::EmitWin64EHPushReg(unsigned Register) {