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 13:33:57 PST 2016
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/
>> 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/f87894c3/attachment.html>
More information about the cfe-commits
mailing list