| /* Verify -Wmisleading-indentation with source-printing. |
| This is a subset of Wmisleading-indentation.c. */ |
| |
| /* { dg-options "-Wmisleading-indentation -fdiagnostics-show-caret" } */ |
| /* { dg-do compile } */ |
| |
| extern int foo (int); |
| extern int bar (int, int); |
| extern int flagA; |
| extern int flagB; |
| extern int flagC; |
| extern int flagD; |
| |
| void |
| fn_5 (double *a, double *b, double *sum, double *prod) |
| { |
| int i = 0; |
| for (i = 0; i < 10; i++) /* { dg-warning "3: this 'for' clause does not guard..." } */ |
| sum[i] = a[i] * b[i]; |
| prod[i] = a[i] * b[i]; /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'" } */ |
| /* { dg-begin-multiline-output "" } |
| for (i = 0; i < 10; i++) |
| ^~~ |
| { dg-end-multiline-output "" } */ |
| /* { dg-begin-multiline-output "" } |
| prod[i] = a[i] * b[i]; |
| ^~~~ |
| { dg-end-multiline-output "" } */ |
| } |
| |
| /* Based on CVE-2014-1266 aka "goto fail" */ |
| int fn_6 (int a, int b, int c) |
| { |
| int err; |
| |
| /* ... */ |
| if ((err = foo (a)) != 0) |
| goto fail; |
| if ((err = foo (b)) != 0) /* { dg-message "9: this 'if' clause does not guard..." } */ |
| goto fail; |
| goto fail; /* { dg-message "17: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'" } */ |
| if ((err = foo (c)) != 0) |
| goto fail; |
| /* ... */ |
| |
| /* { dg-begin-multiline-output "" } |
| if ((err = foo (b)) != 0) |
| ^~ |
| { dg-end-multiline-output "" } */ |
| /* { dg-begin-multiline-output "" } |
| goto fail; |
| ^~~~ |
| { dg-end-multiline-output "" } */ |
| |
| fail: |
| return err; |
| } |
| |
| #define FOR_EACH(VAR, START, STOP) \ |
| for ((VAR) = (START); (VAR) < (STOP); (VAR++)) /* { dg-warning "3: this 'for' clause does not guard..." } */ |
| |
| void fn_14 (void) |
| { |
| int i; |
| FOR_EACH (i, 0, 10) /* { dg-message "in expansion of macro .FOR_EACH." } */ |
| foo (i); |
| bar (i, i); /* { dg-message "5: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'" } */ |
| |
| /* { dg-begin-multiline-output "" } |
| for ((VAR) = (START); (VAR) < (STOP); (VAR++)) |
| ^~~ |
| { dg-end-multiline-output "" } */ |
| /* { dg-begin-multiline-output "" } |
| FOR_EACH (i, 0, 10) |
| ^~~~~~~~ |
| { dg-end-multiline-output "" } */ |
| /* { dg-begin-multiline-output "" } |
| bar (i, i); |
| ^~~ |
| { dg-end-multiline-output "" } */ |
| } |
| #undef FOR_EACH |