That's the only one I found. Fixed in r286641. On Fri, Nov 11, 2016 at 1:46 PM, Richard Smith <rich...@metafoo.co.uk> wrote:
> Sema::FinalizeDeclaration contains the code I was thinking about. > > > On Fri, Nov 11, 2016 at 1:33 PM, Richard Trieu <rtr...@google.com> wrote: > >> I didn't see anything when making this patch, but I will go take a closer >> look now. >> >> >> On Fri, Nov 11, 2016 at 1:19 PM, Richard Smith <rich...@metafoo.co.uk> >> wrote: >> >>> Thanks. We have some code in SemaDecl(CXX?) that was trying to do the >>> same thing; can it be removed now? >>> >>> On 11 Nov 2016 1:00 pm, "Richard Trieu via cfe-commits" < >>> cfe-commits@lists.llvm.org> wrote: >>> >>>> Author: rtrieu >>>> Date: Fri Nov 11 14:51:04 2016 >>>> New Revision: 286630 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=286630&view=rev >>>> Log: >>>> When a DecompositionDecl is marked invalid, also set the child >>>> BindingDecl's to >>>> invalid. >>>> >>>> Modified: >>>> cfe/trunk/lib/AST/DeclBase.cpp >>>> cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp >>>> >>>> Modified: cfe/trunk/lib/AST/DeclBase.cpp >>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBa >>>> se.cpp?rev=286630&r1=286629&r2=286630&view=diff >>>> ============================================================ >>>> ================== >>>> --- cfe/trunk/lib/AST/DeclBase.cpp (original) >>>> +++ cfe/trunk/lib/AST/DeclBase.cpp Fri Nov 11 14:51:04 2016 >>>> @@ -109,12 +109,24 @@ const char *Decl::getDeclKindName() cons >>>> void Decl::setInvalidDecl(bool Invalid) { >>>> InvalidDecl = Invalid; >>>> assert(!isa<TagDecl>(this) || !cast<TagDecl>(this)->isComple >>>> teDefinition()); >>>> - if (Invalid && !isa<ParmVarDecl>(this)) { >>>> + if (!Invalid) { >>>> + return; >>>> + } >>>> + >>>> + if (!isa<ParmVarDecl>(this)) { >>>> // Defensive maneuver for ill-formed code: we're likely not to >>>> make it to >>>> // a point where we set the access specifier, so default it to >>>> "public" >>>> // to avoid triggering asserts elsewhere in the front end. >>>> setAccess(AS_public); >>>> } >>>> + >>>> + // Marking a DecompositionDecl as invalid implies all the child >>>> BindingDecl's >>>> + // are invalid too. >>>> + if (DecompositionDecl *DD = dyn_cast<DecompositionDecl>(this)) { >>>> + for (BindingDecl *Binding : DD->bindings()) { >>>> + Binding->setInvalidDecl(); >>>> + } >>>> + } >>>> } >>>> >>>> const char *DeclContext::getDeclKindName() const { >>>> >>>> Modified: cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp >>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/c >>>> xx1z-decomposition.cpp?rev=286630&r1=286629&r2=286630&view=diff >>>> ============================================================ >>>> ================== >>>> --- cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp (original) >>>> +++ cfe/trunk/test/SemaCXX/cxx1z-decomposition.cpp Fri Nov 11 14:51:04 >>>> 2016 >>>> @@ -53,4 +53,16 @@ void bitfield() { >>>> auto &[p, q, r] = a; // expected-error {{decomposes into 2 elements, >>>> but 3 names were provided}} >>>> } >>>> >>>> +void for_range() { >>>> + int x = 1; >>>> + for (auto[a, b] : x) { // expected-error {{invalid range expression >>>> of type 'int'; no viable 'begin' function available}} >>>> + a++; >>>> + } >>>> + >>>> + int y[5]; >>>> + for (auto[c] : y) { // expected-error {{cannot decompose non-class, >>>> non-array type 'int'}} >>>> + c++; >>>> + } >>>> +} >>>> + >>>> // FIXME: by-value array copies >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> cfe-commits@lists.llvm.org >>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>> >>> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits