aboutsummaryrefslogtreecommitdiff
path: root/clang/test/Sema/warn-unused-but-set-variables.c
blob: a390944815a9a3c29927526daa61fe053e273948 (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
// 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++;
}