aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/g++.dg/warn/Wuseless-cast.C
blob: 6f0e2cfb0b2e6002e449b0e9767797b787a2c1c6 (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
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
127
128
129
// { dg-options "-Wuseless-cast" }

template<typename T>
  void tmpl_f1(T& t)
  {
    (int)(t);
    static_cast<int>(t);
    reinterpret_cast<int>(t);

    (int*)(&t);
    const_cast<int*>(&t);
    static_cast<int*>(&t);
    reinterpret_cast<int*>(&t);

    (int&)(t);
    const_cast<int&>(t);
    static_cast<int&>(t);
    reinterpret_cast<int&>(t);
  }

template<typename T>
  void tmpl_f2(T t)
  {
    (int&)(t);
    const_cast<int&>(t);
    static_cast<int&>(t);
    reinterpret_cast<int&>(t);
  }

struct A { };

template<typename T>
  void tmpl_f3(T& t)
  {
    (A)(t);
    static_cast<A>(t);

    (A*)(&t);
    const_cast<A*>(&t);
    static_cast<A*>(&t);
    reinterpret_cast<A*>(&t);
    dynamic_cast<A*>(&t);

    (A&)(t);
    const_cast<A&>(t);
    static_cast<A&>(t);
    reinterpret_cast<A&>(t);
    dynamic_cast<A&>(t);
  }

template<typename T>
  void tmpl_f4(T t)
  {
    (A&)(t);
    const_cast<A&>(t);
    static_cast<A&>(t);
    reinterpret_cast<A&>(t);
    dynamic_cast<A&>(t);
  }

A prvalue();

void f()
{
  int n; 

  (int)(n);                    // { dg-warning "useless cast" }
  static_cast<int>(n);         // { dg-warning "useless cast" }
  reinterpret_cast<int>(n);    // { dg-warning "useless cast" }

  (int*)(&n);                  // { dg-warning "useless cast" }
  const_cast<int*>(&n);        // { dg-warning "useless cast" }
  static_cast<int*>(&n);       // { dg-warning "useless cast" }
  reinterpret_cast<int*>(&n);  // { dg-warning "useless cast" }

  int& m = n;

  (int&)(m);                   // { dg-warning "useless cast" }
  const_cast<int&>(m);         // { dg-warning "useless cast" }
  static_cast<int&>(m);        // { dg-warning "useless cast" }
  reinterpret_cast<int&>(m);   // { dg-warning "useless cast" }

  tmpl_f1(m);

  (int&)(n);                   // { dg-warning "useless cast" }
  const_cast<int&>(n);         // { dg-warning "useless cast" }
  static_cast<int&>(n);        // { dg-warning "useless cast" }
  reinterpret_cast<int&>(n);   // { dg-warning "useless cast" }

  tmpl_f2(n);

#ifdef __GXX_EXPERIMENTAL_CXX0X__
  (int&&)(42);
  static_cast<int&&>(42);

  (A&&)(prvalue());
  const_cast<A&&>(prvalue());
  static_cast<A&&>(prvalue());
#endif

  A a;

  (A)(a);                     // { dg-warning "useless cast" }
  static_cast<A>(a);          // { dg-warning "useless cast" }

  (A*)(&a);                   // { dg-warning "useless cast" }
  const_cast<A*>(&a);         // { dg-warning "useless cast" }
  static_cast<A*>(&a);        // { dg-warning "useless cast" }
  reinterpret_cast<A*>(&a);   // { dg-warning "useless cast" }
  dynamic_cast<A*>(&a);       // { dg-warning "useless cast" }

  A& b = a;

  (A&)(b);                    // { dg-warning "useless cast" }
  const_cast<A&>(b);          // { dg-warning "useless cast" }
  static_cast<A&>(b);         // { dg-warning "useless cast" }     
  static_cast<A&>(b);         // { dg-warning "useless cast" }
  dynamic_cast<A&>(b);        // { dg-warning "useless cast" }

  tmpl_f3(b);

  (A&)(a);                    // { dg-warning "useless cast" } 
  const_cast<A&>(a);          // { dg-warning "useless cast" }
  static_cast<A&>(a);         // { dg-warning "useless cast" }
  reinterpret_cast<A&>(a);    // { dg-warning "useless cast" }
  dynamic_cast<A&>(a);        // { dg-warning "useless cast" }

  tmpl_f4(a);
}