<div dir="ltr">That's the only one I found.  Fixed in r286641.<br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 11, 2016 at 1:46 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><pre style="word-wrap:break-word"><font color="#000000"><span style="white-space:pre-wrap">Sema::FinalizeDeclaration<font face="arial, helvetica, sans-serif"> contains the code I was thinking about.</font></span></font></pre></div><div class="gmail-HOEnZb"><div class="gmail-h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 11, 2016 at 1:33 PM, Richard Trieu <span dir="ltr"><<a href="mailto:rtrieu@google.com" target="_blank">rtrieu@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">I didn't see anything when making this patch, but I will go take a closer look now.<div><div class="gmail-m_-6917757473432446664h5"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Nov 11, 2016 at 1:19 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Thanks. We have some code in SemaDecl(CXX?) that was trying to do the same thing; can it be removed now?</div><div class="gmail-m_-6917757473432446664m_3131934580155123037HOEnZb"><div class="gmail-m_-6917757473432446664m_3131934580155123037h5"><div class="gmail_extra"><br><div class="gmail_quote">On 11 Nov 2016 1:00 pm, "Richard Trieu via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: rtrieu<br>
Date: Fri Nov 11 14:51:04 2016<br>
New Revision: 286630<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=286630&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=286630&view=rev</a><br>
Log:<br>
When a DecompositionDecl is marked invalid, also set the child BindingDecl's to<br>
invalid.<br>
<br>
Modified:<br>
    cfe/trunk/lib/AST/DeclBase.cpp<br>
    cfe/trunk/test/SemaCXX/cxx1z-d<wbr>ecomposition.cpp<br>
<br>
Modified: cfe/trunk/lib/AST/DeclBase.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=286630&r1=286629&r2=286630&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/AST/DeclBa<wbr>se.cpp?rev=286630&r1=286629&r2<wbr>=286630&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/AST/DeclBase.cpp (original)<br>
+++ cfe/trunk/lib/AST/DeclBase.cpp Fri Nov 11 14:51:04 2016<br>
@@ -109,12 +109,24 @@ const char *Decl::getDeclKindName() cons<br>
 void Decl::setInvalidDecl(bool Invalid) {<br>
   InvalidDecl = Invalid;<br>
   assert(!isa<TagDecl>(this) || !cast<TagDecl>(this)->isComple<wbr>teDefinition());<br>
-  if (Invalid && !isa<ParmVarDecl>(this)) {<br>
+  if (!Invalid) {<br>
+    return;<br>
+  }<br>
+<br>
+  if (!isa<ParmVarDecl>(this)) {<br>
     // Defensive maneuver for ill-formed code: we're likely not to make it to<br>
     // a point where we set the access specifier, so default it to "public"<br>
     // to avoid triggering asserts elsewhere in the front end.<br>
     setAccess(AS_public);<br>
   }<br>
+<br>
+  // Marking a DecompositionDecl as invalid implies all the child BindingDecl's<br>
+  // are invalid too.<br>
+  if (DecompositionDecl *DD = dyn_cast<DecompositionDecl>(th<wbr>is)) {<br>
+    for (BindingDecl *Binding : DD->bindings()) {<br>
+      Binding->setInvalidDecl();<br>
+    }<br>
+  }<br>
 }<br>
<br>
 const char *DeclContext::getDeclKindName(<wbr>) const {<br>
<br>
Modified: cfe/trunk/test/SemaCXX/cxx1z-d<wbr>ecomposition.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp?rev=286630&r1=286629&r2=286630&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/test/SemaCXX/c<wbr>xx1z-decomposition.cpp?rev=286<wbr>630&r1=286629&r2=286630&view=d<wbr>iff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaCXX/cxx1z-d<wbr>ecomposition.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/cxx1z-d<wbr>ecomposition.cpp Fri Nov 11 14:51:04 2016<br>
@@ -53,4 +53,16 @@ void bitfield() {<br>
   auto &[p, q, r] = a; // expected-error {{decomposes into 2 elements, but 3 names were provided}}<br>
 }<br>
<br>
+void for_range() {<br>
+  int x = 1;<br>
+  for (auto[a, b] : x) { // expected-error {{invalid range expression of type 'int'; no viable 'begin' function available}}<br>
+    a++;<br>
+  }<br>
+<br>
+  int y[5];<br>
+  for (auto[c] : y) { // expected-error {{cannot decompose non-class, non-array type 'int'}}<br>
+    c++;<br>
+  }<br>
+}<br>
+<br>
 // FIXME: by-value array copies<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div></div>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>