On Wed, Nov 28, 2012 at 12:45 AM, WenHan Gu (¨¦¨Z¿«) <span dir="ltr"><<a href="mailto:wenhan.gu@gmail.com" target="_blank">wenhan.gu@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hello! Revision 4 uploaded.<div><a href="http://llvm.org/bugs/attachment.cgi?id=9603&action=diff" target="_blank">http://llvm.org/bugs/attachment.cgi?id=9603&action=diff</a><br><br><div class="gmail_quote"><div>
2012/11/28 Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div>On Tue, Nov 27, 2012 at 11:29 PM, WenHan Gu (¨¦¨Z¿«) <span dir="ltr"><<a href="mailto:wenhan.gu@gmail.com" target="_blank">wenhan.gu@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Wrong file, sorry.<div><a href="http://llvm.org/bugs/attachment.cgi?id=9602&action=diff" target="_blank">http://llvm.org/bugs/attachment.cgi?id=9602&action=diff</a></div></blockquote><div><br></div></div><div>Thanks!<div>



<br></div><div><div>+/// @param[in,out] T  It will be decayed to a pointer automatically when input</div><div><br></div><div>Please use \param, not @param, to match the prevailing style in Clang.</div><div><br></div><div>



<div>   // C++ 15.4p2: A type denoted in an exception-specification shall not denote</div><div>   //   an incomplete type.</div><div>-  if (RequireCompleteType(Range.getBegin(), T,</div><div>+  if (!T->isArrayType() && !T->isFunctionType() &&</div>



<div>+      RequireCompleteType(Range.getBegin(), T,</div><div>                           diag::err_incomplete_in_exception_spec,</div><div>                           /*direct*/0, Range))</div><div>     return true;</div>



<div> </div><div>+  if (T->isArrayType())</div><div>+    T = Context.getArrayDecayedType(T);</div><div>+  else if (T->isFunctionType())</div><div>+    T = Context.getPointerType(T);</div></div><div><br></div><div>Maybe move this before the RequireCompleteType call, and make the RequireCompleteType the 'else' for these? It'd also be nice to reference the relevant paragraph in the standard here.</div>


</div></div></div></blockquote><div><br></div></div><div>Yes!</div><div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote">
<div><div>
<br></div></div><div><div>--- a/test/SemaCXX/exception-spec-decay.cpp<span style="white-space:pre-wrap">  </span></div><div>+++ a/test/SemaCXX/exception-spec-decay.cpp<span style="white-space:pre-wrap">      </span></div>
<div>@@ -0,0 +1,33 @@ </div><div>+// RUN: %clang -x c++ -fexceptions -emit-llvm -S -o - %s | FileCheck %s</div></div><div><br></div><div>Please put this test in test/CodeGenCXX/, use %clang_cc1, and specify a -triple.</div>



<div> </div><div><div>+    // CHECK-next: _ZTIPi</div></div><div><br></div><div>Use "CHECK-NEXT:". FileCheck will ignore this line.</div><div><br></div><div>A -fsyntax-only test would be useful. Something like:</div>


</div></blockquote><div><br></div></div><div>I think checking mangled type string is more clear. Isn't it?</div><div>Therefore, I move it into CodeGenCXX. Thanks!</div></div></div></blockquote><div><br></div><div>We generally like to test things as early in the compilation process as possible. Also, the Sema test and the CodeGen test are checking different things; it would be entirely feasible for either test to pass while the other test fails.</div>
<div><br></div><div>Checked in with a Sema testcase in r168822. Thanks!</div>
</div>