brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · eaedb53 Raw
80 lines · cpp
1// RUN: %clang_cc1 -fblocks -fsyntax-only -Wunused-but-set-variable -verify %s2 3struct S {4  int i;5};6 7struct __attribute__((warn_unused)) SWarnUnused {8  int j;9  void operator +=(int);10  void operator ++();11};12 13int f0() {14  int y; // expected-warning{{variable 'y' set but not used}}15  y = 0;16 17  int z __attribute__((unused));18  z = 0;19 20  // In C++, don't warn for structs. (following gcc's behavior)21  struct S s;22  struct S t;23  s = t;24 25  // Unless it's marked with the warn_unused attribute.26  struct SWarnUnused swu; // expected-warning{{variable 'swu' set but not used}}27  struct SWarnUnused swu2;28  swu = swu2;29 30  int x;31  x = 0;32  return x + 5;33}34 35void f1(void) {36  (void)^() {37    int y; // expected-warning{{variable 'y' set but not used}}38    y = 0;39 40    int x;41    x = 0;42    return x;43  };44}45 46void f2() {47  // Don't warn for either of these cases.48  constexpr int x = 2;49  const int y = 1;50  char a[x];51  char b[y];52}53 54void f3(int n) {55  // Don't warn for overloaded compound assignment operators.56  SWarnUnused swu;57  swu += n;58}59 60template<typename T> void f4(T n) {61  // Don't warn for (potentially) overloaded compound assignment operators in62  // template code.63  SWarnUnused swu;64  swu += n;65}66 67template <typename T> void f5() {68  // Don't warn for overloaded pre/post operators in template code.69  SWarnUnused swu;70  ++swu;71}72 73void f6() {74  if (int x = 123) {} // expected-warning{{variable 'x' set but not used}}75 76  while (int x = 123) {} // expected-warning{{variable 'x' set but not used}}77 78  for (; int x = 123;) {} // expected-warning{{variable 'x' set but not used}}79}80