blob: 292793ba483a69bb5206327e9f0f746b2ffb938c [file] [log] [blame]
// RUN: %clang_cc1 -fsyntax-only -Wuninitialized-const-reference -verify %s
class A {
public:
int i;
A(){};
A(const A &a){};
A(int i) {}
bool operator!=(const A &);
};
A const_ref_use_A(const A &a);
int const_ref_use(const int &i);
A const_use_A(const A a);
int const_use(const int i);
void f(int a) {
int i;
const_ref_use(i); // expected-warning {{variable 'i' is uninitialized when passed as a const reference argument here}}
int j = j + const_ref_use(j); // expected-warning {{variable 'j' is uninitialized when used within its own initialization}} expected-warning {{variable 'j' is uninitialized when passed as a const reference argument here}}
A a1 = const_ref_use_A(a1); // expected-warning {{variable 'a1' is uninitialized when passed as a const reference argument here}}
int k = const_use(k); // expected-warning {{variable 'k' is uninitialized when used within its own initialization}}
A a2 = const_use_A(a2); // expected-warning {{variable 'a2' is uninitialized when used within its own initialization}}
A a3(const_ref_use_A(a3)); // expected-warning {{variable 'a3' is uninitialized when passed as a const reference argument here}}
A a4 = a3 != a4; // expected-warning {{variable 'a4' is uninitialized when used within its own initialization}} expected-warning {{variable 'a4' is uninitialized when passed as a const reference argument here}}
int n = n; // expected-warning {{variable 'n' is uninitialized when used within its own initialization}}
const_ref_use(n);
A a5;
const_ref_use_A(a5);
int m;
if (a < 42)
m = 1;
const_ref_use(m);
}