<div dir="ltr">On Tue, Jun 18, 2013 at 10:15 PM, John McCall <span dir="ltr"><<a href="mailto:rjmccall@apple.com" target="_blank">rjmccall@apple.com</a>></span> wrote:<div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+<br>
+    // In the MSVC++ ABI, make sure arguments have valid destructors.<br>
+    if (Context.getTargetInfo().getCXXABI().isTemporaryDestroyedByCallee())<br>
+      CheckByValParamsForDtors(NewFD);<br>
+<br>
<br>
Please just do this in CheckParameter.  Check for C++ first, then the ABI flag,<br>
then a record type, then call FinalizeVarWithDestructor. :)<br></blockquote><div><br></div><div style>On further testing, I don't think this works because CheckParameter fires on function declarations, where the record might not be complete:</div>
<div>struct A;</div><div>void foo(A a);  // Can't look at A's dtor here.</div><div><div>class A {</div><div>  friend void bar(A);  // Can't look at A's dtor here.<br></div><div>};</div></div><div><br></div>
<div style>We don't actually know if the parameter decl is for a definition until ActOnFunctionDeclarator().</div><div style><br></div></div></div></div>