From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id A5AC23858421 for ; Wed, 21 Dec 2022 02:14:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A5AC23858421 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671588897; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=LP8STScZ/osURdMKZ4CCDYzRA9LpoTz5LB2mW97lKUA=; b=jQhFArDm3+5b7+vVHtGo6xIzEJKBArDsH5AweWuMutRgd9ZdBOqGRxu5SSFzm8ps6jpu+y 4xB3knEEXk/9zdJqpY9MWcj/SLt+cDRk2WcXmoDIfFeA05OFIrw7pegeVW0YChySCdwDx/ ARSUigjTpJthG23Ujentl/Xh41ak82g= Received: from mail-qk1-f198.google.com (mail-qk1-f198.google.com [209.85.222.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-251-HZZ4cf6pMwOAzlviyoRd5Q-1; Tue, 20 Dec 2022 21:14:51 -0500 X-MC-Unique: HZZ4cf6pMwOAzlviyoRd5Q-1 Received: by mail-qk1-f198.google.com with SMTP id s7-20020a05620a0bc700b006fcb1a3bb9dso10541335qki.15 for ; Tue, 20 Dec 2022 18:14:51 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iUpxYJnNOsi0QiZkzfZ/qnwlBCI+pldRv0W+3tGgKK4=; b=jtkQ+PsjrH4zjtQrDH8ELsc1kYZs1tqvjtKm4S1Pf0W4v1/e59aS2Txghf4HW3XJ2p 8Njx++Eq7ilYYZ3vOOtzOHO8FfSHGFTgl8n9h2bhgRLVZ/yzQwG4SKvv2CL5p9A1PWaf NpQTzc8G7HRSbhecWP8+EvhpDZGdNxqlJXq5ZRVMpB4/ZFWPao1u8QhmSSc3Qsc22bkU EY6KlJHE7RDcC3OabP3yJRoIr994yGUB+3SB2hhN5NHBrlFLTEutzFp59lw2KZsfCKX+ tmhFWMYA/mOiPEhc7IbelZtXnaPlgY0ttpNbf7B2orWOpdBc2SsFMUA9NPX2tqskPa3e 9r7Q== X-Gm-Message-State: AFqh2krLFGUmAjcq8jLSHi8ejBjC/RznCK0+S77yRmmxdLFbv5wHX/Cw 8EEOMLbeNVOtA0rsnoTdKrmqWJSOVHO6l3HSo4xTjqz1R2BQHFkMQsZzZ6lQGyCuBFxkuUhU9xz 2OVdAPF20IDxhzdp+jg== X-Received: by 2002:a05:622a:997:b0:3a6:a750:7295 with SMTP id bw23-20020a05622a099700b003a6a7507295mr110560qtb.4.1671588891036; Tue, 20 Dec 2022 18:14:51 -0800 (PST) X-Google-Smtp-Source: AMrXdXv7Q33uLu5TCrJof5A6WDERzNnitLs+W3oIXUswP78Y8aaxKuZ9XAvejT0FvKcqZPqPe8ij8g== X-Received: by 2002:a05:622a:997:b0:3a6:a750:7295 with SMTP id bw23-20020a05622a099700b003a6a7507295mr110524qtb.4.1671588890554; Tue, 20 Dec 2022 18:14:50 -0800 (PST) Received: from [192.168.1.108] (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id bi32-20020a05620a31a000b006ef1a8f1b81sm10029090qkb.5.2022.12.20.18.14.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 20 Dec 2022 18:14:49 -0800 (PST) Message-ID: Date: Tue, 20 Dec 2022 21:14:48 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.1 Subject: Re: [PATCH RFA(tree)] c++: source position of lambda captures [PR84471] To: Richard Biener Cc: gcc-patches@gcc.gnu.org References: From: Jason Merrill In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------IXijd0n79AI8JkZ0rt4PdOpf" Content-Language: en-US X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------IXijd0n79AI8JkZ0rt4PdOpf Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 12/20/22 14:39, Richard Biener wrote: > > >> Am 20.12.2022 um 18:38 schrieb Jason Merrill : >> >> On 12/20/22 07:07, Richard Biener wrote: >>>> On Fri, Dec 2, 2022 at 4:46 PM Jason Merrill via Gcc-patches >>>> wrote: >>>> >>>> Tested x86_64-pc-linux-gnu, OK for trunk? >>>> >>>> -- 8< -- >>>> >>>> If the DECL_VALUE_EXPR of a VAR_DECL has EXPR_LOCATION set, then any use of >>>> that variable looks like it has that location, which leads to the debugger >>>> jumping back and forth for both lambdas and structured bindings. >>>> >>>> Rather than fix all the uses, it seems simplest to remove any EXPR_LOCATION >>>> when setting DECL_VALUE_EXPR. So the cp/ hunks aren't necessary, but it >>>> seems cleaner not to work to add a location that will immediately get >>>> stripped. >>>> >>>> PR c++/84471 >>>> PR c++/107504 >>>> >>>> gcc/cp/ChangeLog: >>>> >>>> * coroutines.cc (transform_local_var_uses): Don't >>>> specify a location for DECL_VALUE_EXPR. >>>> * decl.cc (cp_finish_decomp): Likewise. >>>> >>>> gcc/ChangeLog: >>>> >>>> * tree.cc (decl_value_expr_insert): Clear EXPR_LOCATION. >>>> >>>> gcc/testsuite/ChangeLog: >>>> >>>> * g++.dg/tree-ssa/value-expr1.C: New test. >>>> * g++.dg/tree-ssa/value-expr2.C: New test. >>>> * g++.dg/analyzer/pr93212.C: Move warning. >>>> --- >>>> gcc/cp/coroutines.cc | 4 ++-- >>>> gcc/cp/decl.cc | 12 +++------- >>>> gcc/testsuite/g++.dg/analyzer/pr93212.C | 4 ++-- >>>> gcc/testsuite/g++.dg/tree-ssa/value-expr1.C | 16 +++++++++++++ >>>> gcc/testsuite/g++.dg/tree-ssa/value-expr2.C | 26 +++++++++++++++++++++ >>>> gcc/tree.cc | 3 +++ >>>> 6 files changed, 52 insertions(+), 13 deletions(-) >>>> create mode 100644 gcc/testsuite/g++.dg/tree-ssa/value-expr1.C >>>> create mode 100644 gcc/testsuite/g++.dg/tree-ssa/value-expr2.C >>>> >>>> diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc >>>> index 01a3e831ee5..a72bd6bbef0 100644 >>>> --- a/gcc/cp/coroutines.cc >>>> +++ b/gcc/cp/coroutines.cc >>>> @@ -2047,8 +2047,8 @@ transform_local_var_uses (tree *stmt, int *do_subtree, void *d) >>>> = lookup_member (lvd->coro_frame_type, local_var.field_id, >>>> /*protect=*/1, /*want_type=*/0, >>>> tf_warning_or_error); >>>> - tree fld_idx = build3_loc (lvd->loc, COMPONENT_REF, TREE_TYPE (lvar), >>>> - lvd->actor_frame, fld_ref, NULL_TREE); >>>> + tree fld_idx = build3 (COMPONENT_REF, TREE_TYPE (lvar), >>>> + lvd->actor_frame, fld_ref, NULL_TREE); >>>> local_var.field_idx = fld_idx; >>>> SET_DECL_VALUE_EXPR (lvar, fld_idx); >>>> DECL_HAS_VALUE_EXPR_P (lvar) = true; >>>> diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc >>>> index 7af0b05d5f8..59e21581503 100644 >>>> --- a/gcc/cp/decl.cc >>>> +++ b/gcc/cp/decl.cc >>>> @@ -9133,9 +9133,7 @@ cp_finish_decomp (tree decl, tree first, unsigned int count) >>>> if (processing_template_decl) >>>> continue; >>>> tree t = unshare_expr (dexp); >>>> - t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF, >>>> - eltype, t, size_int (i), NULL_TREE, >>>> - NULL_TREE); >>>> + t = build4 (ARRAY_REF, eltype, t, size_int (i), NULL_TREE, NULL_TREE); >>>> SET_DECL_VALUE_EXPR (v[i], t); >>>> DECL_HAS_VALUE_EXPR_P (v[i]) = 1; >>>> } >>>> @@ -9154,9 +9152,7 @@ cp_finish_decomp (tree decl, tree first, unsigned int count) >>>> if (processing_template_decl) >>>> continue; >>>> tree t = unshare_expr (dexp); >>>> - t = build1_loc (DECL_SOURCE_LOCATION (v[i]), >>>> - i ? IMAGPART_EXPR : REALPART_EXPR, eltype, >>>> - t); >>>> + t = build1 (i ? IMAGPART_EXPR : REALPART_EXPR, eltype, t); >>>> SET_DECL_VALUE_EXPR (v[i], t); >>>> DECL_HAS_VALUE_EXPR_P (v[i]) = 1; >>>> } >>>> @@ -9180,9 +9176,7 @@ cp_finish_decomp (tree decl, tree first, unsigned int count) >>>> tree t = unshare_expr (dexp); >>>> convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]), >>>> &t, size_int (i)); >>>> - t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF, >>>> - eltype, t, size_int (i), NULL_TREE, >>>> - NULL_TREE); >>>> + t = build4 (ARRAY_REF, eltype, t, size_int (i), NULL_TREE, NULL_TREE); >>>> SET_DECL_VALUE_EXPR (v[i], t); >>>> DECL_HAS_VALUE_EXPR_P (v[i]) = 1; >>>> } >>>> diff --git a/gcc/testsuite/g++.dg/analyzer/pr93212.C b/gcc/testsuite/g++.dg/analyzer/pr93212.C >>>> index 41507e2b837..1029e8d547b 100644 >>>> --- a/gcc/testsuite/g++.dg/analyzer/pr93212.C >>>> +++ b/gcc/testsuite/g++.dg/analyzer/pr93212.C >>>> @@ -4,8 +4,8 @@ >>>> auto lol() >>>> { >>>> int aha = 3; >>>> - return [&aha] { // { dg-warning "dereferencing pointer '.*' to within stale stack frame" } >>>> - return aha; >>>> + return [&aha] { >>>> + return aha; // { dg-warning "dereferencing pointer '.*' to within stale stack frame" } >>>> }; >>>> /* TODO: may be worth special-casing the reporting of dangling >>>> references from lambdas, to highlight the declaration, and maybe fix >>>> diff --git a/gcc/testsuite/g++.dg/tree-ssa/value-expr1.C b/gcc/testsuite/g++.dg/tree-ssa/value-expr1.C >>>> new file mode 100644 >>>> index 00000000000..946ccc3bd97 >>>> --- /dev/null >>>> +++ b/gcc/testsuite/g++.dg/tree-ssa/value-expr1.C >>>> @@ -0,0 +1,16 @@ >>>> +// PR c++/84471 >>>> +// { dg-do compile { target c++11 } } >>>> +// { dg-additional-options -fdump-tree-gimple-lineno } >>>> +// { dg-final { scan-tree-dump-not {value-expr: \[} "gimple" } } >>>> + >>>> +int main(int argc, char**) >>>> +{ >>>> + int x = 1; >>>> + auto f = [&x, &argc](const char* i) { >>>> + i += x; >>>> + i -= argc; >>>> + i += argc - x; >>>> + return i; >>>> + }; >>>> + f(" "); >>>> +} >>>> diff --git a/gcc/testsuite/g++.dg/tree-ssa/value-expr2.C b/gcc/testsuite/g++.dg/tree-ssa/value-expr2.C >>>> new file mode 100644 >>>> index 00000000000..4d00498f214 >>>> --- /dev/null >>>> +++ b/gcc/testsuite/g++.dg/tree-ssa/value-expr2.C >>>> @@ -0,0 +1,26 @@ >>>> +// PR c++/107504 >>>> +// { dg-do compile { target c++17 } } >>>> +// { dg-additional-options -fdump-tree-gimple-lineno } >>>> +// { dg-final { scan-tree-dump-not {value-expr: \[} "gimple" } } >>>> + >>>> +struct S >>>> +{ >>>> + void* i; >>>> + int j; >>>> +}; >>>> + >>>> +S f(char* p) >>>> +{ >>>> + return {p, 1}; >>>> +} >>>> + >>>> +int main() >>>> +{ >>>> + char buf[1]; >>>> + auto [x, y] = f(buf); >>>> + if (x != buf) >>>> + throw 1; >>>> + if (y != 1) >>>> + throw 2; >>>> + return 0; >>>> +} >>>> diff --git a/gcc/tree.cc b/gcc/tree.cc >>>> index 254b2373dcf..836c51cd4d5 100644 >>>> --- a/gcc/tree.cc >>>> +++ b/gcc/tree.cc >>>> @@ -5862,6 +5862,9 @@ decl_value_expr_insert (tree from, tree to) >>>> { >>>> struct tree_decl_map *h; >>>> >>>> + /* Uses of FROM shouldn't look like they happen at the location of TO. */ >>>> + protected_set_expr_location (to, UNKNOWN_LOCATION); >>>> + >>> Doesn't that mean we'd eventually want unshare_expr_without_location >>> or similar here? Or rather maybe set the location of TO to that of >>> FROM? That said, this modifies FROM in place - we have >>> protected_set_expr_location_unshare (would need to be exported >>> from fold-const.cc) to avoid clobbering a possibly shared tree. >> >> I think these expressions aren't ever shared in practice, but I agree it's safer to use the _unshare variant. OK with that change? >> >>> Maybe it would be easier to handle this in the consumers of the >>> DECL_VALUE_EXPR? gimplify_var_or_parm_decl does >> >> I don't see how auditing all the (many) users of DECL_VALUE_EXPR would be easier than doing it in this one place > > It might do less unsharing. But OK with the _unshare variant. Thanks, here's what I pushed. --------------IXijd0n79AI8JkZ0rt4PdOpf Content-Type: text/x-patch; charset=UTF-8; name="0001-c-source-position-of-lambda-captures-PR84471.patch" Content-Disposition: attachment; filename="0001-c-source-position-of-lambda-captures-PR84471.patch" Content-Transfer-Encoding: base64 RnJvbSAzMDI0ODVhNzBhMzNmM2E4NmU4NWFkOTA1MWRlMmI1MWM1ZGMwYmMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYXNvbiBNZXJyaWxsIDxqYXNvbkByZWRoYXQuY29tPgpEYXRl OiBUaHUsIDEgRGVjIDIwMjIgMjI6NTg6MjggLTA1MDAKU3ViamVjdDogW1BBVENIXSBjKys6IHNv dXJjZSBwb3NpdGlvbiBvZiBsYW1iZGEgY2FwdHVyZXMgW1BSODQ0NzFdClRvOiBnY2MtcGF0Y2hl c0BnY2MuZ251Lm9yZwoKSWYgdGhlIERFQ0xfVkFMVUVfRVhQUiBvZiBhIFZBUl9ERUNMIGhhcyBF WFBSX0xPQ0FUSU9OIHNldCwgdGhlbiBhbnkgdXNlIG9mCnRoYXQgdmFyaWFibGUgbG9va3MgbGlr ZSBpdCBoYXMgdGhhdCBsb2NhdGlvbiwgd2hpY2ggbGVhZHMgdG8gdGhlIGRlYnVnZ2VyCmp1bXBp bmcgYmFjayBhbmQgZm9ydGggZm9yIGJvdGggbGFtYmRhcyBhbmQgc3RydWN0dXJlZCBiaW5kaW5n cy4KClJhdGhlciB0aGFuIGZpeCBhbGwgdGhlIHVzZXMsIGl0IHNlZW1zIHNpbXBsZXN0IHRvIHJl bW92ZSBhbnkgRVhQUl9MT0NBVElPTgp3aGVuIHNldHRpbmcgREVDTF9WQUxVRV9FWFBSLiAgU28g dGhlIGNwLyBodW5rcyBhcmVuJ3QgbmVjZXNzYXJ5LCBidXQgdGhleQphdm9pZCB0aGUgbmVlZCB0 byB1bnNoYXJlIHRvIHJlbW92ZSB0aGUgbG9jYXRpb24uCgoJUFIgYysrLzg0NDcxCglQUiBjKysv MTA3NTA0CgpnY2MvY3AvQ2hhbmdlTG9nOgoKCSogY29yb3V0aW5lcy5jYyAodHJhbnNmb3JtX2xv Y2FsX3Zhcl91c2VzKTogRG9uJ3QKCXNwZWNpZnkgYSBsb2NhdGlvbiBmb3IgREVDTF9WQUxVRV9F WFBSLgoJKiBkZWNsLmNjIChjcF9maW5pc2hfZGVjb21wKTogTGlrZXdpc2UuCgpnY2MvQ2hhbmdl TG9nOgoKCSogZm9sZC1jb25zdC5jYyAocHJvdGVjdGVkX3NldF9leHByX2xvY2F0aW9uX3Vuc2hh cmUpOiBOb3Qgc3RhdGljLgoJKiB0cmVlLmg6IERlY2xhcmUgaXQuCgkqIHRyZWUuY2MgKGRlY2xf dmFsdWVfZXhwcl9pbnNlcnQpOiBVc2UgaXQuCgppbmNsdWRlL0NoYW5nZUxvZzoKCgkqIGFuc2lk ZWNsLmggKEFUVFJJQlVURV9XQVJOX1VOVVNFRF9SRVNVTFQpOiBBZGQgX18uCgpnY2MvdGVzdHN1 aXRlL0NoYW5nZUxvZzoKCgkqIGcrKy5kZy90cmVlLXNzYS92YWx1ZS1leHByMS5DOiBOZXcgdGVz dC4KCSogZysrLmRnL3RyZWUtc3NhL3ZhbHVlLWV4cHIyLkM6IE5ldyB0ZXN0LgoJKiBnKysuZGcv YW5hbHl6ZXIvcHI5MzIxMi5DOiBNb3ZlIHdhcm5pbmcuCi0tLQogZ2NjL3RyZWUuaCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyICsrCiBpbmNsdWRlL2Fuc2lkZWNsLmggICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGdjYy9jcC9jb3JvdXRpbmVzLmNjICAgICAg ICAgICAgICAgICAgICAgICAgfCAgNCArKy0tCiBnY2MvY3AvZGVjbC5jYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwgMTIgKysrLS0tLS0tLQogZ2NjL2ZvbGQtY29uc3QuY2MgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAyICstCiBnY2MvdGVzdHN1aXRlL2crKy5kZy9hbmFseXpl ci9wcjkzMjEyLkMgICAgIHwgIDQgKystLQogZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdHJlZS1zc2Ev dmFsdWUtZXhwcjEuQyB8IDE2ICsrKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZysrLmRnL3Ry ZWUtc3NhL3ZhbHVlLWV4cHIyLkMgfCAyNiArKysrKysrKysrKysrKysrKysrKysKIGdjYy90cmVl LmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMyArKysKIDkgZmlsZXMgY2hh bmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvdHJlZS1zc2EvdmFsdWUtZXhwcjEuQwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtc3NhL3ZhbHVlLWV4cHIyLkMKCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS5oIGIvZ2NjL3RyZWUuaAppbmRleCAzMWQwZGNhZjI0OS4uNjRh MjQxZjUxZTIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtMTI4 OSw2ICsxMjg5LDggQEAgZ2V0X2V4cHJfc291cmNlX3JhbmdlICh0cmVlIGV4cHIpCiAKIGV4dGVy biB2b2lkIHByb3RlY3RlZF9zZXRfZXhwcl9sb2NhdGlvbiAodHJlZSwgbG9jYXRpb25fdCk7CiBl eHRlcm4gdm9pZCBwcm90ZWN0ZWRfc2V0X2V4cHJfbG9jYXRpb25faWZfdW5zZXQgKHRyZWUsIGxv Y2F0aW9uX3QpOworQVRUUklCVVRFX1dBUk5fVU5VU0VEX1JFU1VMVAorZXh0ZXJuIHRyZWUgcHJv dGVjdGVkX3NldF9leHByX2xvY2F0aW9uX3Vuc2hhcmUgKHRyZWUsIGxvY2F0aW9uX3QpOwogCiBX QVJOX1VOVVNFRF9SRVNVTFQgZXh0ZXJuIHRyZWUgbWF5YmVfd3JhcF93aXRoX2xvY2F0aW9uICh0 cmVlLCBsb2NhdGlvbl90KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hbnNpZGVjbC5oIGIvaW5j bHVkZS9hbnNpZGVjbC5oCmluZGV4IDA1NmEwM2ViYjZlLi40ZGE4MDY5ZjE3MSAxMDA2NDQKLS0t IGEvaW5jbHVkZS9hbnNpZGVjbC5oCisrKyBiL2luY2x1ZGUvYW5zaWRlY2wuaApAQCAtMjc5LDcg KzI3OSw3IEBAIFNvIGluc3RlYWQgd2UgdXNlIHRoZSBtYWNybyBiZWxvdyBhbmQgdGVzdCBpdCBh Z2FpbnN0IHNwZWNpZmljIHZhbHVlcy4gICovCiAvKiBBdHRyaWJ1dGUgYHdhcm5fdW51c2VkX3Jl c3VsdCcgd2FzIHZhbGlkIGFzIG9mIGdjYyAzLjMuICAqLwogI2lmbmRlZiBBVFRSSUJVVEVfV0FS Tl9VTlVTRURfUkVTVUxUCiAjIGlmIEdDQ19WRVJTSU9OID49IDMwMDMKLSMgIGRlZmluZSBBVFRS SUJVVEVfV0FSTl9VTlVTRURfUkVTVUxUIF9fYXR0cmlidXRlX18gKCh3YXJuX3VudXNlZF9yZXN1 bHQpKQorIyAgZGVmaW5lIEFUVFJJQlVURV9XQVJOX1VOVVNFRF9SRVNVTFQgX19hdHRyaWJ1dGVf XyAoKF9fd2Fybl91bnVzZWRfcmVzdWx0X18pKQogIyBlbHNlCiAjICBkZWZpbmUgQVRUUklCVVRF X1dBUk5fVU5VU0VEX1JFU1VMVAogIyBlbmRpZgpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2Nvcm91dGlu ZXMuY2MgYi9nY2MvY3AvY29yb3V0aW5lcy5jYwppbmRleCA4OGQ2YzMwZDhiMS4uNzdlMmE5MGYw ZjkgMTAwNjQ0Ci0tLSBhL2djYy9jcC9jb3JvdXRpbmVzLmNjCisrKyBiL2djYy9jcC9jb3JvdXRp bmVzLmNjCkBAIC0yMDQ3LDggKzIwNDcsOCBAQCB0cmFuc2Zvcm1fbG9jYWxfdmFyX3VzZXMgKHRy ZWUgKnN0bXQsIGludCAqZG9fc3VidHJlZSwgdm9pZCAqZCkKIAkgICAgPSBsb29rdXBfbWVtYmVy IChsdmQtPmNvcm9fZnJhbWVfdHlwZSwgbG9jYWxfdmFyLmZpZWxkX2lkLAogCQkJICAgICAvKnBy b3RlY3Q9Ki8xLCAvKndhbnRfdHlwZT0qLzAsCiAJCQkgICAgIHRmX3dhcm5pbmdfb3JfZXJyb3Ip OwotCSAgdHJlZSBmbGRfaWR4ID0gYnVpbGQzX2xvYyAobHZkLT5sb2MsIENPTVBPTkVOVF9SRUYs IFRSRUVfVFlQRSAobHZhciksCi0JCQkJICAgICBsdmQtPmFjdG9yX2ZyYW1lLCBmbGRfcmVmLCBO VUxMX1RSRUUpOworCSAgdHJlZSBmbGRfaWR4ID0gYnVpbGQzIChDT01QT05FTlRfUkVGLCBUUkVF X1RZUEUgKGx2YXIpLAorCQkJCSBsdmQtPmFjdG9yX2ZyYW1lLCBmbGRfcmVmLCBOVUxMX1RSRUUp OwogCSAgbG9jYWxfdmFyLmZpZWxkX2lkeCA9IGZsZF9pZHg7CiAJICBTRVRfREVDTF9WQUxVRV9F WFBSIChsdmFyLCBmbGRfaWR4KTsKIAkgIERFQ0xfSEFTX1ZBTFVFX0VYUFJfUCAobHZhcikgPSB0 cnVlOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL2RlY2wuY2MgYi9nY2MvY3AvZGVjbC5jYwppbmRleCBk Zjc0ZDg4NmIyOC4uM2MwMzU1YTFjMzkgMTAwNjQ0Ci0tLSBhL2djYy9jcC9kZWNsLmNjCisrKyBi L2djYy9jcC9kZWNsLmNjCkBAIC05MTM3LDkgKzkxMzcsNyBAQCBjcF9maW5pc2hfZGVjb21wICh0 cmVlIGRlY2wsIHRyZWUgZmlyc3QsIHVuc2lnbmVkIGludCBjb3VudCkKIAkgIGlmIChwcm9jZXNz aW5nX3RlbXBsYXRlX2RlY2wpCiAJICAgIGNvbnRpbnVlOwogCSAgdHJlZSB0ID0gdW5zaGFyZV9l eHByIChkZXhwKTsKLQkgIHQgPSBidWlsZDRfbG9jIChERUNMX1NPVVJDRV9MT0NBVElPTiAodltp XSksIEFSUkFZX1JFRiwKLQkJCSAgZWx0eXBlLCB0LCBzaXplX2ludCAoaSksIE5VTExfVFJFRSwK LQkJCSAgTlVMTF9UUkVFKTsKKwkgIHQgPSBidWlsZDQgKEFSUkFZX1JFRiwgZWx0eXBlLCB0LCBz aXplX2ludCAoaSksIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKIAkgIFNFVF9ERUNMX1ZBTFVFX0VY UFIgKHZbaV0sIHQpOwogCSAgREVDTF9IQVNfVkFMVUVfRVhQUl9QICh2W2ldKSA9IDE7CiAJfQpA QCAtOTE1OCw5ICs5MTU2LDcgQEAgY3BfZmluaXNoX2RlY29tcCAodHJlZSBkZWNsLCB0cmVlIGZp cnN0LCB1bnNpZ25lZCBpbnQgY291bnQpCiAJICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNs KQogCSAgICBjb250aW51ZTsKIAkgIHRyZWUgdCA9IHVuc2hhcmVfZXhwciAoZGV4cCk7Ci0JICB0 ID0gYnVpbGQxX2xvYyAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKHZbaV0pLAotCQkJICBpID8gSU1B R1BBUlRfRVhQUiA6IFJFQUxQQVJUX0VYUFIsIGVsdHlwZSwKLQkJCSAgdCk7CisJICB0ID0gYnVp bGQxIChpID8gSU1BR1BBUlRfRVhQUiA6IFJFQUxQQVJUX0VYUFIsIGVsdHlwZSwgdCk7CiAJICBT RVRfREVDTF9WQUxVRV9FWFBSICh2W2ldLCB0KTsKIAkgIERFQ0xfSEFTX1ZBTFVFX0VYUFJfUCAo dltpXSkgPSAxOwogCX0KQEAgLTkxODQsOSArOTE4MCw3IEBAIGNwX2ZpbmlzaF9kZWNvbXAgKHRy ZWUgZGVjbCwgdHJlZSBmaXJzdCwgdW5zaWduZWQgaW50IGNvdW50KQogCSAgdHJlZSB0ID0gdW5z aGFyZV9leHByIChkZXhwKTsKIAkgIGNvbnZlcnRfdmVjdG9yX3RvX2FycmF5X2Zvcl9zdWJzY3Jp cHQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OICh2W2ldKSwKIAkJCQkJCSAmdCwgc2l6ZV9pbnQgKGkp KTsKLQkgIHQgPSBidWlsZDRfbG9jIChERUNMX1NPVVJDRV9MT0NBVElPTiAodltpXSksIEFSUkFZ X1JFRiwKLQkJCSAgZWx0eXBlLCB0LCBzaXplX2ludCAoaSksIE5VTExfVFJFRSwKLQkJCSAgTlVM TF9UUkVFKTsKKwkgIHQgPSBidWlsZDQgKEFSUkFZX1JFRiwgZWx0eXBlLCB0LCBzaXplX2ludCAo aSksIE5VTExfVFJFRSwgTlVMTF9UUkVFKTsKIAkgIFNFVF9ERUNMX1ZBTFVFX0VYUFIgKHZbaV0s IHQpOwogCSAgREVDTF9IQVNfVkFMVUVfRVhQUl9QICh2W2ldKSA9IDE7CiAJfQpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvbGQtY29uc3QuY2MgYi9nY2MvZm9sZC1jb25zdC5jYwppbmRleCBlNGM0M2ZiZThj Yi4uNDI1NDdmNDMzZWQgMTAwNjQ0Ci0tLSBhL2djYy9mb2xkLWNvbnN0LmNjCisrKyBiL2djYy9m b2xkLWNvbnN0LmNjCkBAIC0xNjQsNyArMTY0LDcgQEAgZXhwcl9sb2NhdGlvbl9vciAodHJlZSB0 LCBsb2NhdGlvbl90IGxvYykKIC8qIFNpbWlsYXIgdG8gcHJvdGVjdGVkX3NldF9leHByX2xvY2F0 aW9uLCBidXQgbmV2ZXIgbW9kaWZ5IHggaW4gcGxhY2UsCiAgICBpZiBsb2NhdGlvbiBjYW4gYW5k IG5lZWRzIHRvIGJlIHNldCwgdW5zaGFyZSBpdC4gICovCiAKLXN0YXRpYyBpbmxpbmUgdHJlZQor dHJlZQogcHJvdGVjdGVkX3NldF9leHByX2xvY2F0aW9uX3Vuc2hhcmUgKHRyZWUgeCwgbG9jYXRp b25fdCBsb2MpCiB7CiAgIGlmIChDQU5fSEFWRV9MT0NBVElPTl9QICh4KQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvYW5hbHl6ZXIvcHI5MzIxMi5DIGIvZ2NjL3Rlc3RzdWl0ZS9n KysuZGcvYW5hbHl6ZXIvcHI5MzIxMi5DCmluZGV4IDQxNTA3ZTJiODM3Li4xMDI5ZThkNTQ3YiAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvYW5hbHl6ZXIvcHI5MzIxMi5DCisrKyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2FuYWx5emVyL3ByOTMyMTIuQwpAQCAtNCw4ICs0LDggQEAK IGF1dG8gbG9sKCkKIHsKICAgICBpbnQgYWhhID0gMzsKLSAgICByZXR1cm4gWyZhaGFdIHsgLy8g eyBkZy13YXJuaW5nICJkZXJlZmVyZW5jaW5nIHBvaW50ZXIgJy4qJyB0byB3aXRoaW4gc3RhbGUg c3RhY2sgZnJhbWUiIH0KLSAgICAgICAgcmV0dXJuIGFoYTsKKyAgICByZXR1cm4gWyZhaGFdIHsK KyAgICAgICAgcmV0dXJuIGFoYTsgLy8geyBkZy13YXJuaW5nICJkZXJlZmVyZW5jaW5nIHBvaW50 ZXIgJy4qJyB0byB3aXRoaW4gc3RhbGUgc3RhY2sgZnJhbWUiIH0KICAgICB9OwogICAgIC8qIFRP RE86IG1heSBiZSB3b3J0aCBzcGVjaWFsLWNhc2luZyB0aGUgcmVwb3J0aW5nIG9mIGRhbmdsaW5n CiAgICAgICAgcmVmZXJlbmNlcyBmcm9tIGxhbWJkYXMsIHRvIGhpZ2hsaWdodCB0aGUgZGVjbGFy YXRpb24sIGFuZCBtYXliZSBmaXgKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL3Ry ZWUtc3NhL3ZhbHVlLWV4cHIxLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy90cmVlLXNzYS92YWx1 ZS1leHByMS5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45NDZjY2Mz YmQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRnL3RyZWUtc3NhL3Zh bHVlLWV4cHIxLkMKQEAgLTAsMCArMSwxNiBAQAorLy8gUFIgYysrLzg0NDcxCisvLyB7IGRnLWRv IGNvbXBpbGUgeyB0YXJnZXQgYysrMTEgfSB9CisvLyB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAt ZmR1bXAtdHJlZS1naW1wbGUtbGluZW5vIH0KKy8vIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC1ub3Qge3ZhbHVlLWV4cHI6IFxbfSAiZ2ltcGxlIiB9IH0KKworaW50IG1haW4oaW50IGFyZ2Ms IGNoYXIqKikKK3sKKyAgaW50IHggPSAxOworICBhdXRvIGYgPSBbJngsICZhcmdjXShjb25zdCBj aGFyKiBpKSB7CisgICAgaSArPSB4OworICAgIGkgLT0gYXJnYzsKKyAgICBpICs9IGFyZ2MgLSB4 OworICAgIHJldHVybiBpOworICB9OworICBmKCIgICAgICAgICAgIik7Cit9CmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2crKy5kZy90cmVlLXNzYS92YWx1ZS1leHByMi5DIGIvZ2NjL3Rlc3Rz dWl0ZS9nKysuZGcvdHJlZS1zc2EvdmFsdWUtZXhwcjIuQwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGQwMDQ5OGYyMTQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2crKy5kZy90cmVlLXNzYS92YWx1ZS1leHByMi5DCkBAIC0wLDAgKzEsMjYgQEAKKy8v IFBSIGMrKy8xMDc1MDQKKy8vIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCBjKysxNyB9IH0KKy8v IHsgZGctYWRkaXRpb25hbC1vcHRpb25zIC1mZHVtcC10cmVlLWdpbXBsZS1saW5lbm8gfQorLy8g eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLW5vdCB7dmFsdWUtZXhwcjogXFt9ICJnaW1wbGUi IH0gfQorCitzdHJ1Y3QgUworeworICB2b2lkKiBpOworICBpbnQgajsKK307CisKK1MgZihjaGFy KiBwKQoreworICByZXR1cm4ge3AsIDF9OworfQorCitpbnQgbWFpbigpCit7CisgIGNoYXIgYnVm WzFdOworICBhdXRvIFt4LCB5XSA9IGYoYnVmKTsKKyAgaWYgKHggIT0gYnVmKQorICAgIHRocm93 IDE7CisgIGlmICh5ICE9IDEpCisgICAgdGhyb3cgMjsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9nY2MvdHJlZS5jYyBiL2djYy90cmVlLmNjCmluZGV4IDkyMTk5YmI2NTAzLi41ODFkNDQ4 OTQzOCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuY2MKKysrIGIvZ2NjL3RyZWUuY2MKQEAgLTU4NjIs NiArNTg2Miw5IEBAIGRlY2xfdmFsdWVfZXhwcl9pbnNlcnQgKHRyZWUgZnJvbSwgdHJlZSB0bykK IHsKICAgc3RydWN0IHRyZWVfZGVjbF9tYXAgKmg7CiAKKyAgLyogVXNlcyBvZiBGUk9NIHNob3Vs ZG4ndCBsb29rIGxpa2UgdGhleSBoYXBwZW4gYXQgdGhlIGxvY2F0aW9uIG9mIFRPLiAgKi8KKyAg dG8gPSBwcm90ZWN0ZWRfc2V0X2V4cHJfbG9jYXRpb25fdW5zaGFyZSAodG8sIFVOS05PV05fTE9D QVRJT04pOworCiAgIGggPSBnZ2NfYWxsb2M8dHJlZV9kZWNsX21hcD4gKCk7CiAgIGgtPmJhc2Uu ZnJvbSA9IGZyb207CiAgIGgtPnRvID0gdG87Ci0tIAoyLjMxLjEKCg== --------------IXijd0n79AI8JkZ0rt4PdOpf--