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 B80F6385B527 for ; Wed, 4 Oct 2023 08:30:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B80F6385B527 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=1696408203; 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=fupGAJ9M80g24fuRqMIjQGvQy4tV3VHrXRoWdZQqieo=; b=K2FW2k78ut97WTKp6/rB20yixyxFKasHnW3n+ajr4OU9XQ93I3eY6wDQrF7D2U0TQ4nl+f fwGTCcnH/lfrCZ3Y/JVZRK9gt72Gc2wfxgvuWMd6KutO8QBk53t+p1SL8wNKs8/QqhM/yt GaXS4LGdHxTXt/r0olheMBUxmzWhc8I= Received: from mail-lj1-f199.google.com (mail-lj1-f199.google.com [209.85.208.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-610-8U0mPKIxP-Kb5n4ld4hAnQ-1; Wed, 04 Oct 2023 04:29:57 -0400 X-MC-Unique: 8U0mPKIxP-Kb5n4ld4hAnQ-1 Received: by mail-lj1-f199.google.com with SMTP id 38308e7fff4ca-2b710c5677eso16561101fa.0 for ; Wed, 04 Oct 2023 01:29:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696408196; x=1697012996; h=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=fupGAJ9M80g24fuRqMIjQGvQy4tV3VHrXRoWdZQqieo=; b=Yi0HMx5Jj2tKlkEAKkH8eYZe0eePSw5xxyJBzSRelIPpHmkZ9xqzwTyxBopjTbopmO 14dHwLMIsVwd2SKIPD/fdbvilEIyUBmawN9ajB2xtlZ5Aei3E6qX0j3GMiO3VuoT1TUd utWXC1eJmZvCCW7vjzcS2Ixg5b+Y5B9eb6lw8KLb02tuLC90pfb4t2NIZ32XYQFrarie o89YpSvwH8tQNLLsaTbSUhUVmK2jlCFiDFYxBdkoU2RQ9ZHUkYDhJ3bwxblk8rl10xKR C+dv7Glh5gHVuFr+adE8CBLQsckfxpVfE7hcaMav4Lqnzot0akCB8MYM2W5DVJkFFyeI 5iXA== X-Gm-Message-State: AOJu0YwHvgL702fYvmkCV00Edtr9n6WPInGsJ/kdwBtHfdRiB76pg50j qt7DyZwdTa3W0cgJGMHyIkWkVfeZBmeOG4W3u1mW8W0zmfbyg8hAdn/WglBZtS+6MOp3Vo0LaFG eiP/OOJ7vMuky485F0EmrIRcjEN/I0ZPhc6iB1kcnNg== X-Received: by 2002:a2e:740e:0:b0:2c1:8a24:7afb with SMTP id p14-20020a2e740e000000b002c18a247afbmr1471791ljc.7.1696408195775; Wed, 04 Oct 2023 01:29:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHubtfFQ3A6V6XbJDTVvgt2qO8UtqJqI+4Zbvu5M4MHFhUpeWsiZQECVASej7tQ1gEINr2T6Hq38RV7actyGa0= X-Received: by 2002:a2e:740e:0:b0:2c1:8a24:7afb with SMTP id p14-20020a2e740e000000b002c18a247afbmr1471776ljc.7.1696408195278; Wed, 04 Oct 2023 01:29:55 -0700 (PDT) MIME-Version: 1.0 References: <20230926143439.B589920431@pchp3.se.axis.com> <20231004031136.8B8BA2042A@pchp3.se.axis.com> In-Reply-To: <20231004031136.8B8BA2042A@pchp3.se.axis.com> From: Jonathan Wakely Date: Wed, 4 Oct 2023 09:29:43 +0100 Message-ID: Subject: Re: [PATCH 2/2] testsuite: Replace many dg-require-thread-fence with dg-require-atomic-exchange To: Hans-Peter Nilsson Cc: Christophe Lyon , gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,URIBL_BLACK autolearn=unavailable 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 Wed, 4 Oct 2023 at 04:11, Hans-Peter Nilsson wrote: > > > From: Christophe Lyon > > Date: Tue, 3 Oct 2023 15:20:39 +0200 > > > The patch passed almost all our CI configurations, except arm-eabi when > > testing with > > -mthumb/-march=armv6s-m/-mtune=cortex-m0/-mfloat-abi=soft/-mfpu=auto > > where is causes these failures: > > FAIL: 29_atomics/atomic_flag/clear/1.cc -std=gnu++17 (test for excess > > errors) > > UNRESOLVED: 29_atomics/atomic_flag/clear/1.cc -std=gnu++17 compilation > > failed to produce executable > > FAIL: 29_atomics/atomic_flag/cons/value_init.cc -std=gnu++20 (test for > > excess errors) > > UNRESOLVED: 29_atomics/atomic_flag/cons/value_init.cc -std=gnu++20 > > compilation failed to produce executable > > FAIL: 29_atomics/atomic_flag/cons/value_init.cc -std=gnu++26 (test for > > excess errors) > > UNRESOLVED: 29_atomics/atomic_flag/cons/value_init.cc -std=gnu++26 > > compilation failed to produce executable > > FAIL: 29_atomics/atomic_flag/test_and_set/explicit.cc -std=gnu++17 (test > > for excess errors) > > UNRESOLVED: 29_atomics/atomic_flag/test_and_set/explicit.cc -std=gnu++17 > > compilation failed to produce executable > > FAIL: 29_atomics/atomic_flag/test_and_set/implicit.cc -std=gnu++17 (test > > for excess errors) > > UNRESOLVED: 29_atomics/atomic_flag/test_and_set/implicit.cc -std=gnu++17 > > compilation failed to produce executable > > > > The linker error is: > > undefined reference to `__atomic_test_and_set' > > Here's 2/2, fixing those regressions by, after code > inspection, gating those test-case users of > dg-require-thread-fence that actually use not just > atomic-load/store functionality, but a form of > compare-exchange, including the test-and-set cases listed > above as testsuite regressions. That neatly includes the > regressions above. The new dg-require proc checks for __atomic_exchange, which is not the same as compare-exchange, and not the same as test-and-set on atomic_flag. Does it just happen to be true for arm that the presence of __atomic_exchange also implies the other atomic operations? The new proc also only tests it for int, which presumably means none of these tests rely on atomics for long long being present. Some of the tests use atomics on pointers, which should work for ILP32 targets if atomics work on int, but the new dg-require-atomic-exchange isn't sufficient to check that it will work for pointers on LP64 targets. Maybe it happens to work today for the targets where we have issues, but we seem to be assuming that there will be no LP64 targets where these atomics are absent for 64-bit pointers. Are there supported risc-v ISA subsets where that isn't true? And we're assuming that __atomic_exchange being present implies all other ops are present, which seems like a bad assumption to me. I would be more confident testing for __atomic_compare_exchange, because with a wait-free CAS you can implement any other atomic operation, but the same isn't true for __atomic_exchange. > > Again, other libstdc++ test-cases should likely also use > this gate, from what I see of "undefined references" in > libstdc++.log. > > Tested together with 1/2. > Ok to commit? > > (N.B. there was a stray suffix "non-atomic code" in the > subject of 1/2; that's just a typo which will not be > committed.) > > -- >8 -- > These tests actually use a form of atomic exchange, not just > atomic loading and storing. Some target have the latter, > but not the former, yielding linker errors for missing > library functions (and not supported by libatomic). > > This change is just for existing uses of > dg-require-thread-fence. It does not fix any other tests > that should also be gated on dg-require-atomic-exchange. > > * testsuite/29_atomics/atomic/compare_exchange_padding.cc, > testsuite/29_atomics/atomic_flag/clear/1.cc, > testsuite/29_atomics/atomic_flag/cons/value_init.cc, > testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc, > testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc, > testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc, > testsuite/29_atomics/atomic_ref/generic.cc, > testsuite/29_atomics/atomic_ref/integral.cc, > testsuite/29_atomics/atomic_ref/pointer.cc: Replace > dg-require-thread-fence with dg-require-atomic-exchange. > --- > .../testsuite/29_atomics/atomic/compare_exchange_padding.cc | 2 +- > libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc | 2 +- > .../testsuite/29_atomics/atomic_flag/cons/value_init.cc | 2 +- > .../testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc | 2 +- > .../testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc | 2 +- > .../testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc | 2 +- > libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc | 2 +- > libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc | 2 +- > libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc | 2 +- > 9 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > index 01f7475631e6..14698bb82456 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic/compare_exchange_padding.cc > @@ -1,5 +1,5 @@ > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > // { dg-add-options libatomic } > > #include > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc > index 89ed381fe057..0d8a11899ef1 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc > @@ -1,5 +1,5 @@ > // { dg-do run { target c++11 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > > // Copyright (C) 2009-2023 Free Software Foundation, Inc. > // > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc > index f3f38b54dbcd..f95818532107 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/value_init.cc > @@ -16,7 +16,7 @@ > // . > > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > > #include > #include > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc > index 6f723eb5f4e7..65ccee32142d 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc > @@ -1,5 +1,5 @@ > // { dg-do run { target c++11 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > > // Copyright (C) 2008-2023 Free Software Foundation, Inc. > // > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc > index 6f723eb5f4e7..65ccee32142d 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc > @@ -1,5 +1,5 @@ > // { dg-do run { target c++11 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > > // Copyright (C) 2008-2023 Free Software Foundation, Inc. > // > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc > index 2a3d1d468c22..1573a11d07e8 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/compare_exchange_padding.cc > @@ -1,5 +1,5 @@ > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > // { dg-add-options libatomic } > > #include > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc > index f8751756d02c..1e0aef7ba5f6 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc > @@ -16,7 +16,7 @@ > // . > > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > // { dg-add-options libatomic } > > #include > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc > index eb22afca03a2..3d81f0886399 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc > @@ -16,7 +16,7 @@ > // . > > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > // { dg-add-options libatomic } > > #include > diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc > index 6fe00b557567..9c4afd61c365 100644 > --- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc > +++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc > @@ -16,7 +16,7 @@ > // . > > // { dg-do run { target c++20 } } > -// { dg-require-thread-fence "" } > +// { dg-require-atomic-exchange "" } > // { dg-add-options libatomic } > > #include > -- > 2.30.2 >