/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code 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
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* @test
* @bug 4238644 4238643 4238641 4944198
* @summary Test javac regressions in the generation of line number info
* @author Gordon Hirsch
*
* @run build TestScaffold VMConnection TargetListener TargetAdapter
* @run compile -g LineNumberInfo.java ControlFlow.java
*
* @run main LineNumberInfo
*/
/*
* These two arrays are used to validate the line number
* information returned by JDI. There are limitations to
* this approach:
* - there are no strict rules about
* what constitutes the "right" line number mapping, so
* this kind of test may have false negatives with other
* compilers.
* - this test is also sensitive to the compiler's code generation;
* if that changes, this test will likely need updating.
* - this test assumes that JDI code index == class file
* byte code index which may not be true in all VMs.
* - To find the values for these tables, compile ControlFlow.java and then
* do:
* -l ControlFlow
*/
final int[] lineNumbers = {
15,
16,
19,
20,
22,
25,
26,
28,
32,
33,
34,
36,
37,
36,
40,
41,
42,
45,
46,
45,
49,
51,
53,
55,
57,
59,
60,
62,
65,
67,
69,
71,
73,
75,
78
};
final int[] codeIndices = {
0 ,
7 ,
15 ,
22 ,
33 ,
43 ,
50 ,
60 ,
68 ,
76 ,
77 ,
85 ,
93 ,
96 ,
107,
111,
119,
129,
139,
178,
184,
240,
250,
260,
270,
280,
288,
291,
301,
336,
346,
356,
366,
376,
384
};
super(args);
}
}
startUp("ControlFlow");
// Get the ControlFlow class loaded.
failure("FAILED: Bad test. Line number and code index arrays " +
"must be equal in size");
}
// Help the tester see why it failed.
}
failure("FAILED: Bad line number table size: jdi=" +
}
int i = 0;
failure("FAILED: Code index mismatch: jdi=" +
", test=" + codeIndices[i]);
}
failure("FAILED: Line number mismatch: jdi=" +
location.lineNumber() +
", test=" + lineNumbers[i]);
}
i++;
}
// Allow application to complete
/*
* deal with results of test
* if anything has called failure("foo") testFailed will be true
*/
if (!testFailed) {
println("LineNumberInfo: passed");
} else {
throw new Exception("LineNumberInfo: failed");
}
}
}