| // RUN: %clang_cc1 -std=c11 -fsyntax-only -fdefer-ts -verify %s |
| // RUN: %clang_cc1 -std=c23 -fsyntax-only -fdefer-ts -verify %s |
| |
| #define defer _Defer |
| |
| int g(void); |
| int h(int x); |
| |
| void f1(void) { |
| defer 1; // expected-warning {{expression result unused}} |
| defer 1 + 1; // expected-warning {{expression result unused}} |
| defer "a"; // expected-warning {{expression result unused}} |
| defer "a" "b" "c"; // expected-warning {{expression result unused}} |
| defer defer 1; // expected-warning {{expression result unused}} |
| defer defer defer defer 1; // expected-warning {{expression result unused}} |
| defer (int) 4; // expected-warning {{expression result unused}} |
| defer g(); |
| |
| defer {} |
| defer { defer {} } |
| defer { defer {} defer {} } |
| |
| defer if (g()) g(); |
| defer while (g()) g(); |
| defer for (int i = 0; i < 10; i++) h(i); |
| defer switch (g()) { case 1: g(); } |
| |
| defer; // expected-warning {{defer statement has empty body}} expected-note {{put the semicolon on a separate line}} |
| defer |
| ; |
| |
| defer a: g(); // expected-error {{substatement of defer must not be a label}} |
| defer b: {} // expected-error {{substatement of defer must not be a label}} |
| defer { c: g(); } |
| |
| if (g()) defer g(); |
| while (g()) defer g(); |
| defer ({}); |
| ({ defer g(); }); |
| |
| defer int x; // expected-error {{expected expression}} |
| defer void q() {} // expected-error {{expected expression}} |
| } |
| |
| void f2(void) { |
| [[some, attributes]] defer g(); // expected-warning 2 {{unknown attribute}} |
| __attribute__((some_attribute)) defer g(); // expected-warning {{unknown attribute}} |
| [[some, attributes]] defer { g(); } // expected-warning 2 {{unknown attribute}} |
| __attribute__((some_attribute)) defer { g(); } // expected-warning {{unknown attribute}} |
| } |
| |
| void f3(void) { |
| _Defer 1; // expected-warning {{expression result unused}} |
| _Defer {} |
| _Defer _Defer {} |
| _Defer { defer {} _Defer {} } |
| _Defer if (g()) g(); |
| } |