aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/ext/vector39.C
blob: 140784dfa52c0d6a3c5649d8f87bddf794340e18 (plain)
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
// { dg-options "-flax-vector-conversions" }

typedef unsigned char v16qi __attribute__((vector_size(16)));
typedef unsigned int v4si __attribute__((vector_size(16)));

extern v4si normal_v4si;
extern const v4si const_v4si;
extern v4si *normal_v4si_ptr;
extern const v4si *const_v4si_ptr;
extern v4si &normal_v4si_ref;
extern const v4si &const_v4si_ref;

extern v16qi normal_v16qi;
extern const v16qi const_v16qi;
extern v16qi *normal_v16qi_ptr;
extern const v16qi *const_v16qi_ptr;
extern v16qi &normal_v16qi_ref;
extern const v16qi &const_v16qi_ref;

namespace nonconst_refs {
  v16qi &ref_normal_v4si = normal_v4si; // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_const_v4si = const_v4si; // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_normal_v4si_ptr = *normal_v4si_ptr; // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_const_v4si_ptr = *const_v4si_ptr; // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_normal_v4si_ref = normal_v4si_ref; // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_const_v4si_ref = const_v4si_ref; // { dg-error {cannot bind non-const lvalue} }

  v16qi &ref_normal_v16qi = normal_v16qi;
  v16qi &ref_const_v16qi = const_v16qi; // { dg-error {discards qualifiers} }
  v16qi &ref_normal_v16qi_ptr = *normal_v16qi_ptr;
  v16qi &ref_const_v16qi_ptr = *const_v16qi_ptr; // { dg-error {discards qualifiers} }
  v16qi &ref_normal_v16qi_ref = normal_v16qi_ref;
  v16qi &ref_const_v16qi_ref = const_v16qi_ref; // { dg-error {discards qualifiers} }
}

#if __cplusplus >= 201103L
namespace nonconst_rvalue_refs {
  v16qi &&ref_normal_v4si = normal_v4si;
  v16qi &&ref_const_v4si = const_v4si;
  v16qi &&ref_normal_v4si_ptr = *normal_v4si_ptr;
  v16qi &&ref_const_v4si_ptr = *const_v4si_ptr;
  v16qi &&ref_normal_v4si_ref = normal_v4si_ref;
  v16qi &&ref_const_v4si_ref = const_v4si_ref;

  v16qi &&ref_normal_v16qi = normal_v16qi; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  v16qi &&ref_const_v16qi = const_v16qi; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  v16qi &&ref_normal_v16qi_ptr = *normal_v16qi_ptr; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  v16qi &&ref_const_v16qi_ptr = *const_v16qi_ptr; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  v16qi &&ref_normal_v16qi_ref = normal_v16qi_ref; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  v16qi &&ref_const_v16qi_ref = const_v16qi_ref; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
}
#endif

namespace const_refs {
  const v16qi &ref_normal_v4si = normal_v4si;
  const v16qi &ref_const_v4si = const_v4si;
  const v16qi &ref_normal_v4si_ptr = *normal_v4si_ptr;
  const v16qi &ref_const_v4si_ptr = *const_v4si_ptr;
  const v16qi &ref_normal_v4si_ref = normal_v4si_ref;
  const v16qi &ref_const_v4si_ref = const_v4si_ref;

  const v16qi &ref_normal_v16qi = normal_v16qi;
  const v16qi &ref_const_v16qi = const_v16qi;
  const v16qi &ref_normal_v16qi_ptr = *normal_v16qi_ptr;
  const v16qi &ref_const_v16qi_ptr = *const_v16qi_ptr;
  const v16qi &ref_normal_v16qi_ref = normal_v16qi_ref;
  const v16qi &ref_const_v16qi_ref = const_v16qi_ref;
}

#if __cplusplus >= 201103L
namespace const_rvalue_refs {
  const v16qi &&ref_normal_v4si = normal_v4si;
  const v16qi &&ref_const_v4si = const_v4si;
  const v16qi &&ref_normal_v4si_ptr = *normal_v4si_ptr;
  const v16qi &&ref_const_v4si_ptr = *const_v4si_ptr;
  const v16qi &&ref_normal_v4si_ref = normal_v4si_ref;
  const v16qi &&ref_const_v4si_ref = const_v4si_ref;

  const v16qi &&ref_normal_v16qi = normal_v16qi; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  const v16qi &&ref_const_v16qi = const_v16qi; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  const v16qi &&ref_normal_v16qi_ptr = *normal_v16qi_ptr; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  const v16qi &&ref_const_v16qi_ptr = *const_v16qi_ptr; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  const v16qi &&ref_normal_v16qi_ref = normal_v16qi_ref; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
  const v16qi &&ref_const_v16qi_ref = const_v16qi_ref; // { dg-error {cannot bind rvalue reference} "" { target c++11 } }
}
#endif

namespace rvalue_reinterpret_refs {
  v16qi &ref_normal_v4si = reinterpret_cast<v16qi>(normal_v4si); // { dg-error {cannot bind non-const lvalue} }
  v16qi &ref_const_v4si = reinterpret_cast<v16qi>(const_v4si); // { dg-error {cannot bind non-const lvalue} }
}

namespace ref_reinterpret_refs {
  v16qi &ref_normal_v4si = reinterpret_cast<v16qi &>(normal_v4si);
  v16qi &ref_const_v4si = reinterpret_cast<v16qi &>(const_cast<v4si &>(const_v4si));
}