From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) by sourceware.org (Postfix) with ESMTPS id 44133385C6F2 for ; Fri, 1 Dec 2023 14:27:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 44133385C6F2 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 44133385C6F2 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::130 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701440839; cv=none; b=RAN4EfQFtqqoDt1vsBsqmPuf7M2a6BjSQKLFKZKC492+6I9+CEaEnkhsG8HJ7jNtfdUQjbbijQlaQ08bQD8XyeSMmToc9yEBDYljEXOWexs44vClXBtLav9rAVfTxIIq7nota34aLbEaazuxmT7iTBk3aTjDh/G+itDapelq/0Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701440839; c=relaxed/simple; bh=XfpQCPMDqf+WDYHKMekOMHewuPSS3xSqMQPwb2hT2gQ=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=p9f+osdV5bzxEFbs5/LIPgn1ZUr3bOkjeNs/9me6RKz+BrhnjdopkYkxVx7ijaCoFucKIGpEyzldA2f16kA9ZM/FSOUsAuRa2hKU4tBv3yxmll0kIbiFZ3qQU3Acfm+zmcKeU7+BOTTDYyDW7f7DO7nXivtzcTWwy6F5MrvaUiM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-50bba1dd05fso3063864e87.0 for ; Fri, 01 Dec 2023 06:27:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701440834; x=1702045634; darn=gcc.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=/zNj7mz9HSTSPdfbPjQN1eueHe+bvubKYEe+1EnvJeY=; b=SdqrbcHmHfYg9TKpSGsv6fmBCWZOiTrgiP1uifkTD4d+JqBFrW90MnUGQUP9uhtSwD W2o8dealOc0BuRwmaQdk8bwYOSeWhA1DbIbhrS+Qr5eef4t/bstWjl3HNaAnDXn0icRh AkkB3EIo1aN1k5CZyGMol23qauiwf8b1rybtVOecIWyFcYg8z41E2WsY0W/owcDPx8TX mofWiB7f2M/67dXaaig0oR0lfY+lKULza5XqHv18YV+7YTIIbMwWH4PENodCtmKGw1dg SjxjziurfQ7R5CW72e50ThGt3PbbR4QZ3i/z0I5Qi6xPUZ3wX/MbWw4haXXAiJFlKeBK C5ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701440834; x=1702045634; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/zNj7mz9HSTSPdfbPjQN1eueHe+bvubKYEe+1EnvJeY=; b=iPamfrSwjA83SfM/09289zifgkxBO8oWVDVYuFXIT4XY1uIerkFik2DbH4BjvyZAX7 d36v0hXJddjGpwN7pAmf7nkbtuvDmOPWVH9HDT4/dxd59KZh+2EVEtHiIFJ7yq3AxZmO kdnvR97dfVDtPBpLiNK8SBhO6BNaVSAzYGWjNO7xu53u3f5HDNGl4O48U8pZvqN4c+UR /YQgkXzPBNZAgZSVnKOLt2Cd5v74Cj1yIrSNjdRJS8wRIfyf/RyIanlyvcp2lwPavA6B T/NSNAdkuLcO2tCVmSAJr4uD7UUXyEGwQFDNs1sy2Z2J+QukESpVYZPYhAZBUggWaZDd ryyw== X-Gm-Message-State: AOJu0Yz4VAWSglXHDoDvNF8nTBAIXjTxdlWaLHf3vDb90iQKNXi+L3JC OGXMVrqD1A1uDJdkje6SZZ7KU8n3gcyNRRqxPQ15tV0k X-Google-Smtp-Source: AGHT+IGQkaezLnzBeE8px1oirAjwZdo2rVC01kj2fgvJ7FaggLVfCqZ8IP3rJSeqaMlZkix/IP9fnjW3nGBs4niBdvk= X-Received: by 2002:a05:6512:1101:b0:50b:d764:8804 with SMTP id l1-20020a056512110100b0050bd7648804mr917321lfg.80.1701440833851; Fri, 01 Dec 2023 06:27:13 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Richard Biener Date: Fri, 1 Dec 2023 15:27:01 +0100 Message-ID: Subject: Re: [PATCH] hardcfr: make builtin_return tests more portable [PR112334] To: Alexandre Oliva Cc: gcc-patches@gcc.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,WEIRD_QUOTING 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: On Fri, Dec 1, 2023 at 1:58=E2=80=AFPM Alexandre Oliva = wrote: > > > Rework __builtin_return tests to explicitly call __builtin_apply and > use its return value rather than anything else. Also require > untyped_assembly. Avoid the noise out of exceptions escaping the > builtin-applied function, but add a test to cover their effects as > well. > > Regstrapped on x86_64-linux-gnu. Also tested on arm-eabi, but it's > *not* enough (or needed) to fix the PR, there's another bug lurking > there, with a separate patch coming up. Regardless, is this ok to > install? OK. > > for gcc/testsuite/ChangeLog > > PR target/112334 > * c-c++-common/torture/harden-cfr-bret.c: Rework for stricter > untyped_return requirements. Require untyped_assembly. > * c-c++-common/torture/harden-cfr-bret-except.c: New. > * c-c++-common/torture/harden-cfr-bret-always.c: Require > untyped_assembly. > * c-c++-common/torture/harden-cfr-bret-never.c: Likewise. > * c-c++-common/torture/harden-cfr-bret-noopt.c: Likewise. > * c-c++-common/torture/harden-cfr-bret-noret.c: Likewise. > * c-c++-common/torture/harden-cfr-bret-no-xthrow.c: Likewise. > * c-c++-common/torture/harden-cfr-bret-nothrow.c: Likewise. > * c-c++-common/torture/harden-cfr-bret-retcl.c: Likewise. > --- > .../c-c++-common/torture/harden-cfr-bret-always.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret-except.c | 17 ++++++++++++++= + > .../c-c++-common/torture/harden-cfr-bret-never.c | 3 ++- > .../torture/harden-cfr-bret-no-xthrow.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret-noopt.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret-noret.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret-nothrow.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret-retcl.c | 3 ++- > .../c-c++-common/torture/harden-cfr-bret.c | 23 ++++++++++++++= ++---- > .../c-c++-common/torture/harden-cfr-noret.c | 2 +- > 10 files changed, 50 insertions(+), 13 deletions(-) > create mode 100644 gcc/testsuite/c-c++-common/torture/harden-cfr-bret-ex= cept.c > > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-always.c = b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-always.c > index 779896c60e846..3406c4e6ef9dc 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-always.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-always.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dalways -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dalways -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" } = */ > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even enabling all checks before noreturn calls (leaving > returning calls enabled), we get checks before __builtin_return witho= ut > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-except.c = b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-except.c > new file mode 100644 > index 0000000000000..3acb61cb75a77 > --- /dev/null > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-except.c > @@ -0,0 +1,17 @@ > +/* { dg-do compile } */ > +/* { dg-options "-fharden-control-flow-redundancy -fexceptions -fdump-tr= ee-hardcfr -ffat-lto-objects" } */ > +/* { dg-require-effective-target untyped_assembly } */ > + > +/* Check that, with exceptions enabled, even in C, the calls initiated b= y > + builtin_apply are enclosed in cleanup handlers that add extra checks. > + Unfortunately, declaring foobar as nothrow is not enough to avoid the > + handler around the builtin_apply call, so the other bret tests all us= e > + -fno-exceptions. */ > + > +#include "harden-cfr-bret.c" > + > +/* With exceptions, we get an extra check per function, to check before > + propagating exceptions, so it's 3 in f and 2 in g. */ > +/* { dg-final { scan-tree-dump-times "__hardcfr_check" 5 "hardcfr" } } *= / > +/* The extra check in g also removes the possibility of inlining the che= ck. */ > +/* { dg-final { scan-tree-dump-times "__builtin_trap" 0 "hardcfr" } } */ > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-never.c b= /gcc/testsuite/c-c++-common/torture/harden-cfr-bret-never.c > index 49ce17f5b937c..7f8fb64138df1 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-never.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-never.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" } *= / > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even enabling checks before never noreturn calls (leaving > returning calls enabled), we get checks before __builtin_return witho= ut > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-no-xthrow= .c b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-no-xthrow.c > index 78e5bf4143927..07588e8d3c341 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-no-xthrow.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-no-xthrow.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dno-xthrow -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dno-xthrow -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects"= } */ > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even enabling checks before no-xthrow-throwing noreturn c= alls > (leaving returning calls enabled), we get checks before __builtin_ret= urn > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noopt.c b= /gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noopt.c > index 1512614791ff2..716d9297c8d94 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noopt.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noopt.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fno-hardcfr-check-returning-calls -fdump-tree-hardcfr -ff= at-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fno-hardcfr-check-returning-calls -fno-exceptions -fdump-= tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even disabling checks before both noreturn and returning > calls, we still get checks before __builtin_return. */ > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noret.c b= /gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noret.c > index fd95bb7e3e334..c6d2baa312031 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noret.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-noret.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fno-hardcfr-check-ret= urning-calls -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fno-hardcfr-check-ret= urning-calls -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even disabling checks before returning calls (leaving nor= eturn > calls enabled), we still get checks before __builtin_return. */ > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-nothrow.c= b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-nothrow.c > index c5c361234c499..2fd0d82c7ea3e 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-nothrow.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-nothrow.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnothrow -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnothrow -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" }= */ > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even enabling checks before nothrow noreturn calls (leavi= ng > returning calls enabled), we get checks before __builtin_return witho= ut > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-retcl.c b= /gcc/testsuite/c-c++-common/torture/harden-cfr-bret-retcl.c > index 137dfbb95d6bb..b070294fde8ad 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-retcl.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret-retcl.c > @@ -1,5 +1,6 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dnever -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" } *= / > +/* { dg-require-effective-target untyped_assembly } */ > > /* Check that, even disabling checks before noreturn calls (leaving retu= rning > calls enabled), we still get checks before __builtin_return. */ > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret.c b/gcc/t= estsuite/c-c++-common/torture/harden-cfr-bret.c > index b459ff6b86491..b6630a6c86695 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-bret.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-bret.c > @@ -1,14 +1,27 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fdump-tree-hardcfr -f= fat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fno-exceptions -fdump= -tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-require-effective-target untyped_assembly } */ > > -int f(int i) { > +extern int foobar (void); > + > +#if __cplusplus > +typedef void (*fnt)(...); > +#else > +typedef void (*fnt)(); > +#endif > + > +int i; > + > +int f(void) { > if (i) > - __builtin_return (&i); > + __builtin_return (__builtin_apply ((fnt)foobar, > + __builtin_apply_args (), 0)); > return i; > } > > -int g(int i) { > - __builtin_return (&i); > +int g(void) { > + __builtin_return (__builtin_apply ((fnt)foobar, > + __builtin_apply_args (), 0)); > } > > /* Out-of-line checking, before both builtin_return and return in f. */ > diff --git a/gcc/testsuite/c-c++-common/torture/harden-cfr-noret.c b/gcc/= testsuite/c-c++-common/torture/harden-cfr-noret.c > index fdd803109a4ae..8c7cc01c0ce68 100644 > --- a/gcc/testsuite/c-c++-common/torture/harden-cfr-noret.c > +++ b/gcc/testsuite/c-c++-common/torture/harden-cfr-noret.c > @@ -1,5 +1,5 @@ > /* { dg-do compile } */ > -/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dalways -fdump-tree-hardcfr -ffat-lto-objects" } */ > +/* { dg-options "-fharden-control-flow-redundancy -fhardcfr-check-noretu= rn-calls=3Dalways -fno-exceptions -fdump-tree-hardcfr -ffat-lto-objects" } = */ > > /* Check that we insert checking before all noreturn calls. */ > > > -- > Alexandre Oliva, happy hacker https://FSFLA.org/blogs/lxo/ > Free Software Activist GNU Toolchain Engineer > More tolerance and less prejudice are key for inclusion and diversity > Excluding neuro-others for not behaving ""normal"" is *not* inclusive