7024096: Stack trace has invalid line numbers
Reviewed-by: jjg, darcy
Contributed-by: bruce.chapman.nz@gmail.com
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Sep 01 14:35:59 2011 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Fri Sep 02 07:54:16 2011 -0700
@@ -1689,6 +1689,8 @@
// 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();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/jvm/T7024096.java Fri Sep 02 07:54:16 2011 -0700
@@ -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;
+ }
+}