From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2001:67c:2178:6::1d]) by sourceware.org (Postfix) with ESMTPS id CBC9E3858D3C for ; Tue, 21 Feb 2023 14:21:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CBC9E3858D3C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out2.suse.de (Postfix) with ESMTP id C34B15C744; Tue, 21 Feb 2023 14:21:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1676989281; h=from:from:reply-to: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=oAm+SrVfqR1kho2kee8qiu6lzLUC1b19aW6kXk/rGUc=; b=TiMgtNvXVhfjFutHppESX4kejTzj++N1TXvfVjQjhROYTzKAn8s0Awn+8rrMgGeguWqK8I 4kdOkxDQHkZiXJjhr1JgJkvlXSsQYOh/KdbwEe83K+ZH4Ldw5PSuIr0M4ygLwyLQ507l0F Uf7DbEaX/oDpyU+PvyyFxKHZVQHk7Us= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1676989281; h=from:from:reply-to: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=oAm+SrVfqR1kho2kee8qiu6lzLUC1b19aW6kXk/rGUc=; b=AJnla3C+qgQgxSIC3Vly9wbBbUV9L28YqFLUfYxc2EPtiEad0M/WIx2Om9WMWuuw3pfQZ5 PpNE1We7tBrC1LCw== Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id B78A22C14F; Tue, 21 Feb 2023 14:21:21 +0000 (UTC) Date: Tue, 21 Feb 2023 14:21:21 +0000 (UTC) From: Richard Biener To: Martin Uecker cc: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] gimplify size expressions in parameters for all types [PR107557] [PR108423] In-Reply-To: Message-ID: References: <932c3fcb674894cbf933fdb679d966487150d81c.camel@tugraz.at> User-Agent: Alpine 2.22 (LSU 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="-1609957120-1975505276-1676989281=:27913" X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,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 message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. ---1609957120-1975505276-1676989281=:27913 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT On Tue, 21 Feb 2023, Martin Uecker wrote: > > > Hi Richard, > > can you look at this middle-end patch? It fixes two regressions. But gimplify_type_sizes recurses itself, but in particular _not_ for pointer types. Iff recursing in parameter context is necessary and safe I'd rather have gimplify_type_sizes know that (bool for_param_p?) and do the recursion? Richard. > Martin > > > PS: I happy to do something about at variably_modified_type_p  > in the middle-end, if you have a recommendation. > > > > > Am Mittwoch, dem 08.02.2023 um 13:02 +0100 schrieb Martin Uecker: > > > > Here is a fix for PR107557 and PR108423. > > > > > > Bootstrapped and regression tested on x86-64. > > > > > > > >     Gimplify more size expression in parameters [PR107557] and [PR108234] > >      > > > >     gimplify_parm_type only recursives into pointer type and > >     size expressions in other types (e.g. function types) were > >     not reached. > >      > > > >     PR c/107557 > >     PR c/108234 > >      > > > >     gcc/Changelog > >             * gcc/function.cc (gimplify_parm_type): Also recursive into > >             non-pointer types. > >      > > > >     gcc/testsuite/ChangeLog: > >             * gcc.dg/pr107557-1.c: New test. > >             * gcc.dg/pr107557-2.c: New test. > >             * gcc.dg/pr108423-1.c: New test. > >             * gcc.dg/pr108423-2.c: New test. > >             * gcc.dg/pr108423-3.c: New test. > >             * gcc.dg/pr108423-4.c: New test. > >             * gcc.dg/pr108423-5.c: New test. > > > > > > > > > > diff --git a/gcc/function.cc b/gcc/function.cc > > index cfc4d2f74af..d777348aeb4 100644 > > --- a/gcc/function.cc > > +++ b/gcc/function.cc > > @@ -3880,20 +3880,15 @@ static tree > >  gimplify_parm_type (tree *tp, int *walk_subtrees, void *data) > >  { > >    tree t = *tp; > > - > >    *walk_subtrees = 0; > >    if (TYPE_P (t)) > >      { > > - if (POINTER_TYPE_P (t)) > > - *walk_subtrees = 1; > > - else if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t)) > > + if (TYPE_SIZE (t) && !TREE_CONSTANT (TYPE_SIZE (t)) > >   && !TYPE_SIZES_GIMPLIFIED (t)) > > - { > > - gimplify_type_sizes (t, (gimple_seq *) data); > > - *walk_subtrees = 1; > > - } > > - } > > + gimplify_type_sizes (t, (gimple_seq *) data); > >   > > > > + *walk_subtrees = 1; > > + } > >    return NULL; > >  } > >   > > > > diff --git a/gcc/testsuite/gcc.dg/pr107557-1.c b/gcc/testsuite/gcc.dg/pr107557-1.c > > new file mode 100644 > > index 00000000000..88c248b6564 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr107557-1.c > > @@ -0,0 +1,24 @@ > > +/* PR107557 > > + * { dg-do compile } > > + * { dg-options "-flto -fsanitize=undefined -fexceptions -Wno-incompatible-pointer-types" } > > + */ > > + > > + > > +int c[1][3*2]; > > +int f(int * const m, int (**v)[*m * 2]) > > +{ > > + return &(c[0][*m]) == &((*v)[0][*m]); > > +} > > +int test(int n, int (*(*fn)(void))[n]) > > +{ > > + return (*fn())[0]; > > +} > > +int main() > > +{ > > + int m = 3; > > + int (*d)[3*2] = c; > > + int (*fn[m])(void); > > + return f(&m, &d) + test(m, &fn); > > +} > > + > > + > > diff --git a/gcc/testsuite/gcc.dg/pr107557-2.c b/gcc/testsuite/gcc.dg/pr107557-2.c > > new file mode 100644 > > index 00000000000..2d26bb0b16a > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr107557-2.c > > @@ -0,0 +1,23 @@ > > +/* PR107557 > > + * { dg-do compile } > > + * { dg-options "-flto -fsanitize=undefined -fexceptions -Wno-incompatible-pointer-types" } > > + */ > > + > > + > > +int c[1][3*2]; > > +int f(int * const m, int (**(*v))[*m * 2]) > > +{ > > + return &(c[0][*m]) == &((*v)[0][*m]); /* { dg-warning "lacks a cast" } */ > > +} > > +int test(int n, int (*(*(*fn))(void))[n]) > > +{ > > + return (*(*fn)())[0]; > > +} > > +int main() > > +{ > > + int m = 3; > > + int (*d)[3*2] = c; > > + int (*fn[m])(void); > > + return f(&m, &d) + test(m, &fn); > > +} > > + > > diff --git a/gcc/testsuite/gcc.dg/pr108423-1.c b/gcc/testsuite/gcc.dg/pr108423-1.c > > new file mode 100644 > > index 00000000000..0c98d1d46b9 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr108423-1.c > > @@ -0,0 +1,16 @@ > > +/* PR108423 > > + * { dg-do compile } > > + * { dg-options "-O2 -Wno-int-conversion -Wno-incompatible-pointer-types" } > > + */ > > +int f (int n, int (**(*a)(void))[n]) > > +{ > > + return (*a())[0]; > > +} > > +int g () > > +{ > > + int m = 3; > > + int (*a[m])(void); > > + return f(m, &a); > > +} > > + > > + > > diff --git a/gcc/testsuite/gcc.dg/pr108423-2.c b/gcc/testsuite/gcc.dg/pr108423-2.c > > new file mode 100644 > > index 00000000000..006e45a9629 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr108423-2.c > > @@ -0,0 +1,16 @@ > > +/* PR108423 > > + * { dg-do compile } > > + * { dg-options "-O2" } > > + */ > > + > > +void f(int n, int (*a(void))[n]) > > +{ > > + (a())[0]; > > +} > > + > > +void g(void) > > +{ > > + int (*a(void))[1]; > > + f(1, a); > > +} > > + > > diff --git a/gcc/testsuite/gcc.dg/pr108423-3.c b/gcc/testsuite/gcc.dg/pr108423-3.c > > new file mode 100644 > > index 00000000000..c1987c42b40 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr108423-3.c > > @@ -0,0 +1,17 @@ > > +/* PR108423 > > + * { dg-do compile } > > + * { dg-options "-O2" } > > + */ > > + > > +void f(int n, int (*(*b)(void))[n]) > > +{ > > + sizeof (*(*b)()); > > +} > > + > > +int (*a(void))[1]; > > + > > +void g(void) > > +{ > > + f(1, &a); > > +} > > + > > diff --git a/gcc/testsuite/gcc.dg/pr108423-4.c b/gcc/testsuite/gcc.dg/pr108423-4.c > > new file mode 100644 > > index 00000000000..91336f3f283 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr108423-4.c > > @@ -0,0 +1,17 @@ > > +/* PR108423 > > + * { dg-do compile } > > + * { dg-options "-O2" } > > + */ > > + > > +void f(int n, int (*a(void))[n]) > > +{ > > + sizeof (*a()); > > +} > > + > > +int (*a(void))[1]; > > + > > +void g(void) > > +{ > > + f(1, a); > > +} > > + > > diff --git a/gcc/testsuite/gcc.dg/pr108423-5.c b/gcc/testsuite/gcc.dg/pr108423-5.c > > new file mode 100644 > > index 00000000000..7e4fffb2870 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr108423-5.c > > @@ -0,0 +1,17 @@ > > +/* PR108423 > > + * { dg-do compile } > > + * { dg-options "-O2" } > > + */ > > + > > +void f(int n, int (*(*a)(void))[n]) > > +{ > > + sizeof ((*a)()); > > +} > > + > > +int (*a(void))[1]; > > + > > +void g(void) > > +{ > > + f(1, a); > > +} > > + > > > > > > > -- Richard Biener SUSE Software Solutions Germany GmbH, Frankenstrasse 146, 90461 Nuernberg, Germany; GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman; HRB 36809 (AG Nuernberg) ---1609957120-1975505276-1676989281=:27913--