# Test step/next in presence of #line directives
# Copyright (C) 2001, 2007, 2012
# Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# We pretend that this file has been transformed by some other tool
# into step-line.c.


FUNCTION f1 (i : INTEGER);
  BEGIN
    i = f2 (i);
    i = f2 (i);
    RETURN (i);
  END

FUNCTION f2 (i : INTEGER);
  BEGIN
    VARIABLE j : INTEGER
    j = i;
    j = SUCC (j);
    j = j - i;
    RETURN (j);
  END

BEGIN
  VARIABLE i : INTEGER;;

END
