brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 2a10392 Raw
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