Now that the analyzer is distinguishing between uninitialized uses that

definitely have a path leading to them, and possibly have a path leading
to them; reflect that distinction in the warning text emitted.

llvm-svn: 129126
This commit is contained in:
Chandler Carruth 2011-04-08 06:33:38 +00:00
parent 33984c6973
commit 278f89732f
5 changed files with 24 additions and 23 deletions

View File

@ -874,7 +874,8 @@ def warn_field_is_uninit : Warning<"field is uninitialized when used here">,
def warn_uninit_self_reference_in_init : Warning<
"variable %0 is uninitialized when used within its own initialization">,
InGroup<Uninitialized>;
def warn_uninit_var : Warning<"variable %0 is possibly uninitialized when used here">,
def warn_uninit_var : Warning<
"variable %0 is uninitialized when used here">,
InGroup<Uninitialized>, DefaultIgnore;
def warn_maybe_uninit_var :
Warning<"variable %0 is possibly uninitialized when used here">,
@ -882,7 +883,7 @@ def warn_maybe_uninit_var :
def note_uninit_var_def : Note<
"variable %0 is declared here">;
def warn_uninit_var_captured_by_block : Warning<
"variable %0 is possibly uninitialized when captured by block">,
"variable %0 is uninitialized when captured by block">,
InGroup<Uninitialized>, DefaultIgnore;
def warn_maybe_uninit_var_captured_by_block : Warning<
"variable %0 is possibly uninitialized when captured by block">,

View File

@ -7,10 +7,10 @@ __m128 _mm_loadu_ps(const float *p);
void test1(float *input) {
__m128 x, y, z, w, X; // expected-note {{variable 'x' is declared here}} expected-note {{variable 'y' is declared here}} expected-note {{variable 'w' is declared here}} expected-note {{variable 'z' is declared here}}
x = _mm_xor_ps(x,x); // expected-warning {{variable 'x' is possibly uninitialized when used here}}
y = _mm_xor_ps(y,y); // expected-warning {{variable 'y' is possibly uninitialized when used here}}
z = _mm_xor_ps(z,z); // expected-warning {{variable 'z' is possibly uninitialized when used here}}
w = _mm_xor_ps(w,w); // expected-warning {{variable 'w' is possibly uninitialized when used here}}
x = _mm_xor_ps(x,x); // expected-warning {{variable 'x' is uninitialized when used here}}
y = _mm_xor_ps(y,y); // expected-warning {{variable 'y' is uninitialized when used here}}
z = _mm_xor_ps(z,z); // expected-warning {{variable 'z' is uninitialized when used here}}
w = _mm_xor_ps(w,w); // expected-warning {{variable 'w' is uninitialized when used here}}
X = _mm_loadu_ps(&input[0]);
X = _mm_xor_ps(X,X); // no-warning
}

View File

@ -2,7 +2,7 @@
int test1() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
int test2() {
@ -18,19 +18,19 @@ int test3() {
int test4() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
++x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
++x; // expected-warning{{variable 'x' is uninitialized when used here}}
return x;
}
int test5() {
int x, y; // expected-note{{variable 'y' is declared here}} expected-note{{add initialization to silence this warning}}
x = y; // expected-warning{{variable 'y' is possibly uninitialized when used here}}
x = y; // expected-warning{{variable 'y' is uninitialized when used here}}
return x;
}
int test6() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
x += 2; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
x += 2; // expected-warning{{variable 'x' is uninitialized when used here}}
return x;
}
@ -94,7 +94,7 @@ void test14() {
int test15() {
int x = x; // no-warning: signals intended lack of initialization. \
// expected-note{{variable 'x' is declared here}}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
// Don't warn in the following example; shows dataflow confluence.
@ -109,7 +109,7 @@ void test17() {
// Don't warn multiple times about the same uninitialized variable
// along the same path.
int *x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
*x = 1; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
*x = 1; // expected-warning{{variable 'x' is uninitialized when used here}}
*x = 1; // no-warning
}
@ -174,13 +174,13 @@ int test24(int flag) {
float test25() {
float x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
typedef int MyInt;
MyInt test26() {
MyInt x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
// Test handling of sizeof().
@ -191,12 +191,12 @@ int test27() {
int test28() {
int len; // expected-note{{variable 'len' is declared here}} expected-note{{add initialization to silence this warning}}
return sizeof(int[len]); // expected-warning{{variable 'len' is possibly uninitialized when used here}}
return sizeof(int[len]); // expected-warning{{variable 'len' is uninitialized when used here}}
}
void test29() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
(void) ^{ (void) x; }; // expected-warning{{variable 'x' is possibly uninitialized when captured by block}}
(void) ^{ (void) x; }; // expected-warning{{variable 'x' is uninitialized when captured by block}}
}
void test30() {
@ -222,7 +222,7 @@ void test_33() {
int test_34() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization to silence this warning}}
(void) x;
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
// Test that this case doesn't crash.
@ -264,14 +264,14 @@ int test38(int r, int x, int y)
int test39(int x) {
int y; // expected-note {{variable 'y' is declared here}} expected-note{{add initialization to silence this warning}}
int z = x + y; // expected-warning {{variable 'y' is possibly uninitialized when used here}}
int z = x + y; // expected-warning {{variable 'y' is uninitialized when used here}}
return z;
}
int test40(int x) {
int y; // expected-note {{variable 'y' is declared here}} expected-note{{add initialization to silence this warning}}
return x ? 1 : y; // expected-warning {{variable 'y' is possibly uninitialized when used here}}
return x ? 1 : y; // expected-warning {{variable 'y' is uninitialized when used here}}
}
int test41(int x) {
@ -311,7 +311,7 @@ int test45(int j) {
void test46()
{
int i; // expected-note {{variable 'i' is declared here}} expected-note{{add initialization to silence this warning}}
int j = i ? : 1; // expected-warning {{variable 'i' is possibly uninitialized when used here}}
int j = i ? : 1; // expected-warning {{variable 'i' is uninitialized when used here}}
}
void *test47(int *i)

View File

@ -38,7 +38,7 @@ unsigned test3_c() {
if (flag && (x = test3_aux()) == 0) {
x = 1;
}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
enum test4_A {
@ -46,7 +46,7 @@ enum test4_A {
};
test4_A test4() {
test4_A a; // expected-note{{variable 'a' is declared here}}
return a; // expected-warning{{variable 'a' is possibly uninitialized when used here}}
return a; // expected-warning{{variable 'a' is uninitialized when used here}}
}
// This test previously crashed Sema.

View File

@ -4,7 +4,7 @@
// Test just to ensure the analysis is working.
int test1() {
int x; // expected-note{{variable 'x' is declared here}} expected-note{{add initialization}}
return x; // expected-warning{{variable 'x' is possibly uninitialized when used here}}
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}
// Test ObjC fast enumeration.