diff --git a/src/share/classes/com/sun/tools/javac/jvm/Gen.java b/src/share/classes/com/sun/tools/javac/jvm/Gen.java index bbde8d9ee3593d1b446670e8eafb2c43616e3fe6..618700ec83f7bde9304656fd46a2088b4ceb13ee 100644 --- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java +++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java @@ -1689,6 +1689,8 @@ public class Gen extends JCTree.Visitor { // outer instance of a super(...) call appears as first parameter). genArgs(tree.args, TreeInfo.symbol(tree.meth).externalType(types).getParameterTypes()); + code.statBegin(tree.pos); + code.markStatBegin(); result = m.invoke(); } diff --git a/test/tools/javac/jvm/T7024096.java b/test/tools/javac/jvm/T7024096.java new file mode 100644 index 0000000000000000000000000000000000000000..04af2d5ec57eaf5ea0f1401a6acc7ae85bc45d15 --- /dev/null +++ b/test/tools/javac/jvm/T7024096.java @@ -0,0 +1,31 @@ +/* + * @test /nodynamiccopyright/ + * @bug 7024096 + * @summary Stack trace has invalid line numbers + * @author Bruce Chapman + * @compile T7024096.java + * @run main T7024096 + */ + +public class T7024096 { + private static final int START = 14; // starting line number for the test + public static void main(String[] args) { + T7024096 m = new T7024096(); + m.nest(START); + m.nest(START + 1, m.nest(START + 1), m.nest(START + 1), + m.nest(START + 2), + m.nest(START + 3, m.nest(START + 3))); + } + + public T7024096 nest(int expectedline, T7024096... args) { + Exception e = new Exception("expected line#: " + expectedline); + int myline = e.getStackTrace()[1].getLineNumber(); + if( myline != expectedline) { + throw new RuntimeException("Incorrect line number " + + "expected: " + expectedline + + ", got: " + myline, e); + } + System.out.format("Got expected line number %d correct %n", myline); + return null; + } +}