/* 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