]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/29_atomics/atomic/operators/pointer_partial_void.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 29_atomics / atomic / operators / pointer_partial_void.cc
CommitLineData
25999a11 1// { dg-do run { target { c++11_only || c++14_only } } }
684211e1 2// { dg-require-atomic-builtins "" }
40357398 3
83ffe9cd 4// Copyright (C) 2012-2023 Free Software Foundation, Inc.
40357398
BK
5//
6// This file is part of the GNU ISO C++ Library. This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 3, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING3. If not see
19// <http://www.gnu.org/licenses/>.
20
21#include <atomic>
22#include <cstdlib> //std::abs
23#include <testsuite_hooks.h>
24
25// pointer arithimetic vs. atomic<void*>.
26// atomic<void*> vs. explicitly specialized w/o operators, like atomic_bool?
27int main(void)
28{
40357398
BK
29 using namespace std;
30
31 typedef int value_type;
32 const size_t n = 2;
33 value_type value = 42;
34 value_type* p = &value;
35 void* vp = p;
d847ec80 36 ptrdiff_t __attribute__((unused)) dist(0);
40357398
BK
37
38 atomic<void*> a(vp);
39
40 // operator++
41 void* vp2(a);
42 a++;
43 void* vp3(a);
44 dist = reinterpret_cast<char*>(vp2) - reinterpret_cast<char*>(vp3);
2283f03a 45 VERIFY ( std::abs(dist) == 1 );
40357398
BK
46
47 // operator--
48 void* vp4(a);
49 a--;
50 void* vp5(a);
51 dist = reinterpret_cast<char*>(vp4) - reinterpret_cast<char*>(vp5);
2283f03a 52 VERIFY ( std::abs(dist) == 1 );
40357398
BK
53
54 // operator+=
55 void* vp6(a);
56 a+=n;
57 void* vp7(a);
58 dist = reinterpret_cast<char*>(vp6) - reinterpret_cast<char*>(vp7);
2283f03a 59 VERIFY ( std::abs(dist) == n );
40357398
BK
60
61 // operator-=
62 void* vp8(a);
63 a-=n;
64 void* vp9(a);
65 dist = reinterpret_cast<char*>(vp8) - reinterpret_cast<char*>(vp9);
2283f03a 66 VERIFY ( std::abs(dist) == n );
40357398
BK
67
68 return 0;
69}