<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[128644] trunk/dports/lang/llvm-3.5</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/128644">128644</a></dd>
<dt>Author</dt> <dd>jeremyhu@macports.org</dd>
<dt>Date</dt> <dd>2014-11-24 15:01:56 -0800 (Mon, 24 Nov 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>clang-3.5: Pull in some upstream changes for C++ fixes (#45998)</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkdportslangllvm35Portfile">trunk/dports/lang/llvm-3.5/Portfile</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkdportslangllvm35files0001PR21536Fixacornercasewherewedgetconfusedbypatch">trunk/dports/lang/llvm-3.5/files/0001-PR21536-Fix-a-corner-case-where-we-d-get-confused-by.patch</a></li>
<li><a href="#trunkdportslangllvm35files0002PR19372Keepcheckingtemplateargumentsafterwesepatch">trunk/dports/lang/llvm-3.5/files/0002-PR19372-Keep-checking-template-arguments-after-we-se.patch</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkdportslangllvm35Portfile"></a>
<div class="modfile"><h4>Modified: trunk/dports/lang/llvm-3.5/Portfile (128643 => 128644)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/llvm-3.5/Portfile        2014-11-24 22:58:52 UTC (rev 128643)
+++ trunk/dports/lang/llvm-3.5/Portfile        2014-11-24 23:01:56 UTC (rev 128644)
</span><span class="lines">@@ -50,32 +50,32 @@
</span><span class="cx"> 
</span><span class="cx">     depends_lib         port:llvm-${llvm_version} port:libffi port:python27
</span><span class="cx">     depends_run         port:clang_select port:ld64
</span><del>-    depends_extract     bin:svn:subversion
</del><ins>+    #depends_extract     bin:svn:subversion
</ins><span class="cx">     depends_build       port:cctools
</span><del>-    depends_skip_archcheck-append cctools ld64 subversion
</del><ins>+    depends_skip_archcheck-append cctools ld64
</ins><span class="cx"> 
</span><span class="cx">     default_variants    +analyzer
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-fetch.type              svn
-svn.revision            216817
</del><ins>+#fetch.type              svn
+#svn.revision            216817
</ins><span class="cx"> 
</span><del>-set compiler_rt_rev     ${svn.revision}
-set libcxx_rev          ${svn.revision}
-set clang-modernize_rev ${svn.revision}
-version                 ${llvm_version}-r${svn.revision}
</del><ins>+#set compiler_rt_rev     ${svn.revision}
+#set libcxx_rev          ${svn.revision}
+#set clang-modernize_rev ${svn.revision}
+#version                 ${llvm_version}-r${svn.revision}
</ins><span class="cx"> #worksrcdir              trunk
</span><span class="cx"> #svn.url                 https://llvm.org/svn/llvm-project/llvm/trunk
</span><del>-worksrcdir              release_${llvm_version_no_dot}
-svn.url                 https://llvm.org/svn/llvm-project/llvm/branches/release_${llvm_version_no_dot}
-default_variants-append +assertions
</del><ins>+#worksrcdir              release_${llvm_version_no_dot}
+#svn.url                 https://llvm.org/svn/llvm-project/llvm/branches/release_${llvm_version_no_dot}
+#default_variants-append +assertions
</ins><span class="cx"> 
</span><del>-#version                 ${llvm_version}
-#epoch                   1
-#master_sites            http://llvm.org/releases/${version}
-#extract.suffix          .tar.gz
-#distfiles               llvm-${version}.src${extract.suffix}
-#worksrcdir              llvm-${version}
</del><ins>+version                 ${llvm_version}.0
+epoch                   1
+master_sites            http://llvm.org/releases/${version}
+extract.suffix          .tar.xz
+distfiles               llvm-${version}.src${extract.suffix}
+worksrcdir              llvm-${version}.src
</ins><span class="cx"> 
</span><span class="cx"> if {${distfiles} != &quot;&quot;} {
</span><span class="cx">     if {${subport} == &quot;llvm-${llvm_version}&quot;} {
</span><span class="lines">@@ -83,16 +83,37 @@
</span><span class="cx">             distfiles-append     polly-${version}.src${extract.suffix}
</span><span class="cx">         }
</span><span class="cx">     } elseif {${subport} == &quot;clang-${llvm_version}&quot;} {
</span><del>-        distfiles-append     clang-${version}.src${extract.suffix} compiler-rt-${version}.src${extract.suffix} libcxx-${version}.src${extract.suffix} clang-tools-extra-${version}.src${extract.suffix}
</del><ins>+        distfiles-append     cfe-${version}.src${extract.suffix} compiler-rt-${version}.src${extract.suffix} libcxx-${version}.src${extract.suffix} clang-tools-extra-${version}.src${extract.suffix}
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+checksums           llvm-3.5.0.src.tar.xz \
+                    rmd160  a50dc4e5a63c7bd38c48bf5ce766ebbb6f47e272 \
+                    sha256  28e199f368ef0a4666708f31c7991ad3bcc3a578342b0306526dd35f07595c03 \
+                    polly-3.5.0.src.tar.xz \
+                    rmd160  eb90c130b6ef364a9bc0ff0b86aac9cf8634a019 \
+                    sha256  f1f6aaaa375d522cc92cd922f3562bfdabf87269a520398479089374dad75a65 \
+                    cfe-3.5.0.src.tar.xz \
+                    rmd160  695592b5ef12ed602a4dd78f2dc2681058ca8253 \
+                    sha256  fc80992e004b06f6c7afb612de1cdaa9ac9d25811c55f94fcf7331d9b81cdb8b \
+                    compiler-rt-3.5.0.src.tar.xz \
+                    rmd160  58aacb0b299721afb53cbd6c3fc9dc542b5b94be \
+                    sha256  a4b3e655832bf8d9a357ea2c771db347237460e131988cbb96cda40ff39a8136 \
+                    libcxx-3.5.0.src.tar.xz \
+                    rmd160  ced5e8f98ba32ad792e77e5977b527d2e3388aa2 \
+                    sha256  8045da845a63e50c201939eda8290d45e5752a9385d4d626214300d4a4d0b1c0 \
+                    clang-tools-extra-3.5.0.src.tar.xz \
+                    rmd160  28c64aacabae5d37f0ab32ddfe96d451e540e554 \
+                    sha256  2981beb378afb5aa5c50ed017720a42a33e77e902c7086ad2d412ef4fa931f69
+
</ins><span class="cx"> patchfiles      install_target.patch
</span><span class="cx"> 
</span><span class="cx"> patch.pre_args  -p1
</span><span class="cx"> 
</span><span class="cx"> if {${subport} == &quot;clang-${llvm_version}&quot;} {
</span><span class="cx">     patchfiles-append    scan-build-PR-35006.patch \
</span><ins>+                         0001-PR21536-Fix-a-corner-case-where-we-d-get-confused-by.patch \
+                         0002-PR19372-Keep-checking-template-arguments-after-we-se.patch \
</ins><span class="cx">                          0001-Comment-out-SL-cctools-workaround.patch \
</span><span class="cx">                          clang-format.patch \
</span><span class="cx">                          clang-modernize.patch \
</span><span class="lines">@@ -216,7 +237,7 @@
</span><span class="cx">             } elseif {${worksrcdir} == &quot;release_${llvm_version_no_dot}&quot; } {
</span><span class="cx">                 system &quot;cd ${worksrcpath}/tools &amp;&amp; svn co -r ${svn.revision} http://llvm.org/svn/llvm-project/polly/branches/release_${llvm_version_no_dot} polly&quot;
</span><span class="cx">             } else {
</span><del>-                file rename ${workpath}/polly-${llvm_version} ${worksrcpath}/tools/polly
</del><ins>+                file rename ${workpath}/polly-${version}.src ${worksrcpath}/tools/polly
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">     } elseif {${subport} == &quot;clang-${llvm_version}&quot;} {
</span><span class="lines">@@ -231,10 +252,10 @@
</span><span class="cx">             system &quot;cd ${worksrcpath}/projects &amp;&amp; svn co -r ${libcxx_rev} http://llvm.org/svn/llvm-project/libcxx/branches/release_${llvm_version_no_dot} libcxx&quot;
</span><span class="cx">             system &quot;cd ${worksrcpath}/tools/clang/tools &amp;&amp; svn co -r ${clang-modernize_rev} http://llvm.org/svn/llvm-project/clang-tools-extra/branches/release_${llvm_version_no_dot} extra&quot;
</span><span class="cx">         } else {
</span><del>-            file rename ${workpath}/clang-${llvm_version} ${worksrcpath}/tools/clang
-            file rename ${workpath}/compiler-rt-${llvm_version} ${worksrcpath}/projects/compiler-rt
-            file rename ${workpath}/libcxx-${llvm_version} ${worksrcpath}/projects/libcxx
-            file rename ${workpath}/clang-tools-extra-${llvm_version} ${worksrcpath}/tools/clang/tools/extra
</del><ins>+            file rename ${workpath}/cfe-${version}.src ${worksrcpath}/tools/clang
+            file rename ${workpath}/compiler-rt-${version}.src ${worksrcpath}/projects/compiler-rt
+            file rename ${workpath}/libcxx-${version}.src ${worksrcpath}/projects/libcxx
+            file rename ${workpath}/clang-tools-extra-${version}.src ${worksrcpath}/tools/clang/tools/extra
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkdportslangllvm35files0001PR21536Fixacornercasewherewedgetconfusedbypatch"></a>
<div class="addfile"><h4>Added: trunk/dports/lang/llvm-3.5/files/0001-PR21536-Fix-a-corner-case-where-we-d-get-confused-by.patch (0 => 128644)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/llvm-3.5/files/0001-PR21536-Fix-a-corner-case-where-we-d-get-confused-by.patch                                (rev 0)
+++ trunk/dports/lang/llvm-3.5/files/0001-PR21536-Fix-a-corner-case-where-we-d-get-confused-by.patch        2014-11-24 23:01:56 UTC (rev 128644)
</span><span class="lines">@@ -0,0 +1,61 @@
</span><ins>+From f27355c10ce84f000530fbc5a22449047a095efc Mon Sep 17 00:00:00 2001
+From: Richard Smith &lt;richard-llvm@metafoo.co.uk&gt;
+Date: Wed, 12 Nov 2014 01:43:45 +0000
+Subject: [PATCH 1/2] PR21536: Fix a corner case where we'd get confused by a
+ pack expanding into the penultimate parameter of a template parameter list,
+ where the last parameter is itself a pack, and build a bogus empty final pack
+ argument.
+
+git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221748 91177308-0d34-0410-b5e6-96231b3b80d8
+(cherry picked from commit b6ff5628bec83cb58cdb9724584eeaf0a51fe81b)
+---
+ lib/Sema/SemaTemplate.cpp       |  2 +-
+ test/SemaTemplate/deduction.cpp | 18 +++++++++++++++++-
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+
+diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
+index 63581a4..5596a01 100644
+--- a/tools/clang/lib/Sema/SemaTemplate.cpp
++++ b/tools/clang/lib/Sema/SemaTemplate.cpp
+@@ -3746,7 +3746,7 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
+         }

+         // Push the argument pack onto the list of converted arguments.
+-        if (InFinalParameterPack) {
++        if (InFinalParameterPack &amp;&amp; !ArgumentPack.empty()) {
+           Converted.push_back(
+             TemplateArgument::CreatePackCopy(Context,
+                                              ArgumentPack.data(),
+diff --git a/test/SemaTemplate/deduction.cpp b/test/SemaTemplate/deduction.cpp
+index aecb5ee..c089573 100644
+--- a/tools/clang/test/SemaTemplate/deduction.cpp
++++ b/tools/clang/test/SemaTemplate/deduction.cpp
+@@ -1,4 +1,4 @@
+-// RUN: %clang_cc1 -fsyntax-only -verify %s
++// RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++11

+ // Template argument deduction with template template parameters.
+ template&lt;typename T, template&lt;T&gt; class A&gt; 
+@@ -162,3 +162,19 @@ namespace test14 {
+     foo(a);
+   }
+ }
++
++namespace PR21536 {
++  template&lt;typename ...T&gt; struct X;
++  template&lt;typename A, typename ...B&gt; struct S {
++    static_assert(sizeof...(B) == 1, &quot;&quot;);
++    void f() {
++      using T = A;
++      using T = int;
++
++      using U = X&lt;B...&gt;;
++      using U = X&lt;int&gt;;
++    }
++  };
++  template&lt;typename ...T&gt; void f(S&lt;T...&gt;);
++  void g() { f(S&lt;int, int&gt;()); }
++}
+-- 
+2.1.3
+
</ins></span></pre></div>
<a id="trunkdportslangllvm35files0002PR19372Keepcheckingtemplateargumentsafterwesepatch"></a>
<div class="addfile"><h4>Added: trunk/dports/lang/llvm-3.5/files/0002-PR19372-Keep-checking-template-arguments-after-we-se.patch (0 => 128644)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/lang/llvm-3.5/files/0002-PR19372-Keep-checking-template-arguments-after-we-se.patch                                (rev 0)
+++ trunk/dports/lang/llvm-3.5/files/0002-PR19372-Keep-checking-template-arguments-after-we-se.patch        2014-11-24 23:01:56 UTC (rev 128644)
</span><span class="lines">@@ -0,0 +1,109 @@
</span><ins>+From 0019dadd93e1e38476b9c115470409c7f9fc3899 Mon Sep 17 00:00:00 2001
+From: Richard Smith &lt;richard-llvm@metafoo.co.uk&gt;
+Date: Wed, 12 Nov 2014 23:38:38 +0000
+Subject: [PATCH 2/2] PR19372: Keep checking template arguments after we see an
+ argument pack expansion into a parameter pack; we know that we're still
+ filling in that parameter's arguments. Previously, if we hit this case for an
+ alias template, we'd try to substitute using non-canonical template
+ arguments.
+
+git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221832 91177308-0d34-0410-b5e6-96231b3b80d8
+(cherry picked from commit 4e0b4321c8311bb0bf3dea530405960dbca97a9d)
+---
+ lib/Sema/SemaTemplate.cpp       | 39 +++++++++++----------------------------
+ test/SemaTemplate/deduction.cpp | 14 ++++++++++++++
+ 2 files changed, 25 insertions(+), 28 deletions(-)
+
+diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
+index 5596a01..7e8f0b7 100644
+--- a/tools/clang/lib/Sema/SemaTemplate.cpp
++++ b/tools/clang/lib/Sema/SemaTemplate.cpp
+@@ -3692,12 +3692,12 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
+                                 ArgumentPack.size(), Converted))
+         return true;

+-      if (TemplateArgs[ArgIdx].getArgument().isPackExpansion() &amp;&amp;
+-          isa&lt;TypeAliasTemplateDecl&gt;(Template) &amp;&amp;
+-          !(Param + 1 == ParamEnd &amp;&amp; (*Param)-&gt;isTemplateParameterPack() &amp;&amp;
+-            !getExpandedPackSize(*Param))) {
++      bool PackExpansionIntoNonPack =
++          TemplateArgs[ArgIdx].getArgument().isPackExpansion() &amp;&amp;
++          (!(*Param)-&gt;isTemplateParameterPack() || getExpandedPackSize(*Param));
++      if (PackExpansionIntoNonPack &amp;&amp; isa&lt;TypeAliasTemplateDecl&gt;(Template)) {
+         // Core issue 1430: we have a pack expansion as an argument to an
+-        // alias template, and it's not part of a final parameter pack. This
++        // alias template, and it's not part of a parameter pack. This
+         // can't be canonicalized, so reject it now.
+         Diag(TemplateArgs[ArgIdx].getLocation(),
+              diag::err_alias_template_expansion_into_fixed_list)
+@@ -3720,16 +3720,11 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
+         ++Param;
+       }

+-      // If we just saw a pack expansion, then directly convert the remaining
+-      // arguments, because we don't know what parameters they'll match up
+-      // with.
+-      if (TemplateArgs[ArgIdx-1].getArgument().isPackExpansion()) {
+-        bool InFinalParameterPack = Param != ParamEnd &amp;&amp;
+-                                    Param + 1 == ParamEnd &amp;&amp;
+-                                    (*Param)-&gt;isTemplateParameterPack() &amp;&amp;
+-                                    !getExpandedPackSize(*Param);
+-
+-        if (!InFinalParameterPack &amp;&amp; !ArgumentPack.empty()) {
++      // If we just saw a pack expansion into a non-pack, then directly convert
++      // the remaining arguments, because we don't know what parameters they'll
++      // match up with.
++      if (PackExpansionIntoNonPack) {
++        if (!ArgumentPack.empty()) {
+           // If we were part way through filling in an expanded parameter pack,
+           // fall back to just producing individual arguments.
+           Converted.insert(Converted.end(),
+@@ -3738,22 +3733,10 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
+         }

+         while (ArgIdx &lt; NumArgs) {
+-          if (InFinalParameterPack)
+-            ArgumentPack.push_back(TemplateArgs[ArgIdx].getArgument());
+-          else
+-            Converted.push_back(TemplateArgs[ArgIdx].getArgument());
++          Converted.push_back(TemplateArgs[ArgIdx].getArgument());
+           ++ArgIdx;
+         }

+-        // Push the argument pack onto the list of converted arguments.
+-        if (InFinalParameterPack &amp;&amp; !ArgumentPack.empty()) {
+-          Converted.push_back(
+-            TemplateArgument::CreatePackCopy(Context,
+-                                             ArgumentPack.data(),
+-                                             ArgumentPack.size()));
+-          ArgumentPack.clear();
+-        }
+-
+         return false;
+       }

+diff --git a/test/SemaTemplate/deduction.cpp b/test/SemaTemplate/deduction.cpp
+index c089573..e942289 100644
+--- a/tools/clang/test/SemaTemplate/deduction.cpp
++++ b/tools/clang/test/SemaTemplate/deduction.cpp
+@@ -178,3 +178,17 @@ namespace PR21536 {
+   template&lt;typename ...T&gt; void f(S&lt;T...&gt;);
+   void g() { f(S&lt;int, int&gt;()); }
+ }
++
++namespace PR19372 {
++  template &lt;template&lt;typename...&gt; class C, typename ...Us&gt; struct BindBack {
++    template &lt;typename ...Ts&gt; using apply = C&lt;Ts..., Us...&gt;;
++  };
++  template &lt;typename, typename...&gt; struct Y;
++  template &lt;typename ...Ts&gt; using Z = Y&lt;Ts...&gt;;
++
++  using T = BindBack&lt;Z, int&gt;::apply&lt;&gt;;
++  using T = Z&lt;int&gt;;
++
++  using U = BindBack&lt;Z, int, int&gt;::apply&lt;char&gt;;
++  using U = Z&lt;char, int, int&gt;;
++}
+-- 
+2.1.3
+
</ins></span></pre>
</div>
</div>

</body>
</html>