r286630 - When a DecompositionDecl is marked invalid, also set the child BindingDecl's to

Richard Trieu via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 11 14:00:54 PST 2016


That's the only one I found.  Fixed in r286641.

On Fri, Nov 11, 2016 at 1:46 PM, Richard Smith <richard at metafoo.co.uk>
wrote:

> Sema::FinalizeDeclaration contains the code I was thinking about.
>
>
> On Fri, Nov 11, 2016 at 1:33 PM, Richard Trieu <rtrieu at 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 <richard at 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 at 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 at lists.llvm.org
>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161111/20479c72/attachment.html>


More information about the cfe-commits mailing list