<div dir="ltr">LGTM, thanks.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Sep 10, 2013 at 3:12 PM, Reid Kleckner <span dir="ltr"><<a href="mailto:rnk@google.com" target="_blank">rnk@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">    - Split out noreturn specialization test case to test the warning.<br>
<br>
Hi rsmith,<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1634" target="_blank">http://llvm-reviews.chandlerc.com/D1634</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
  <a href="http://llvm-reviews.chandlerc.com/D1634?vs=4155&id=4180#toc" target="_blank">http://llvm-reviews.chandlerc.com/D1634?vs=4155&id=4180#toc</a><br>
<br>
Files:<br>
  lib/Sema/SemaTemplate.cpp<br>
  test/SemaTemplate/function-template-specialization-noreturn.cpp<br>
<div class="im"><br>
Index: lib/Sema/SemaTemplate.cpp<br>
===================================================================<br>
--- lib/Sema/SemaTemplate.cpp<br>
+++ lib/Sema/SemaTemplate.cpp<br>
@@ -6415,12 +6415,15 @@<br>
         }<br>
       }<br>
<br>
-      // Ignore differences in calling convention until decl merging.<br>
+      // Ignore differences in calling convention and noreturn until decl<br>
+      // merging.<br>
       const FunctionProtoType *TmplFT =<br>
           TmplFD->getType()->castAs<FunctionProtoType>();<br>
-      if (FPT->getCallConv() != TmplFT->getCallConv()) {<br>
+      if (FPT->getCallConv() != TmplFT->getCallConv() ||<br>
+          FPT->getNoReturnAttr() != TmplFT->getNoReturnAttr()) {<br>
         FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo();<br>
         EPI.ExtInfo = EPI.ExtInfo.withCallingConv(TmplFT->getCallConv());<br>
+        EPI.ExtInfo = EPI.ExtInfo.withNoReturn(TmplFT->getNoReturnAttr());<br>
         FT = Context.getFunctionType(FPT->getResultType(), FPT->getArgTypes(),<br>
                                      EPI);<br>
       }<br>
</div>Index: test/SemaTemplate/function-template-specialization-noreturn.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/SemaTemplate/function-template-specialization-noreturn.cpp<br>
@@ -0,0 +1,8 @@<br>
+// RUN: %clang_cc1 -fsyntax-only -verify %s<br>
+<br>
+// Split from function-template-specialization.cpp because the noreturn warning<br>
+// requires analysis-based warnings, which the other errors in that test case<br>
+// disable.<br>
<div class="im">+<br>
+template <int N> void __attribute__((noreturn)) f3() { __builtin_unreachable(); }<br>
</div>+template <> void f3<1>() { } // expected-warning {{function declared 'noreturn' should not return}}<br>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div>