97 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -Wextra-semi-stmt -verify %s2// RUN: cp %s %t3// RUN: %clang_cc1 -x c++ -Wextra-semi-stmt -fixit %t4// RUN: %clang_cc1 -x c++ -Wextra-semi-stmt -Werror %t5 6#define GOODMACRO(varname) int varname7#define BETTERMACRO(varname) GOODMACRO(varname);8#define NULLMACRO(varname)9 10enum MyEnum {11 E1,12 E213};14 15void test() {16 ; // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}17 ;18 19 // This removal of extra semi also consumes all the comments.20 // clang-format off21 ;;;22 // clang-format on23 24 // clang-format off25 ;NULLMACRO(ZZ);26 // clang-format on27 28 {}; // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}29 30 {31 ; // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}32 }33 34 if (true) {35 ; // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}36 }37 38 GOODMACRO(v0); // OK39 40 GOODMACRO(v1;) // OK41 42 BETTERMACRO(v2) // OK43 44 BETTERMACRO(v3;) // Extra ';', but within macro expansion, so ignored.45 46 BETTERMACRO(v4); // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}47 48 BETTERMACRO(v5;); // expected-warning {{empty expression statement has no effect; remove unnecessary ';' to silence this warning}}49 50 NULLMACRO(v6) // OK51 52 NULLMACRO(v7); // OK. This could be either GOODMACRO() or BETTERMACRO() situation, so we can't know we can drop it.53 54 if (true)55 ; // OK56 57 while (true)58 ; // OK59 60 do61 ; // OK62 while (true);63 64 for (;;) // OK65 ; // OK66 67 MyEnum my_enum;68 switch (my_enum) {69 case E1:70 // stuff71 break;72 case E2:; // OK73 }74 75 for (;;) {76 for (;;) {77 goto contin_outer;78 }79 contin_outer:; // OK80 }81}82 83;84 85namespace NS {};86 87void foo(int x) {88 switch (x) {89 case 0:90 [[fallthrough]];91 case 1:92 return;93 }94}95 96[[]];97