315 lines · cpp
1// RUN: %clang_cc1 -x c -fsyntax-only -verify %s2// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -Wno-misleading-indentation -DCXX17 %s3// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wmisleading-indentation -DWITH_WARN -ftabstop 8 -DTAB_SIZE=8 %s4// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -DWITH_WARN -ftabstop 4 -DTAB_SIZE=4 -DCXX17 %s5// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wall -Wno-unused -DWITH_WARN -ftabstop 1 -DTAB_SIZE=1 %s6// RUN: %clang_cc1 -std=c++17 -fsyntax-only -verify -Wall -Wno-unused -Wmisleading-indentation -DCXX17 -DWITH_WARN -ftabstop 2 -DTAB_SIZE=2 %s7 8#ifndef WITH_WARN9// expected-no-diagnostics10#endif11 12void f0(int i) {13 if (i)14#ifdef WITH_WARN15// expected-note@-2 {{here}}16#endif17 i = i + 1;18 int x = 0;19#ifdef WITH_WARN20// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}21#endif22 return;23#ifdef CXX1724 if constexpr (false)25#ifdef WITH_WARN26// expected-note@-2 {{here}}27#endif28 i = 0;29 i += 1;30#ifdef WITH_WARN31// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}32#endif33#endif34}35 36void f1(int i) {37 for (;i;)38#ifdef WITH_WARN39// expected-note@-2 {{here}}40#endif41 i = i + 1;42 i *= 2;43#ifdef WITH_WARN44// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'for'}}45#endif46 return;47}48 49void f2(int i) {50 while (i)51#ifdef WITH_WARN52// expected-note@-2 {{here}}53#endif54 i = i + 1; i *= 2;55#ifdef WITH_WARN56// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'while'}}57#endif58 return;59}60 61void f3(int i) {62 if (i)63 i = i + 1;64 else65#ifdef WITH_WARN66// expected-note@-2 {{here}}67#endif68 i *= 2;69 const int x = 0;70#ifdef WITH_WARN71// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'else'}}72#endif73}74 75#ifdef CXX1776struct Range {77 int *begin() {return nullptr;}78 int *end() {return nullptr;}79};80#endif81 82void f4(int i) {83 if (i)84 i *= 2;85 return;86 if (i)87 i *= 2;88 ;89 if (i)90#ifdef WITH_WARN91// expected-note@-2 {{here}}92#endif93 i *= 2;94 typedef int Int;95#ifdef WITH_WARN96// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}97#endif98#ifdef CXX1799 Range R;100 for (auto e : R)101#ifdef WITH_WARN102// expected-note@-2 {{here}}103#endif104 i *= 2;105 using Int2 = int;106#ifdef WITH_WARN107// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'for'}}108#endif109#endif110}111 112int bar(void);113 114int foo(int* dst)115{ 116 if (dst)117 return118 bar();119 if (dst)120 dst = dst + \121 bar();122 return 0;123}124 125void g(int i) {126 if (1)127 i = 2;128 else129 if (i == 3)130#ifdef WITH_WARN131// expected-note@-3 {{here}}132#endif133 i = 4;134 i = 5;135#ifdef WITH_WARN136// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}137#endif138}139 140// Or this141#define TEST i = 5142void g0(int i) {143 if (1)144 i = 2;145 else146 i = 5;147 TEST;148}149 150void g1(int i) {151 if (1)152 i = 2;153 else if (i == 3)154#ifdef WITH_WARN155// expected-note@-2 {{here}}156#endif157 i = 4;158 i = 5;159#ifdef WITH_WARN160// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}161#endif162}163 164void g2(int i) {165 if (1)166 i = 2;167 else168 if (i == 3)169 {i = 4;}170 i = 5;171}172 173void g6(int i) {174 if (1)175 if (i == 3)176#ifdef WITH_WARN177// expected-note@-2 {{here}}178#endif179 i = 4;180 i = 5;181#ifdef WITH_WARN182// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}183#endif184}185 186void g7(int i) {187 if (1)188 i = 4;189#ifdef TEST1190#endif191 i = 5;192}193 194void a1(int i) { if (1) i = 4; return; }195 196void a2(int i) {197 {198 if (1)199 i = 4;200 }201 return;202}203 204void a3(int i) {205 if (1)206 {207 i = 4;208 }209 return;210}211 212void s(int num) {213 {214 if (1)215 return;216 else217 return;218 return;219 }220 if (0)221#ifdef WITH_WARN222// expected-note@-2 {{here}}223#endif224 return;225 return;226#ifdef WITH_WARN227// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}228#endif229}230int a4(void)231{232 if (0)233 return 1;234 return 0;235#if (TAB_SIZE == 1)236// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}237// expected-note@-5 {{here}}238#endif 239}240 241int a5(void)242{243 if (0)244 return 1;245 return 0;246#if WITH_WARN247// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}248// expected-note@-5 {{here}}249#endif250}251 252int a6(void)253{254 if (0)255 return 1;256 return 0;257#if (TAB_SIZE == 8)258// expected-warning@-2 {{misleading indentation; statement is not part of the previous 'if'}}259// expected-note@-5 {{here}}260#endif261}262 263#define FOO \264 goto fail265 266int main(int argc, char* argv[]) {267 if (5 != 0)268 goto fail;269 else270 goto fail;271 272 if (1) {273 if (1)274 goto fail;275 else if (1)276 goto fail;277 else if (1)278 goto fail;279 else280 goto fail;281 } else if (1) {282 if (1)283 goto fail;284 }285 286 if (1) {287 if (1)288 goto fail;289 } else if (1)290 goto fail;291 292 293 if (1) goto fail; goto fail;294 295 if (0)296 goto fail;297 298 goto fail;299 300 if (0)301 FOO;302 303 goto fail;304 305fail:;306}307 308void f_label(int b) {309 if (b)310 return;311 a:312 return;313 goto a;314}315