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

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Nov 11 13:19:22 PST 2016


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/
> DeclBase.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)->
> isCompleteDefinition());
> -  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/cxx1z-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/634bd9b1/attachment-0001.html>


More information about the cfe-commits mailing list