<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, May 27, 2014 at 6:57 AM, Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The exception-declaration for a function-try-block cannot redeclare a<br>
function parameter. One of our existing test cases was XFAILed because<br>
of this. This patch is an attempt to fix the issue and un-XFAIL the<br>
test.<br>
<br>
I am getting this from [basic.lookup.unqual]p15, which says,<br>
<br>
A name used in the handler for a function-try-block (Clause 15) is<br>
looked up as if the name was used in the outermost block of the<br>
function definition. In particular, the function parameter names shall<br>
not be redeclared in the exception-declaration nor in the outermost<br>
block of a handler for the function-try-block.</blockquote><div><br></div><div>This looks like it might do the wrong thing for a function nested within another function:</div><div><br></div><div>void f(int i) {</div><div>
  struct S {</div><div>    void g() try {} catch (int i) {}; // shouldn't diagnose this, but I think you will</div><div>  };</div><div>}</div><div><br></div><div>The way we generally handle this is in IdentifierResolver::isDeclInScope, and that's the right place for this fix. You should be able to detect a catch of a function try block by looking at the flags on the Scope.</div>
</div></div></div>