unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
blob 06292126887b46044554645fe941ee38a46b5a43 4209 bytes (raw)
name: gnu/packages/patches/c++-gsl-move-array-bounds-tests.patch 	 # note: path name is non-authoritative(*)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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);

debug log:

solving 0629212688 ...
found 0629212688 in https://git.savannah.gnu.org/cgit/guix.git

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

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).