| // RUN: %clang_cc1 -fblocks -fsyntax-only -Wunused-but-set-variable -verify %s |
| |
| struct S { |
| int i; |
| }; |
| |
| int f0(void) { |
| int y; // expected-warning{{variable 'y' set but not used}} |
| y = 0; |
| |
| int z __attribute__((unused)); |
| z = 0; |
| |
| struct S s; // expected-warning{{variable 's' set but not used}} |
| struct S t; |
| s = t; |
| |
| // Don't warn for an extern variable. |
| extern int w; |
| w = 0; |
| |
| // Following gcc, this should not warn. |
| int a; |
| w = (a = 0); |
| |
| int j = 0; // expected-warning{{variable 'j' set but not used}} |
| for (int i = 0; i < 1000; i++) |
| j += 1; |
| |
| // Following gcc, warn for a volatile variable. |
| volatile int b; // expected-warning{{variable 'b' set but not used}} |
| b = 0; |
| |
| // volatile variable k is used, no warning. |
| volatile int k = 0; |
| for (int i = 0; i < 1000; i++) |
| k += 1; |
| |
| // typedef of volatile type, no warning. |
| typedef volatile int volint; |
| volint l = 0; |
| l += 1; |
| |
| int x; |
| x = 0; |
| return x; |
| } |
| |
| void f1(void) { |
| (void)^() { |
| int y; // expected-warning{{variable 'y' set but not used}} |
| y = 0; |
| |
| int x; |
| x = 0; |
| return x; |
| }; |
| } |
| |
| void f2 (void) { |
| // Don't warn, even if it's only used in a non-ODR context. |
| int x; |
| x = 0; |
| (void) sizeof(x); |
| } |
| |
| void for_cleanup(int *x) { |
| *x = 0; |
| } |
| |
| void f3(void) { |
| // Don't warn if the __cleanup__ attribute is used. |
| __attribute__((__cleanup__(for_cleanup))) int x; |
| x = 5; |
| } |
| |
| void f4(void) { |
| int x1 = 0; // expected-warning{{variable 'x1' set but not used}} |
| x1++; |
| int x2 = 0; // expected-warning{{variable 'x2' set but not used}} |
| x2--; |
| int x3 = 0; // expected-warning{{variable 'x3' set but not used}} |
| ++x3; |
| int x4 = 0; // expected-warning{{variable 'x4' set but not used}} |
| --x4; |
| |
| static int counter = 0; // expected-warning{{variable 'counter' set but not used}} |
| counter += 1; |
| |
| volatile int v1 = 0; |
| ++v1; |
| typedef volatile int volint; |
| volint v2 = 0; |
| v2++; |
| } |