]> 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
a76422df 1// { dg-require-atomic-builtins "" }
8868286e 2// { dg-options "-std=gnu++11" }
520da0e4 3
f1717362 4// Copyright (C) 2012-2016 Free Software Foundation, Inc.
520da0e4 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{
520da0e4 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;
664ecbbe 36 ptrdiff_t __attribute__((unused)) dist(0);
520da0e4 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);
9cd65e05 45 VERIFY ( std::abs(dist) == 1 );
520da0e4 46
47 // operator--
48 void* vp4(a);
49 a--;
50 void* vp5(a);
51 dist = reinterpret_cast<char*>(vp4) - reinterpret_cast<char*>(vp5);
9cd65e05 52 VERIFY ( std::abs(dist) == 1 );
520da0e4 53
54 // operator+=
55 void* vp6(a);
56 a+=n;
57 void* vp7(a);
58 dist = reinterpret_cast<char*>(vp6) - reinterpret_cast<char*>(vp7);
9cd65e05 59 VERIFY ( std::abs(dist) == n );
520da0e4 60
61 // operator-=
62 void* vp8(a);
63 a-=n;
64 void* vp9(a);
65 dist = reinterpret_cast<char*>(vp8) - reinterpret_cast<char*>(vp9);
9cd65e05 66 VERIFY ( std::abs(dist) == n );
520da0e4 67
68 return 0;
69}