12a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis// RUN: %clang_cc1 -fsyntax-only -Wunused-parameter -Wused-but-marked-unused -Wunused -verify %s
24726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
34726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenekvoid f1(void) {
44726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  int x, y, z;
54726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused(x)
64726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused(y, z)
74726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
82a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis  int w; // expected-warning {{unused}}
94726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused w // expected-warning{{missing '(' after '#pragma unused' - ignoring}}
104726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek}
114726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
124726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenekvoid f2(void) {
132a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis  int x, y; // expected-warning {{unused}} expected-warning {{unused}}
144726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused(x,) // expected-warning{{expected '#pragma unused' argument to be a variable name}}
154726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused() // expected-warning{{expected '#pragma unused' argument to be a variable name}}
164726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek}
174726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
184726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenekvoid f3(void) {
197a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenek  #pragma unused(x) // expected-warning{{undeclared variable 'x' used as an argument for '#pragma unused'}}
204726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek}
214726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
224726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenekvoid f4(void) {
232a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis  int w; // expected-warning {{unused}}
244726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  #pragma unused((w)) // expected-warning{{expected '#pragma unused' argument to be a variable name}}
254726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek}
264726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
274726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenekvoid f6(void) {
284726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  int z; // no-warning
294726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  {
304726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek    #pragma unused(z) // no-warning
314726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek  }
324726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek}
334726d03ab3abce41911c31d1354a18f1258cae4dTed Kremenek
347a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenekvoid f7() {
357a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenek  int y;
367a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenek  #pragma unused(undeclared, undefined, y) // expected-warning{{undeclared variable 'undeclared' used as an argument for '#pragma unused'}} expected-warning{{undeclared variable 'undefined' used as an argument for '#pragma unused'}}
377a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenek}
387a02a3733cdd2ca672902d869fda4ef2e3f05052Ted Kremenek
392127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlssonint f8(int x) { // expected-warning{{unused parameter 'x'}}
402127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  return 0;
412127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson}
422127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson
432127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlssonint f9(int x) {
442127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  return x;
452127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson}
462127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson
472127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlssonint f10(int x) {
482127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  #pragma unused(x)
492127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  return 0;
502127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson}
512127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson
522127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlssonint f11(int x) {
532127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  #pragma unused(x)
542127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  return x; // expected-warning{{'x' was marked unused but was used}}
552127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson}
562127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson
572127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlssonint f12(int x) {
582127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  int y = x;
592127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  #pragma unused(x) // expected-warning{{'x' was marked unused but was used}}
602127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson  return y;
612127eccbe15fd3b1b29aa53ccedd2e0f55ad27f9Anders Carlsson}
622a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis
632a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis// rdar://8793832
642a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidisstatic int glob_var = 0;
652a5c45b1ae4406459fbb39cb477951987c59cb0fArgyrios Kyrtzidis#pragma unused(glob_var)
66