<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi Reid and David,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I just wanted to give you a heads up that I’m currently working on a problem where the WinEHPrepare outlining code stumbles and asserts while cloning code that references extracted landing pad values via PHI nodes that are in intermediate
 blocks that aren’t being cloned.  The test I’m looking at fails with an assertion claiming that llvm.eh.begincatch was called twice inside a handler.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have an idea for how to address this (giving the cloning director a chance to replace operands before an instruction is remapped).  I’ll put something up for review as soon as I have it working.  In the mean time I wanted to make sure
 you weren’t working on the same problem.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m seeing it with some C++ EH tests I’m working on, but I think it may be possible for it to happen with SEH cleanup.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If you’re curious, here’s a reproducer.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 main(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">void</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">try</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">   
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">try</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">     
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">throw</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">'a'</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> (</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">char</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 c) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">      printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"%c\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">,
 c);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">   
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">throw</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 1;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 x) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"%d\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">,
 x);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">(...) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"...\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"><o:p> </o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">try</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">   
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">try</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">     
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">throw</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">'b'</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> (</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">char</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 c) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">      printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"%c\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">,
 c);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">   
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">throw</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 2;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">(</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">int</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 x) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"%d\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">,
 x);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> (</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">char</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">
 c) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"%c\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">,
 c);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">catch</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">(...) {<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">    printf(</span><span style="font-size:9.5pt;font-family:Consolas;color:#A31515;background:white;mso-highlight:white">"...\n"</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">);<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">  }<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 
</span><span style="font-size:9.5pt;font-family:Consolas;color:blue;background:white;mso-highlight:white">return</span><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white"> 0;<o:p></o:p></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:9.5pt;font-family:Consolas;color:black;background:white;mso-highlight:white">}<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">-Andy<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>