On 11/04/2015 05:18 PM, Andreas Arnez wrote:
> After parsing an unconditional "while"- or "for"-loop, the C front-end
> generates a backward-goto statement and implicitly sets its location to
> the current input_location.  But in some cases the parser peeks ahead
> first, such that input_location already points to the line after the
> loop and the generated backward-goto gets the wrong line number.
> 
> One way this can occur is with a loop body consisting of an "if"
> statement, because then the parser peeks for an optional "else" before
> finishing the loop.
> 
> Another way occurred after r223098 ("Implement
> -Wmisleading-indentation"), even with a loop body enclosed in braces.
> This was because the check for misleading indentation always peeks ahead
> one token as well.
> 
> This patch avoids the use of input_location and sets the location of the
> backward-goto to the start of the loop body instead, or, if there is no
> loop body, to the start of the loop.
> 
> gcc/c/ChangeLog:
> 
>       PR debug/67192
>       * c-typeck.c (c_finish_loop): For unconditional loops, set the
>       location of the backward-goto to the start of the loop body.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR debug/67192
>       * gcc.dg/guality/pr67192.c (f3, f4): New functions.
>       (main): Invoke them.

Applied. Thanks!

-Andreas-


Reply via email to