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.133.124]) by sourceware.org (Postfix) with ESMTPS id 0148238E3581 for ; Thu, 8 Dec 2022 18:30:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0148238E3581 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=1670524241; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SKqOIp52yNTGlvMVwsVs9HAYvjkKEBAeZrIxE27S+q4=; b=PwSezgXLezj7i4k5SkVDui2+V2kkXggCdyeudpq/zhGn8LyokWPWRl1XXVYKEM64KnzPkZ EGZ7dcny3H/0Wx1NUlxSRZ396UZJnJ8iyRGyU1Sm5GFBjiJLOZw3RwKpQ3hVqY+UvA3zd0 Xlz2WhgAAPiouk26BvA9La8ZkF4KNkc= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-78-lY4BEpClMiWpzf2BjaDvyg-1; Thu, 08 Dec 2022 13:30:40 -0500 X-MC-Unique: lY4BEpClMiWpzf2BjaDvyg-1 Received: by mail-qv1-f70.google.com with SMTP id on28-20020a056214449c00b004bbf12d7976so2119998qvb.18 for ; Thu, 08 Dec 2022 10:30:40 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:references:to:from :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=SKqOIp52yNTGlvMVwsVs9HAYvjkKEBAeZrIxE27S+q4=; b=q+yZeEfAjb3bUzx3XgWhV+Xfkh3SCVbNzxtdKcYA/Kjg5TETKWGD4hzIteq8Km/XWf BdAZsxxqGxuH4u6uwsFspQGPBgklCR47EmKE1guiD3DqaZg+Ge44Jb846GwbmTOSY5Da 23JpYBC/gxyQNfGZ43bUHg0gtiugwD0jKv8RmDNcKMHVNppaRukLyj1Ro7j4dYhk+R4Q 0Zz2+O7jZtKDXMvOJw4+0iGWdp3b9WXkVlaacMqNzlR9ddImXWWCTFeGkYyxIlV5itCh /p8FzNCdzyH76vWqvtMVH50VWAzhpc0xUQmK+31BdCOnP9A2lVyuACG2DZn48wwLbWCm yYTA== X-Gm-Message-State: ANoB5plg4LLryTEWe9snkbdz0Ce+5jJIq0OueiCLFNBlmUU/xueyAPWO Cw/DyzW6oxL8p21GUaDUK//m9fjC/Z5eRLiXCN3FrqSYqP+Yd/PnnevQFMD3gpiVfrp7F4kpBZz PRLDRv63zYq28rEvXunkJSAY8vvuLsDlXv9GBVGSmDl0cvmJDCBqfOvDaWNC8SOzUTg== X-Received: by 2002:a05:6214:2f8f:b0:4c6:edca:1d0a with SMTP id ob15-20020a0562142f8f00b004c6edca1d0amr4977826qvb.22.1670524239711; Thu, 08 Dec 2022 10:30:39 -0800 (PST) X-Google-Smtp-Source: AA0mqf4k9Rc5xb8MdSMgQvrREfW+dueA0LEv9+RLZydzMwqnATTMyrskmHF9JSmAciWYdxwM90WW/A== X-Received: by 2002:a05:6214:2f8f:b0:4c6:edca:1d0a with SMTP id ob15-20020a0562142f8f00b004c6edca1d0amr4977787qvb.22.1670524239167; Thu, 08 Dec 2022 10:30:39 -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 y6-20020a05620a44c600b006fa7b5ea2d1sm20155912qkp.125.2022.12.08.10.30.38 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Dec 2022 10:30:38 -0800 (PST) Message-ID: <87152bf6-c6c0-3412-d6dc-a97e730bce33@redhat.com> Date: Thu, 8 Dec 2022 13:30:37 -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] From: Jason Merrill To: gcc-patches@gcc.gnu.org References: <20221202154512.310755-1-jason@redhat.com> In-Reply-To: <20221202154512.310755-1-jason@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.5 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: Ping. On 12/2/22 10:45, Jason Merrill 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); > + > h = ggc_alloc (); > h->base.from = from; > h->to = to; > > base-commit: 70596a0fb2a2ec072e1e97e37616e05041dfa4e5