[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / SemaCXX / unused.cpp
blobabaf611b0df809a2d8f0b5bf5c3a4465dc11b07f
1 // RUN: %clang_cc1 -fsyntax-only -verify -Wunused %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 -Wunused %s
3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -Wunused %s
4 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 -Wunused %s
6 // PR4103 : Make sure we don't get a bogus unused expression warning
7 namespace PR4103 {
8 class APInt {
9 char foo; // expected-warning {{private field 'foo' is not used}}
11 class APSInt : public APInt {
12 char bar; // expected-warning {{private field 'bar' is not used}}
13 public:
14 APSInt &operator=(const APSInt &RHS);
17 APSInt& APSInt::operator=(const APSInt &RHS) {
18 APInt::operator=(RHS);
19 return *this;
22 template<typename T>
23 struct X {
24 X();
27 void test() {
28 X<int>();
32 namespace derefvolatile {
33 void f(volatile char* x) {
34 *x;
35 #if __cplusplus <= 199711L
36 // expected-warning@-2 {{expression result unused; assign into a variable to force a volatile load}}
37 #endif
38 (void)*x;
39 #if __cplusplus <= 199711L
40 // expected-warning@-2 {{expression result unused; assign into a variable to force a volatile load}}
41 #endif
42 volatile char y = 10;
43 (void)y; // don't warn here, because it's a common pattern.
47 // <rdar://problem/12359208>
48 namespace AnonObject {
49 struct Foo {
50 Foo(const char* const message);
51 ~Foo();
53 void f() {
54 Foo("Hello World!"); // don't warn
55 int(1); // expected-warning {{expression result unused}}
59 // Test that constructing an object (which may have side effects) with
60 // constructor arguments which are dependent doesn't produce an unused value
61 // warning.
62 namespace UnresolvedLookup {
63 struct Foo {
64 Foo(int i, int j);
66 template <typename T>
67 struct Bar {
68 void f(T t) {
69 Foo(t, 0); // no warning
74 #if __cplusplus >= 201703L
75 namespace PR33839 {
76 void a() {
77 struct X { int a, b; } x;
78 auto [a, b] = x; // expected-warning {{unused variable '[a, b]'}}
79 auto [c, d] = x;
80 (void)d;
83 template<typename T> void f() {
84 struct A { int n; } a[1];
85 for (auto [x] : a) {
86 (void)x;
88 auto [y] = a[0]; // expected-warning {{unused}}
90 template<bool b> void g() {
91 struct A { int n; } a[1];
92 for (auto [x] : a) {
93 if constexpr (b)
94 (void)x;
97 auto [y] = a[0];
98 if constexpr (b)
99 (void)y; // ok, even when b == false
101 template<typename T> void h() {
102 struct A { int n; } a[1];
103 for (auto [x] : a) { // expected-warning {{unused variable '[x]'}}
106 void use() {
107 f<int>(); // expected-note {{instantiation of}}
108 g<true>();
109 g<false>();
110 h<int>(); // expected-note {{instantiation of}}
113 #endif