From: Felix Gruber <felgru@posteo.net>
To: 50407@debbugs.gnu.org
Cc: Felix Gruber <felgru@posteo.net>
Subject: [bug#50407] [PATCH core-updates-frozen] gnu: c++-gsl: Fix build with GCC 10.
Date: Sun, 5 Sep 2021 17:09:28 +0000 [thread overview]
Message-ID: <20210905170928.13754-1-felgru@posteo.net> (raw)
* gnu/packages/cpp.scm (c++-gsl): [source]: Add a patch from Debian
to fix compilation of a test.
* gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
---
gnu/local.mk | 1 +
gnu/packages/cpp.scm | 4 +-
.../c++-gsl-move-array-bounds-tests.patch | 126 ++++++++++++++++++
3 files changed, 130 insertions(+), 1 deletion(-)
create mode 100644 gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
diff --git a/gnu/local.mk b/gnu/local.mk
index 23dcdccc6c..8c41b5b676 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -950,6 +950,7 @@ dist_patch_DATA = \
%D%/packages/patches/cyrus-sasl-ac-try-run-fix.patch \
%D%/packages/patches/cyrus-sasl-CVE-2019-19906.patch \
%D%/packages/patches/c++-gsl-find-system-gtest.patch \
+ %D%/packages/patches/c++-gsl-move-array-bounds-tests.patch \
%D%/packages/patches/date-output-pkg-config-files.patch \
%D%/packages/patches/datefudge-gettimeofday.patch \
%D%/packages/patches/dbacl-include-locale.h.patch \
diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
index 42e9d50687..af10d1186f 100644
--- a/gnu/packages/cpp.scm
+++ b/gnu/packages/cpp.scm
@@ -18,6 +18,7 @@
;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
;;; Copyright © 2020 Milkey Mouse <milkeymouse@meme.institute>
;;; Copyright © 2021 Raghav Gururajan <rg@raghavgururajan.name>
+;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
;;;
;;; This file is part of GNU Guix.
@@ -127,7 +128,8 @@ range-v3 ranges are an abstraction layer on top of iterators.")
(git-file-name name version))
(patches
(search-patches
- "c++-gsl-find-system-gtest.patch"))
+ "c++-gsl-find-system-gtest.patch"
+ "c++-gsl-move-array-bounds-tests.patch"))
(sha256
(base32 "0gbvr48f03830g3154bjhw92b8ggmg6wwh5xyb8nppk9v6w752l0"))))
(build-system cmake-build-system)
diff --git a/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
new file mode 100644
index 0000000000..0629212688
--- /dev/null
+++ b/gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch
@@ -0,0 +1,126 @@
+Description: Move tests that trigger -Warray-bounds to separate compilation unit
+ GCC 10 is now smart enough to detect violation of array boundaries that tests
+ are actually tested. Along with -Werror this led to tests failure, so I move
+ such tests to another compilation unit to have the warning deactivated for
+ only these tests.
+Bug-Debian: https://bugs.debian.org/966895
+Author: Nicholas Guriev <guriev-ns@ya.ru>
+Last-Modified: Wed, 19 Aug 2020 08:55:52 +0300
+
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -179,6 +179,7 @@ add_gsl_test(owner_tests)
+ add_gsl_test(byte_tests)
+ add_gsl_test(algorithm_tests)
+ add_gsl_test(strict_notnull_tests)
++add_gsl_test(array_bounds)
+
+
+ # No exception tests
+--- /dev/null
++++ b/tests/array_bounds.cpp
+@@ -0,0 +1,68 @@
++///////////////////////////////////////////////////////////////////////////////
++//
++// Copyright (c) 2015 Microsoft Corporation. All rights reserved.
++//
++// This code is licensed under the MIT License (MIT).
++//
++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
++// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
++// THE SOFTWARE.
++//
++///////////////////////////////////////////////////////////////////////////////
++
++#ifdef __GNUC__
++#pragma GCC diagnostic warning "-Warray-bounds"
++#endif // __GNUC__
++
++#include <gtest/gtest.h>
++
++#include <gsl/multi_span> // for gsl::multi_span
++
++namespace gsl
++{
++struct fail_fast;
++} // namespace gsl
++
++namespace
++{
++static constexpr char deathstring[] = "Expected Death";
++} // namespace
++
++TEST(array_bounds, subspan_from_multi_span_test)
++{
++ int arr[5] = {1, 2, 3, 4, 5};
++ gsl::multi_span<int> av = arr;
++
++ std::set_terminate([] {
++ std::cerr << "Expected Death. subspan";
++ std::abort();
++ });
++
++ EXPECT_DEATH(av.subspan(6).length(), deathstring);
++}
++
++TEST(array_bounds, strided_span_bounds_from_strided_span_tests)
++{
++ int arr[] = {0, 1, 2, 3};
++ gsl::multi_span<int> av(arr);
++
++ std::set_terminate([] {
++ std::cerr << "Expected Death. strided_span_bounds";
++ std::abort();
++ });
++
++ // incorrect sections
++ EXPECT_DEATH(av.section(0, 0)[0], deathstring);
++ EXPECT_DEATH(av.section(1, 0)[0], deathstring);
++ EXPECT_DEATH(av.section(1, 1)[1], deathstring);
++
++ EXPECT_DEATH(av.section(2, 5), deathstring);
++ EXPECT_DEATH(av.section(5, 2), deathstring);
++ EXPECT_DEATH(av.section(5, 0), deathstring);
++ EXPECT_DEATH(av.section(0, 5), deathstring);
++ EXPECT_DEATH(av.section(5, 5), deathstring);
++}
+--- a/tests/multi_span_tests.cpp
++++ b/tests/multi_span_tests.cpp
+@@ -1042,10 +1042,6 @@ TEST(multi_span_test, subspan)
+ EXPECT_TRUE(av.subspan(1).length() == 4);
+ EXPECT_TRUE(av.subspan(4).length() == 1);
+ EXPECT_TRUE(av.subspan(5).length() == 0);
+- // Disabled test instead of fixing since multi_span is deprecated. (PR#835)
+-#if !(defined(__GNUC__) && __GNUC__ == 8)
+- EXPECT_DEATH(av.subspan(6).length(), deathstring);
+-#endif
+ auto av2 = av.subspan(1);
+ for (int i = 0; i < 4; ++i) EXPECT_TRUE(av2[i] == i + 2);
+ }
+--- a/tests/strided_span_tests.cpp
++++ b/tests/strided_span_tests.cpp
+@@ -403,20 +403,6 @@ TEST(strided_span_tests, strided_span_bo
+ });
+
+ {
+- // incorrect sections
+-
+- EXPECT_DEATH(av.section(0, 0)[0], deathstring);
+- EXPECT_DEATH(av.section(1, 0)[0], deathstring);
+- EXPECT_DEATH(av.section(1, 1)[1], deathstring);
+-
+- EXPECT_DEATH(av.section(2, 5), deathstring);
+- EXPECT_DEATH(av.section(5, 2), deathstring);
+- EXPECT_DEATH(av.section(5, 0), deathstring);
+- EXPECT_DEATH(av.section(0, 5), deathstring);
+- EXPECT_DEATH(av.section(5, 5), deathstring);
+- }
+-
+- {
+ // zero stride
+ strided_span<int, 1> sav{av, {{4}, {}}};
+ EXPECT_TRUE(sav[0] == 0);
--
2.30.2
next reply other threads:[~2021-09-05 17:10 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-05 17:09 Felix Gruber [this message]
2021-09-06 8:20 ` bug#50407: [PATCH core-updates-frozen] gnu: c++-gsl: Fix build with GCC 10 Guillaume Le Vaillant
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210905170928.13754-1-felgru@posteo.net \
--to=felgru@posteo.net \
--cc=50407@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).