From b55cb4a133f6a190683d82fe667da268c488c80e Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 19 Feb 2005 03:57:21 +0000 Subject: re PR java/20056 ('verification failed: incompatible type on stack' with --indirect-dispatch) PR java/20056: * verify.cc (type::equals): Fixed test. * testsuite/libjava.lang/PR20056.out: New file. * testsuite/libjava.lang/PR20056.java: New file. From-SVN: r95266 --- libjava/ChangeLog | 7 +++++++ libjava/testsuite/libjava.lang/PR20056.java | 13 +++++++++++++ libjava/testsuite/libjava.lang/PR20056.out | 1 + libjava/verify.cc | 8 ++++---- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 libjava/testsuite/libjava.lang/PR20056.java create mode 100644 libjava/testsuite/libjava.lang/PR20056.out (limited to 'libjava') diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 808f527..11b3228 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,10 @@ +2005-02-18 Tom Tromey + + PR java/20056: + * verify.cc (type::equals): Fixed test. + * testsuite/libjava.lang/PR20056.out: New file. + * testsuite/libjava.lang/PR20056.java: New file. + 2005-02-18 Bryce McKinlay * java/util/LinkedHashMap (addEntry): Call remove() with key argument, diff --git a/libjava/testsuite/libjava.lang/PR20056.java b/libjava/testsuite/libjava.lang/PR20056.java new file mode 100644 index 0000000..f73eb7f --- /dev/null +++ b/libjava/testsuite/libjava.lang/PR20056.java @@ -0,0 +1,13 @@ +public class PR20056 { + int x; + PR20056(int x) {} + PR20056(PR20056 f) { + // The verifier rejected the generated code in this case. + this(f.x = 0); + } + + public static void main(String[] args) + { + System.out.println("maude"); + } +} diff --git a/libjava/testsuite/libjava.lang/PR20056.out b/libjava/testsuite/libjava.lang/PR20056.out new file mode 100644 index 0000000..b3668c4 --- /dev/null +++ b/libjava/testsuite/libjava.lang/PR20056.out @@ -0,0 +1 @@ +maude diff --git a/libjava/verify.cc b/libjava/verify.cc index 9df0316..a809307 100644 --- a/libjava/verify.cc +++ b/libjava/verify.cc @@ -754,10 +754,10 @@ private: bool equals (const type &other, _Jv_BytecodeVerifier *vfy) { // Only works for reference types. - if (key != reference_type - || key != uninitialized_reference_type - || other.key != reference_type - || other.key != uninitialized_reference_type) + if ((key != reference_type + && key != uninitialized_reference_type) + || (other.key != reference_type + && other.key != uninitialized_reference_type)) return false; // Only for single-valued types. if (klass->ref_next || other.klass->ref_next) -- cgit v1.1